From 04e89d6f32344636e52640925a32db035cb9b35f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Sep 2025 03:57:02 +0000 Subject: [PATCH 1/3] Initial plan From a1b304cba2d2b29a169ca4875ddc11b407ecbd9e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Sep 2025 04:11:32 +0000 Subject: [PATCH 2/3] Complete comprehensive test framework for BlockPy interface Co-authored-by: acbart <897227+acbart@users.noreply.github.com> --- coverage/clover.xml | 3137 ++++ coverage/coverage-final.json | 39 + coverage/lcov-report/base.css | 224 + coverage/lcov-report/block-navigation.js | 87 + coverage/lcov-report/favicon.png | Bin 0 -> 445 bytes coverage/lcov-report/index.html | 146 + coverage/lcov-report/prettify.css | 1 + coverage/lcov-report/prettify.js | 2 + coverage/lcov-report/sort-arrow-sprite.png | Bin 0 -> 138 bytes coverage/lcov-report/sorter.js | 210 + coverage/lcov-report/src/blockpy.js.html | 3931 +++++ coverage/lcov-report/src/console.js.html | 1930 +++ coverage/lcov-report/src/corgis.js.html | 523 + coverage/lcov-report/src/dialog.js.html | 814 + .../src/editor/abstract_editor.js.html | 406 + .../src/editor/assignment_settings.js.html | 1312 ++ .../src/editor/default_header.js.html | 193 + .../lcov-report/src/editor/images.js.html | 961 ++ coverage/lcov-report/src/editor/index.html | 281 + coverage/lcov-report/src/editor/json.js.html | 355 + .../lcov-report/src/editor/markdown.js.html | 310 + .../lcov-report/src/editor/python.js.html | 1486 ++ coverage/lcov-report/src/editor/quiz.js.html | 343 + .../src/editor/sample_submissions.js.html | 592 + coverage/lcov-report/src/editor/tags.js.html | 178 + coverage/lcov-report/src/editor/text.js.html | 349 + .../lcov-report/src/editor/toolbox.js.html | 388 + coverage/lcov-report/src/editors.js.html | 493 + coverage/lcov-report/src/engine.js.html | 787 + .../src/engine/configurations.js.html | 742 + coverage/lcov-report/src/engine/eval.js.html | 286 + coverage/lcov-report/src/engine/index.html | 251 + .../lcov-report/src/engine/instructor.js.html | 592 + .../lcov-report/src/engine/on_change.js.html | 121 + .../lcov-report/src/engine/on_eval.js.html | 577 + .../lcov-report/src/engine/on_run.js.html | 820 + .../lcov-report/src/engine/on_sample.js.html | 115 + coverage/lcov-report/src/engine/run.js.html | 388 + .../lcov-report/src/engine/sample.js.html | 118 + .../lcov-report/src/engine/student.js.html | 676 + coverage/lcov-report/src/feedback.js.html | 1456 ++ coverage/lcov-report/src/files.js.html | 2296 +++ coverage/lcov-report/src/footer.js.html | 205 + coverage/lcov-report/src/history.js.html | 694 + coverage/lcov-report/src/index.html | 341 + coverage/lcov-report/src/interface.js.html | 784 + coverage/lcov-report/src/server.js.html | 2164 +++ coverage/lcov-report/src/storage.js.html | 412 + coverage/lcov-report/src/toolbar.js.html | 574 + coverage/lcov-report/src/trace.js.html | 1114 ++ coverage/lcov-report/src/utilities.js.html | 1123 ++ coverage/lcov.info | 6030 ++++++++ docs/TESTING.md | 176 + jest.config.js | 40 + npm-shrinkwrap.json | 12740 +++++++++++----- package.json | 14 +- tests/blockpy.test.js | 72 + tests/dialog.test.js | 108 + tests/editors.test.js | 34 + tests/feedback.test.js | 104 + tests/integration.test.js | 176 + tests/interface.test.js | 73 + tests/setup.js | 79 + tests/storage.test.js | 53 + tests/utilities.test.js | 40 + 65 files changed, 51595 insertions(+), 3471 deletions(-) create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov-report/base.css create mode 100644 coverage/lcov-report/block-navigation.js create mode 100644 coverage/lcov-report/favicon.png create mode 100644 coverage/lcov-report/index.html create mode 100644 coverage/lcov-report/prettify.css create mode 100644 coverage/lcov-report/prettify.js create mode 100644 coverage/lcov-report/sort-arrow-sprite.png create mode 100644 coverage/lcov-report/sorter.js create mode 100644 coverage/lcov-report/src/blockpy.js.html create mode 100644 coverage/lcov-report/src/console.js.html create mode 100644 coverage/lcov-report/src/corgis.js.html create mode 100644 coverage/lcov-report/src/dialog.js.html create mode 100644 coverage/lcov-report/src/editor/abstract_editor.js.html create mode 100644 coverage/lcov-report/src/editor/assignment_settings.js.html create mode 100644 coverage/lcov-report/src/editor/default_header.js.html create mode 100644 coverage/lcov-report/src/editor/images.js.html create mode 100644 coverage/lcov-report/src/editor/index.html create mode 100644 coverage/lcov-report/src/editor/json.js.html create mode 100644 coverage/lcov-report/src/editor/markdown.js.html create mode 100644 coverage/lcov-report/src/editor/python.js.html create mode 100644 coverage/lcov-report/src/editor/quiz.js.html create mode 100644 coverage/lcov-report/src/editor/sample_submissions.js.html create mode 100644 coverage/lcov-report/src/editor/tags.js.html create mode 100644 coverage/lcov-report/src/editor/text.js.html create mode 100644 coverage/lcov-report/src/editor/toolbox.js.html create mode 100644 coverage/lcov-report/src/editors.js.html create mode 100644 coverage/lcov-report/src/engine.js.html create mode 100644 coverage/lcov-report/src/engine/configurations.js.html create mode 100644 coverage/lcov-report/src/engine/eval.js.html create mode 100644 coverage/lcov-report/src/engine/index.html create mode 100644 coverage/lcov-report/src/engine/instructor.js.html create mode 100644 coverage/lcov-report/src/engine/on_change.js.html create mode 100644 coverage/lcov-report/src/engine/on_eval.js.html create mode 100644 coverage/lcov-report/src/engine/on_run.js.html create mode 100644 coverage/lcov-report/src/engine/on_sample.js.html create mode 100644 coverage/lcov-report/src/engine/run.js.html create mode 100644 coverage/lcov-report/src/engine/sample.js.html create mode 100644 coverage/lcov-report/src/engine/student.js.html create mode 100644 coverage/lcov-report/src/feedback.js.html create mode 100644 coverage/lcov-report/src/files.js.html create mode 100644 coverage/lcov-report/src/footer.js.html create mode 100644 coverage/lcov-report/src/history.js.html create mode 100644 coverage/lcov-report/src/index.html create mode 100644 coverage/lcov-report/src/interface.js.html create mode 100644 coverage/lcov-report/src/server.js.html create mode 100644 coverage/lcov-report/src/storage.js.html create mode 100644 coverage/lcov-report/src/toolbar.js.html create mode 100644 coverage/lcov-report/src/trace.js.html create mode 100644 coverage/lcov-report/src/utilities.js.html create mode 100644 coverage/lcov.info create mode 100644 docs/TESTING.md create mode 100644 jest.config.js create mode 100644 tests/blockpy.test.js create mode 100644 tests/dialog.test.js create mode 100644 tests/editors.test.js create mode 100644 tests/feedback.test.js create mode 100644 tests/integration.test.js create mode 100644 tests/interface.test.js create mode 100644 tests/setup.js create mode 100644 tests/storage.test.js create mode 100644 tests/utilities.test.js diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 000000000..6a75ad032 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,3137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 000000000..89824db2d --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,39 @@ +{"/home/runner/work/blockpy/blockpy/src/blockpy.js": {"path":"/home/runner/work/blockpy/blockpy/src/blockpy.js","statementMap":{"0":{"start":{"line":40,"column":23},"end":{"line":40,"column":30}},"1":{"start":{"line":58,"column":8},"end":{"line":58,"column":38}},"2":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"3":{"start":{"line":60,"column":12},"end":{"line":60,"column":70}},"4":{"start":{"line":62,"column":8},"end":{"line":62,"column":24}},"5":{"start":{"line":71,"column":8},"end":{"line":71,"column":29}},"6":{"start":{"line":72,"column":8},"end":{"line":72,"column":32}},"7":{"start":{"line":73,"column":8},"end":{"line":73,"column":27}},"8":{"start":{"line":74,"column":8},"end":{"line":74,"column":29}},"9":{"start":{"line":75,"column":8},"end":{"line":75,"column":26}},"10":{"start":{"line":76,"column":8},"end":{"line":76,"column":30}},"11":{"start":{"line":77,"column":8},"end":{"line":77,"column":38}},"12":{"start":{"line":78,"column":8},"end":{"line":78,"column":21}},"13":{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},"14":{"start":{"line":88,"column":12},"end":{"line":88,"column":51}},"15":{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},"16":{"start":{"line":90,"column":12},"end":{"line":90,"column":48}},"17":{"start":{"line":92,"column":12},"end":{"line":92,"column":32}},"18":{"start":{"line":110,"column":8},"end":{"line":110,"column":71}},"19":{"start":{"line":111,"column":8},"end":{"line":111,"column":51}},"20":{"start":{"line":114,"column":8},"end":{"line":416,"column":10}},"21":{"start":{"line":423,"column":24},"end":{"line":423,"column":48}},"22":{"start":{"line":424,"column":18},"end":{"line":424,"column":37}},"23":{"start":{"line":425,"column":8},"end":{"line":425,"column":72}},"24":{"start":{"line":429,"column":8},"end":{"line":429,"column":61}},"25":{"start":{"line":441,"column":8},"end":{"line":441,"column":61}},"26":{"start":{"line":442,"column":8},"end":{"line":442,"column":96}},"27":{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},"28":{"start":{"line":448,"column":12},"end":{"line":448,"column":46}},"29":{"start":{"line":449,"column":12},"end":{"line":449,"column":25}},"30":{"start":{"line":452,"column":8},"end":{"line":452,"column":48}},"31":{"start":{"line":453,"column":8},"end":{"line":453,"column":65}},"32":{"start":{"line":454,"column":8},"end":{"line":454,"column":106}},"33":{"start":{"line":455,"column":8},"end":{"line":455,"column":58}},"34":{"start":{"line":456,"column":8},"end":{"line":456,"column":54}},"35":{"start":{"line":457,"column":8},"end":{"line":457,"column":60}},"36":{"start":{"line":458,"column":8},"end":{"line":458,"column":50}},"37":{"start":{"line":459,"column":8},"end":{"line":459,"column":58}},"38":{"start":{"line":460,"column":8},"end":{"line":460,"column":101}},"39":{"start":{"line":461,"column":8},"end":{"line":461,"column":107}},"40":{"start":{"line":462,"column":8},"end":{"line":462,"column":58}},"41":{"start":{"line":463,"column":8},"end":{"line":463,"column":55}},"42":{"start":{"line":464,"column":8},"end":{"line":464,"column":87}},"43":{"start":{"line":468,"column":8},"end":{"line":468,"column":28}},"44":{"start":{"line":469,"column":8},"end":{"line":469,"column":30}},"45":{"start":{"line":470,"column":8},"end":{"line":470,"column":56}},"46":{"start":{"line":471,"column":33},"end":{"line":471,"column":75}},"47":{"start":{"line":472,"column":8},"end":{"line":472,"column":56}},"48":{"start":{"line":473,"column":25},"end":{"line":473,"column":40}},"49":{"start":{"line":474,"column":8},"end":{"line":474,"column":48}},"50":{"start":{"line":475,"column":8},"end":{"line":475,"column":58}},"51":{"start":{"line":476,"column":8},"end":{"line":476,"column":61}},"52":{"start":{"line":477,"column":8},"end":{"line":477,"column":61}},"53":{"start":{"line":478,"column":8},"end":{"line":478,"column":71}},"54":{"start":{"line":479,"column":8},"end":{"line":479,"column":56}},"55":{"start":{"line":480,"column":8},"end":{"line":480,"column":60}},"56":{"start":{"line":481,"column":8},"end":{"line":481,"column":56}},"57":{"start":{"line":482,"column":8},"end":{"line":482,"column":52}},"58":{"start":{"line":483,"column":8},"end":{"line":483,"column":50}},"59":{"start":{"line":484,"column":8},"end":{"line":484,"column":56}},"60":{"start":{"line":485,"column":8},"end":{"line":485,"column":61}},"61":{"start":{"line":486,"column":8},"end":{"line":486,"column":68}},"62":{"start":{"line":487,"column":8},"end":{"line":487,"column":52}},"63":{"start":{"line":488,"column":8},"end":{"line":488,"column":69}},"64":{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},"65":{"start":{"line":490,"column":12},"end":{"line":490,"column":86}},"66":{"start":{"line":492,"column":8},"end":{"line":492,"column":65}},"67":{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},"68":{"start":{"line":494,"column":12},"end":{"line":494,"column":82}},"69":{"start":{"line":496,"column":8},"end":{"line":496,"column":55}},"70":{"start":{"line":497,"column":8},"end":{"line":497,"column":69}},"71":{"start":{"line":498,"column":8},"end":{"line":498,"column":59}},"72":{"start":{"line":499,"column":8},"end":{"line":499,"column":39}},"73":{"start":{"line":500,"column":8},"end":{"line":500,"column":66}},"74":{"start":{"line":501,"column":8},"end":{"line":501,"column":108}},"75":{"start":{"line":502,"column":8},"end":{"line":502,"column":104}},"76":{"start":{"line":503,"column":8},"end":{"line":503,"column":64}},"77":{"start":{"line":504,"column":8},"end":{"line":504,"column":57}},"78":{"start":{"line":505,"column":8},"end":{"line":505,"column":49}},"79":{"start":{"line":506,"column":8},"end":{"line":506,"column":53}},"80":{"start":{"line":507,"column":8},"end":{"line":507,"column":69}},"81":{"start":{"line":508,"column":8},"end":{"line":508,"column":50}},"82":{"start":{"line":509,"column":8},"end":{"line":509,"column":50}},"83":{"start":{"line":510,"column":8},"end":{"line":510,"column":53}},"84":{"start":{"line":512,"column":8},"end":{"line":512,"column":72}},"85":{"start":{"line":516,"column":19},"end":{"line":516,"column":23}},"86":{"start":{"line":517,"column":20},"end":{"line":517,"column":30}},"87":{"start":{"line":518,"column":8},"end":{"line":1181,"column":10}},"88":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"89":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"90":{"start":{"line":527,"column":20},"end":{"line":527,"column":64}},"91":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"92":{"start":{"line":535,"column":20},"end":{"line":535,"column":59}},"93":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"94":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"95":{"start":{"line":546,"column":20},"end":{"line":546,"column":74}},"96":{"start":{"line":549,"column":20},"end":{"line":549,"column":57}},"97":{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},"98":{"start":{"line":553,"column":24},"end":{"line":553,"column":83}},"99":{"start":{"line":555,"column":24},"end":{"line":555,"column":82}},"100":{"start":{"line":557,"column":20},"end":{"line":557,"column":78}},"101":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"102":{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},"103":{"start":{"line":565,"column":24},"end":{"line":565,"column":93}},"104":{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},"105":{"start":{"line":567,"column":24},"end":{"line":567,"column":52}},"106":{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},"107":{"start":{"line":569,"column":24},"end":{"line":569,"column":37}},"108":{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},"109":{"start":{"line":572,"column":28},"end":{"line":572,"column":44}},"110":{"start":{"line":574,"column":28},"end":{"line":574,"column":50}},"111":{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},"112":{"start":{"line":580,"column":24},"end":{"line":580,"column":89}},"113":{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},"114":{"start":{"line":582,"column":24},"end":{"line":582,"column":84}},"115":{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},"116":{"start":{"line":584,"column":24},"end":{"line":584,"column":60}},"117":{"start":{"line":586,"column":24},"end":{"line":586,"column":83}},"118":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"119":{"start":{"line":594,"column":20},"end":{"line":594,"column":85}},"120":{"start":{"line":597,"column":20},"end":{"line":597,"column":65}},"121":{"start":{"line":600,"column":20},"end":{"line":600,"column":57}},"122":{"start":{"line":603,"column":20},"end":{"line":603,"column":70}},"123":{"start":{"line":606,"column":34},"end":{"line":606,"column":128}},"124":{"start":{"line":614,"column":20},"end":{"line":614,"column":57}},"125":{"start":{"line":617,"column":36},"end":{"line":617,"column":57}},"126":{"start":{"line":619,"column":36},"end":{"line":619,"column":72}},"127":{"start":{"line":620,"column":20},"end":{"line":620,"column":82}},"128":{"start":{"line":623,"column":20},"end":{"line":626,"column":22}},"129":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"130":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"131":{"start":{"line":638,"column":20},"end":{"line":638,"column":64}},"132":{"start":{"line":641,"column":20},"end":{"line":641,"column":97}},"133":{"start":{"line":644,"column":20},"end":{"line":644,"column":94}},"134":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"135":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"136":{"start":{"line":654,"column":39},"end":{"line":654,"column":73}},"137":{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},"138":{"start":{"line":656,"column":24},"end":{"line":656,"column":75}},"139":{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},"140":{"start":{"line":658,"column":24},"end":{"line":658,"column":71}},"141":{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},"142":{"start":{"line":660,"column":24},"end":{"line":660,"column":72}},"143":{"start":{"line":662,"column":24},"end":{"line":662,"column":71}},"144":{"start":{"line":666,"column":41},"end":{"line":666,"column":75}},"145":{"start":{"line":667,"column":20},"end":{"line":667,"column":79}},"146":{"start":{"line":668,"column":20},"end":{"line":668,"column":67}},"147":{"start":{"line":671,"column":37},"end":{"line":671,"column":79}},"148":{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},"149":{"start":{"line":673,"column":24},"end":{"line":673,"column":71}},"150":{"start":{"line":674,"column":24},"end":{"line":674,"column":39}},"151":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"152":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"153":{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},"154":{"start":{"line":693,"column":24},"end":{"line":693,"column":44}},"155":{"start":{"line":695,"column":20},"end":{"line":719,"column":21}},"156":{"start":{"line":698,"column":28},"end":{"line":698,"column":48}},"157":{"start":{"line":700,"column":28},"end":{"line":700,"column":57}},"158":{"start":{"line":702,"column":28},"end":{"line":702,"column":56}},"159":{"start":{"line":704,"column":28},"end":{"line":704,"column":56}},"160":{"start":{"line":706,"column":28},"end":{"line":706,"column":58}},"161":{"start":{"line":709,"column":28},"end":{"line":709,"column":58}},"162":{"start":{"line":712,"column":28},"end":{"line":712,"column":58}},"163":{"start":{"line":714,"column":28},"end":{"line":714,"column":60}},"164":{"start":{"line":716,"column":28},"end":{"line":716,"column":56}},"165":{"start":{"line":718,"column":28},"end":{"line":718,"column":53}},"166":{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},"167":{"start":{"line":723,"column":24},"end":{"line":723,"column":34}},"168":{"start":{"line":725,"column":20},"end":{"line":749,"column":21}},"169":{"start":{"line":728,"column":28},"end":{"line":728,"column":38}},"170":{"start":{"line":730,"column":28},"end":{"line":730,"column":51}},"171":{"start":{"line":732,"column":28},"end":{"line":732,"column":50}},"172":{"start":{"line":734,"column":28},"end":{"line":734,"column":50}},"173":{"start":{"line":736,"column":28},"end":{"line":736,"column":52}},"174":{"start":{"line":739,"column":28},"end":{"line":739,"column":53}},"175":{"start":{"line":742,"column":28},"end":{"line":742,"column":50}},"176":{"start":{"line":744,"column":28},"end":{"line":744,"column":54}},"177":{"start":{"line":746,"column":28},"end":{"line":746,"column":46}},"178":{"start":{"line":748,"column":28},"end":{"line":748,"column":47}},"179":{"start":{"line":752,"column":20},"end":{"line":752,"column":46}},"180":{"start":{"line":753,"column":20},"end":{"line":753,"column":52}},"181":{"start":{"line":754,"column":20},"end":{"line":754,"column":126}},"182":{"start":{"line":757,"column":20},"end":{"line":757,"column":46}},"183":{"start":{"line":760,"column":37},"end":{"line":760,"column":64}},"184":{"start":{"line":761,"column":20},"end":{"line":761,"column":55}},"185":{"start":{"line":762,"column":20},"end":{"line":762,"column":87}},"186":{"start":{"line":765,"column":20},"end":{"line":768,"column":60}},"187":{"start":{"line":769,"column":20},"end":{"line":772,"column":23}},"188":{"start":{"line":770,"column":24},"end":{"line":770,"column":44}},"189":{"start":{"line":771,"column":24},"end":{"line":771,"column":53}},"190":{"start":{"line":773,"column":37},"end":{"line":773,"column":102}},"191":{"start":{"line":774,"column":20},"end":{"line":774,"column":46}},"192":{"start":{"line":775,"column":20},"end":{"line":780,"column":29}},"193":{"start":{"line":776,"column":24},"end":{"line":776,"column":53}},"194":{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},"195":{"start":{"line":778,"column":28},"end":{"line":778,"column":59}},"196":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"197":{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},"198":{"start":{"line":787,"column":24},"end":{"line":787,"column":104}},"199":{"start":{"line":793,"column":20},"end":{"line":793,"column":71}},"200":{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},"201":{"start":{"line":797,"column":24},"end":{"line":797,"column":34}},"202":{"start":{"line":799,"column":31},"end":{"line":799,"column":73}},"203":{"start":{"line":800,"column":35},"end":{"line":800,"column":69}},"204":{"start":{"line":801,"column":36},"end":{"line":801,"column":78}},"205":{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},"206":{"start":{"line":803,"column":24},"end":{"line":803,"column":34}},"207":{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},"208":{"start":{"line":805,"column":24},"end":{"line":805,"column":34}},"209":{"start":{"line":807,"column":24},"end":{"line":807,"column":56}},"210":{"start":{"line":811,"column":31},"end":{"line":811,"column":73}},"211":{"start":{"line":812,"column":35},"end":{"line":812,"column":69}},"212":{"start":{"line":813,"column":36},"end":{"line":813,"column":78}},"213":{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},"214":{"start":{"line":815,"column":24},"end":{"line":815,"column":42}},"215":{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},"216":{"start":{"line":818,"column":24},"end":{"line":818,"column":44}},"217":{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},"218":{"start":{"line":820,"column":24},"end":{"line":820,"column":46}},"219":{"start":{"line":823,"column":24},"end":{"line":823,"column":64}},"220":{"start":{"line":827,"column":31},"end":{"line":827,"column":73}},"221":{"start":{"line":828,"column":35},"end":{"line":828,"column":69}},"222":{"start":{"line":829,"column":36},"end":{"line":829,"column":78}},"223":{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},"224":{"start":{"line":831,"column":24},"end":{"line":831,"column":49}},"225":{"start":{"line":833,"column":20},"end":{"line":843,"column":21}},"226":{"start":{"line":835,"column":28},"end":{"line":835,"column":56}},"227":{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},"228":{"start":{"line":838,"column":32},"end":{"line":838,"column":66}},"229":{"start":{"line":840,"column":28},"end":{"line":840,"column":56}},"230":{"start":{"line":842,"column":28},"end":{"line":842,"column":94}},"231":{"start":{"line":846,"column":20},"end":{"line":846,"column":64}},"232":{"start":{"line":849,"column":35},"end":{"line":849,"column":94}},"233":{"start":{"line":850,"column":20},"end":{"line":850,"column":71}},"234":{"start":{"line":853,"column":31},"end":{"line":853,"column":123}},"235":{"start":{"line":854,"column":20},"end":{"line":854,"column":67}},"236":{"start":{"line":857,"column":20},"end":{"line":857,"column":97}},"237":{"start":{"line":860,"column":31},"end":{"line":860,"column":73}},"238":{"start":{"line":861,"column":35},"end":{"line":861,"column":69}},"239":{"start":{"line":862,"column":36},"end":{"line":862,"column":78}},"240":{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},"241":{"start":{"line":864,"column":24},"end":{"line":864,"column":34}},"242":{"start":{"line":866,"column":20},"end":{"line":873,"column":21}},"243":{"start":{"line":868,"column":28},"end":{"line":868,"column":38}},"244":{"start":{"line":870,"column":28},"end":{"line":870,"column":55}},"245":{"start":{"line":872,"column":28},"end":{"line":872,"column":51}},"246":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"247":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"248":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"249":{"start":{"line":888,"column":20},"end":{"line":906,"column":21}},"250":{"start":{"line":889,"column":42},"end":{"line":889,"column":73}},"251":{"start":{"line":890,"column":49},"end":{"line":890,"column":88}},"252":{"start":{"line":891,"column":46},"end":{"line":891,"column":90}},"253":{"start":{"line":892,"column":44},"end":{"line":892,"column":86}},"254":{"start":{"line":893,"column":51},"end":{"line":894,"column":70}},"255":{"start":{"line":894,"column":28},"end":{"line":894,"column":68}},"256":{"start":{"line":895,"column":47},"end":{"line":896,"column":66}},"257":{"start":{"line":896,"column":28},"end":{"line":896,"column":64}},"258":{"start":{"line":897,"column":50},"end":{"line":898,"column":69}},"259":{"start":{"line":898,"column":28},"end":{"line":898,"column":67}},"260":{"start":{"line":899,"column":50},"end":{"line":900,"column":69}},"261":{"start":{"line":900,"column":28},"end":{"line":900,"column":67}},"262":{"start":{"line":901,"column":49},"end":{"line":902,"column":68}},"263":{"start":{"line":902,"column":28},"end":{"line":902,"column":66}},"264":{"start":{"line":903,"column":46},"end":{"line":903,"column":84}},"265":{"start":{"line":904,"column":60},"end":{"line":904,"column":111}},"266":{"start":{"line":905,"column":33},"end":{"line":905,"column":46}},"267":{"start":{"line":909,"column":20},"end":{"line":949,"column":21}},"268":{"start":{"line":915,"column":28},"end":{"line":915,"column":69}},"269":{"start":{"line":916,"column":28},"end":{"line":916,"column":34}},"270":{"start":{"line":918,"column":28},"end":{"line":918,"column":75}},"271":{"start":{"line":919,"column":28},"end":{"line":919,"column":34}},"272":{"start":{"line":921,"column":48},"end":{"line":921,"column":111}},"273":{"start":{"line":922,"column":28},"end":{"line":922,"column":83}},"274":{"start":{"line":923,"column":28},"end":{"line":923,"column":84}},"275":{"start":{"line":924,"column":28},"end":{"line":924,"column":34}},"276":{"start":{"line":926,"column":28},"end":{"line":926,"column":91}},"277":{"start":{"line":927,"column":28},"end":{"line":927,"column":69}},"278":{"start":{"line":928,"column":28},"end":{"line":928,"column":34}},"279":{"start":{"line":930,"column":28},"end":{"line":930,"column":58}},"280":{"start":{"line":931,"column":28},"end":{"line":931,"column":69}},"281":{"start":{"line":932,"column":28},"end":{"line":932,"column":34}},"282":{"start":{"line":935,"column":28},"end":{"line":935,"column":56}},"283":{"start":{"line":936,"column":28},"end":{"line":936,"column":69}},"284":{"start":{"line":937,"column":28},"end":{"line":937,"column":34}},"285":{"start":{"line":939,"column":28},"end":{"line":939,"column":83}},"286":{"start":{"line":940,"column":28},"end":{"line":940,"column":35}},"287":{"start":{"line":942,"column":28},"end":{"line":942,"column":80}},"288":{"start":{"line":943,"column":28},"end":{"line":943,"column":35}},"289":{"start":{"line":945,"column":28},"end":{"line":945,"column":81}},"290":{"start":{"line":946,"column":28},"end":{"line":946,"column":35}},"291":{"start":{"line":950,"column":20},"end":{"line":950,"column":49}},"292":{"start":{"line":953,"column":20},"end":{"line":953,"column":91}},"293":{"start":{"line":956,"column":20},"end":{"line":956,"column":100}},"294":{"start":{"line":959,"column":35},"end":{"line":959,"column":90}},"295":{"start":{"line":960,"column":35},"end":{"line":960,"column":90}},"296":{"start":{"line":961,"column":31},"end":{"line":961,"column":59}},"297":{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},"298":{"start":{"line":963,"column":24},"end":{"line":963,"column":56}},"299":{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},"300":{"start":{"line":966,"column":24},"end":{"line":966,"column":56}},"301":{"start":{"line":968,"column":20},"end":{"line":968,"column":32}},"302":{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},"303":{"start":{"line":975,"column":24},"end":{"line":975,"column":42}},"304":{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},"305":{"start":{"line":978,"column":24},"end":{"line":978,"column":40}},"306":{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},"307":{"start":{"line":981,"column":24},"end":{"line":981,"column":47}},"308":{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},"309":{"start":{"line":984,"column":24},"end":{"line":984,"column":47}},"310":{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},"311":{"start":{"line":987,"column":24},"end":{"line":987,"column":41}},"312":{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},"313":{"start":{"line":990,"column":24},"end":{"line":990,"column":45}},"314":{"start":{"line":992,"column":20},"end":{"line":992,"column":32}},"315":{"start":{"line":997,"column":20},"end":{"line":997,"column":79}},"316":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"317":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"318":{"start":{"line":1010,"column":20},"end":{"line":1010,"column":93}},"319":{"start":{"line":1011,"column":20},"end":{"line":1011,"column":75}},"320":{"start":{"line":1012,"column":20},"end":{"line":1017,"column":23}},"321":{"start":{"line":1014,"column":43},"end":{"line":1014,"column":68}},"322":{"start":{"line":1015,"column":28},"end":{"line":1015,"column":76}},"323":{"start":{"line":1020,"column":20},"end":{"line":1020,"column":45}},"324":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"325":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"326":{"start":{"line":1030,"column":20},"end":{"line":1030,"column":56}},"327":{"start":{"line":1034,"column":41},"end":{"line":1034,"column":94}},"328":{"start":{"line":1035,"column":24},"end":{"line":1035,"column":103}},"329":{"start":{"line":1038,"column":24},"end":{"line":1038,"column":116}},"330":{"start":{"line":1039,"column":24},"end":{"line":1039,"column":58}},"331":{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},"332":{"start":{"line":1041,"column":28},"end":{"line":1041,"column":81}},"333":{"start":{"line":1045,"column":24},"end":{"line":1045,"column":74}},"334":{"start":{"line":1047,"column":24},"end":{"line":1047,"column":68}},"335":{"start":{"line":1048,"column":24},"end":{"line":1048,"column":72}},"336":{"start":{"line":1049,"column":24},"end":{"line":1049,"column":57}},"337":{"start":{"line":1052,"column":24},"end":{"line":1060,"column":27}},"338":{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},"339":{"start":{"line":1054,"column":32},"end":{"line":1054,"column":79}},"340":{"start":{"line":1055,"column":32},"end":{"line":1055,"column":64}},"341":{"start":{"line":1056,"column":32},"end":{"line":1056,"column":79}},"342":{"start":{"line":1058,"column":32},"end":{"line":1058,"column":79}},"343":{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},"344":{"start":{"line":1064,"column":28},"end":{"line":1064,"column":73}},"345":{"start":{"line":1066,"column":28},"end":{"line":1066,"column":72}},"346":{"start":{"line":1070,"column":37},"end":{"line":1070,"column":75}},"347":{"start":{"line":1071,"column":40},"end":{"line":1071,"column":79}},"348":{"start":{"line":1072,"column":36},"end":{"line":1072,"column":71}},"349":{"start":{"line":1073,"column":42},"end":{"line":1073,"column":85}},"350":{"start":{"line":1074,"column":35},"end":{"line":1074,"column":65}},"351":{"start":{"line":1078,"column":38},"end":{"line":1078,"column":90}},"352":{"start":{"line":1079,"column":46},"end":{"line":1079,"column":106}},"353":{"start":{"line":1080,"column":46},"end":{"line":1080,"column":106}},"354":{"start":{"line":1081,"column":40},"end":{"line":1081,"column":94}},"355":{"start":{"line":1082,"column":62},"end":{"line":1082,"column":88}},"356":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"357":{"start":{"line":1086,"column":32},"end":{"line":1086,"column":71}},"358":{"start":{"line":1090,"column":37},"end":{"line":1090,"column":89}},"359":{"start":{"line":1091,"column":24},"end":{"line":1091,"column":70}},"360":{"start":{"line":1097,"column":20},"end":{"line":1097,"column":69}},"361":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"362":{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},"363":{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},"364":{"start":{"line":1105,"column":28},"end":{"line":1105,"column":51}},"365":{"start":{"line":1107,"column":24},"end":{"line":1107,"column":68}},"366":{"start":{"line":1109,"column":24},"end":{"line":1109,"column":60}},"367":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"368":{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},"369":{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},"370":{"start":{"line":1118,"column":28},"end":{"line":1118,"column":51}},"371":{"start":{"line":1120,"column":24},"end":{"line":1120,"column":68}},"372":{"start":{"line":1122,"column":24},"end":{"line":1122,"column":64}},"373":{"start":{"line":1126,"column":20},"end":{"line":1126,"column":53}},"374":{"start":{"line":1130,"column":20},"end":{"line":1130,"column":63}},"375":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"376":{"start":{"line":1137,"column":20},"end":{"line":1147,"column":75}},"377":{"start":{"line":1152,"column":56},"end":{"line":1152,"column":71}},"378":{"start":{"line":1154,"column":24},"end":{"line":1154,"column":74}},"379":{"start":{"line":1156,"column":33},"end":{"line":1156,"column":49}},"380":{"start":{"line":1157,"column":36},"end":{"line":1157,"column":70}},"381":{"start":{"line":1158,"column":24},"end":{"line":1161,"column":26}},"382":{"start":{"line":1159,"column":55},"end":{"line":1159,"column":82}},"383":{"start":{"line":1160,"column":28},"end":{"line":1160,"column":75}},"384":{"start":{"line":1162,"column":24},"end":{"line":1162,"column":52}},"385":{"start":{"line":1163,"column":24},"end":{"line":1163,"column":48}},"386":{"start":{"line":1164,"column":24},"end":{"line":1164,"column":58}},"387":{"start":{"line":1167,"column":24},"end":{"line":1167,"column":43}},"388":{"start":{"line":1168,"column":24},"end":{"line":1170,"column":77}},"389":{"start":{"line":1171,"column":24},"end":{"line":1171,"column":65}},"390":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"391":{"start":{"line":1182,"column":8},"end":{"line":1182,"column":53}},"392":{"start":{"line":1187,"column":8},"end":{"line":1187,"column":75}},"393":{"start":{"line":1197,"column":8},"end":{"line":1197,"column":76}},"394":{"start":{"line":1201,"column":19},"end":{"line":1201,"column":23}},"395":{"start":{"line":1202,"column":8},"end":{"line":1204,"column":10}},"396":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"397":{"start":{"line":1208,"column":24},"end":{"line":1208,"column":58}},"398":{"start":{"line":1209,"column":25},"end":{"line":1209,"column":45}},"399":{"start":{"line":1210,"column":19},"end":{"line":1210,"column":23}},"400":{"start":{"line":1213,"column":8},"end":{"line":1213,"column":87}},"401":{"start":{"line":1214,"column":8},"end":{"line":1214,"column":93}},"402":{"start":{"line":1215,"column":8},"end":{"line":1215,"column":50}},"403":{"start":{"line":1216,"column":8},"end":{"line":1216,"column":90}},"404":{"start":{"line":1217,"column":8},"end":{"line":1217,"column":52}},"405":{"start":{"line":1218,"column":8},"end":{"line":1218,"column":60}},"406":{"start":{"line":1219,"column":8},"end":{"line":1219,"column":82}},"407":{"start":{"line":1221,"column":8},"end":{"line":1221,"column":75}},"408":{"start":{"line":1222,"column":8},"end":{"line":1222,"column":52}},"409":{"start":{"line":1223,"column":8},"end":{"line":1223,"column":52}},"410":{"start":{"line":1224,"column":8},"end":{"line":1224,"column":98}},"411":{"start":{"line":1228,"column":8},"end":{"line":1228,"column":50}},"412":{"start":{"line":1233,"column":8},"end":{"line":1233,"column":50}},"413":{"start":{"line":1237,"column":8},"end":{"line":1240,"column":11}},"414":{"start":{"line":1238,"column":12},"end":{"line":1239,"column":72}},"415":{"start":{"line":1241,"column":8},"end":{"line":1241,"column":26}},"416":{"start":{"line":1242,"column":26},"end":{"line":1242,"column":60}},"417":{"start":{"line":1243,"column":28},"end":{"line":1243,"column":94}},"418":{"start":{"line":1243,"column":34},"end":{"line":1243,"column":94}},"419":{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},"420":{"start":{"line":1245,"column":12},"end":{"line":1245,"column":56}},"421":{"start":{"line":1248,"column":8},"end":{"line":1259,"column":11}},"422":{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},"423":{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},"424":{"start":{"line":1251,"column":20},"end":{"line":1251,"column":46}},"425":{"start":{"line":1252,"column":20},"end":{"line":1252,"column":38}},"426":{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},"427":{"start":{"line":1256,"column":20},"end":{"line":1256,"column":64}},"428":{"start":{"line":1263,"column":8},"end":{"line":1263,"column":49}},"429":{"start":{"line":1267,"column":8},"end":{"line":1267,"column":39}},"430":{"start":{"line":1269,"column":8},"end":{"line":1269,"column":50}},"431":{"start":{"line":1273,"column":35},"end":{"line":1273,"column":71}},"432":{"start":{"line":1274,"column":8},"end":{"line":1274,"column":58}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":55},"end":{"line":63,"column":5}},"line":57},"1":{"name":"(anonymous_1)","decl":{"start":{"line":70,"column":4},"end":{"line":70,"column":5}},"loc":{"start":{"line":70,"column":15},"end":{"line":79,"column":5}},"line":70},"2":{"name":"(anonymous_2)","decl":{"start":{"line":86,"column":4},"end":{"line":86,"column":5}},"loc":{"start":{"line":86,"column":34},"end":{"line":94,"column":5}},"line":86},"3":{"name":"(anonymous_3)","decl":{"start":{"line":108,"column":4},"end":{"line":108,"column":5}},"loc":{"start":{"line":108,"column":29},"end":{"line":417,"column":5}},"line":108},"4":{"name":"(anonymous_4)","decl":{"start":{"line":422,"column":4},"end":{"line":422,"column":5}},"loc":{"start":{"line":422,"column":20},"end":{"line":426,"column":5}},"line":422},"5":{"name":"(anonymous_5)","decl":{"start":{"line":428,"column":4},"end":{"line":428,"column":5}},"loc":{"start":{"line":428,"column":34},"end":{"line":430,"column":5}},"line":428},"6":{"name":"(anonymous_6)","decl":{"start":{"line":432,"column":4},"end":{"line":432,"column":5}},"loc":{"start":{"line":432,"column":19},"end":{"line":434,"column":5}},"line":432},"7":{"name":"(anonymous_7)","decl":{"start":{"line":436,"column":4},"end":{"line":436,"column":5}},"loc":{"start":{"line":436,"column":35},"end":{"line":438,"column":5}},"line":436},"8":{"name":"(anonymous_8)","decl":{"start":{"line":440,"column":4},"end":{"line":440,"column":5}},"loc":{"start":{"line":440,"column":33},"end":{"line":443,"column":5}},"line":440},"9":{"name":"(anonymous_9)","decl":{"start":{"line":445,"column":4},"end":{"line":445,"column":5}},"loc":{"start":{"line":445,"column":43},"end":{"line":465,"column":5}},"line":445},"10":{"name":"(anonymous_10)","decl":{"start":{"line":467,"column":4},"end":{"line":467,"column":5}},"loc":{"start":{"line":467,"column":30},"end":{"line":513,"column":5}},"line":467},"11":{"name":"(anonymous_11)","decl":{"start":{"line":515,"column":4},"end":{"line":515,"column":5}},"loc":{"start":{"line":515,"column":23},"end":{"line":1183,"column":5}},"line":515},"12":{"name":"(anonymous_12)","decl":{"start":{"line":519,"column":41},"end":{"line":519,"column":42}},"loc":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"line":520},"13":{"name":"(anonymous_13)","decl":{"start":{"line":522,"column":42},"end":{"line":522,"column":43}},"loc":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"line":523},"14":{"name":"(anonymous_14)","decl":{"start":{"line":526,"column":43},"end":{"line":526,"column":44}},"loc":{"start":{"line":527,"column":20},"end":{"line":527,"column":64}},"line":527},"15":{"name":"(anonymous_15)","decl":{"start":{"line":529,"column":41},"end":{"line":529,"column":42}},"loc":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"line":530},"16":{"name":"(anonymous_16)","decl":{"start":{"line":534,"column":23},"end":{"line":534,"column":24}},"loc":{"start":{"line":535,"column":20},"end":{"line":535,"column":59}},"line":535},"17":{"name":"(anonymous_17)","decl":{"start":{"line":539,"column":20},"end":{"line":539,"column":21}},"loc":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"line":540},"18":{"name":"(anonymous_18)","decl":{"start":{"line":542,"column":48},"end":{"line":542,"column":49}},"loc":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"line":543},"19":{"name":"(anonymous_19)","decl":{"start":{"line":545,"column":33},"end":{"line":545,"column":34}},"loc":{"start":{"line":545,"column":38},"end":{"line":547,"column":17}},"line":545},"20":{"name":"(anonymous_20)","decl":{"start":{"line":548,"column":28},"end":{"line":548,"column":29}},"loc":{"start":{"line":548,"column":34},"end":{"line":550,"column":17}},"line":548},"21":{"name":"(anonymous_21)","decl":{"start":{"line":551,"column":30},"end":{"line":551,"column":31}},"loc":{"start":{"line":551,"column":36},"end":{"line":558,"column":17}},"line":551},"22":{"name":"(anonymous_22)","decl":{"start":{"line":559,"column":50},"end":{"line":559,"column":51}},"loc":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"line":560},"23":{"name":"(anonymous_23)","decl":{"start":{"line":563,"column":51},"end":{"line":563,"column":52}},"loc":{"start":{"line":563,"column":57},"end":{"line":577,"column":17}},"line":563},"24":{"name":"(anonymous_24)","decl":{"start":{"line":578,"column":36},"end":{"line":578,"column":37}},"loc":{"start":{"line":578,"column":42},"end":{"line":588,"column":17}},"line":578},"25":{"name":"(anonymous_25)","decl":{"start":{"line":589,"column":45},"end":{"line":589,"column":46}},"loc":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"line":590},"26":{"name":"(anonymous_26)","decl":{"start":{"line":593,"column":45},"end":{"line":593,"column":46}},"loc":{"start":{"line":594,"column":20},"end":{"line":594,"column":85}},"line":594},"27":{"name":"(anonymous_27)","decl":{"start":{"line":596,"column":50},"end":{"line":596,"column":51}},"loc":{"start":{"line":597,"column":20},"end":{"line":597,"column":65}},"line":597},"28":{"name":"(anonymous_28)","decl":{"start":{"line":599,"column":43},"end":{"line":599,"column":44}},"loc":{"start":{"line":600,"column":20},"end":{"line":600,"column":57}},"line":600},"29":{"name":"(anonymous_29)","decl":{"start":{"line":602,"column":42},"end":{"line":602,"column":43}},"loc":{"start":{"line":603,"column":20},"end":{"line":603,"column":70}},"line":603},"30":{"name":"(anonymous_30)","decl":{"start":{"line":605,"column":29},"end":{"line":605,"column":30}},"loc":{"start":{"line":605,"column":46},"end":{"line":621,"column":17}},"line":605},"31":{"name":"(anonymous_31)","decl":{"start":{"line":622,"column":28},"end":{"line":622,"column":29}},"loc":{"start":{"line":622,"column":45},"end":{"line":627,"column":17}},"line":622},"32":{"name":"(anonymous_32)","decl":{"start":{"line":630,"column":39},"end":{"line":630,"column":40}},"loc":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"line":631},"33":{"name":"(anonymous_33)","decl":{"start":{"line":634,"column":49},"end":{"line":634,"column":50}},"loc":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"line":635},"34":{"name":"(anonymous_34)","decl":{"start":{"line":637,"column":46},"end":{"line":637,"column":47}},"loc":{"start":{"line":638,"column":20},"end":{"line":638,"column":64}},"line":638},"35":{"name":"(anonymous_35)","decl":{"start":{"line":640,"column":51},"end":{"line":640,"column":52}},"loc":{"start":{"line":641,"column":20},"end":{"line":641,"column":97}},"line":641},"36":{"name":"(anonymous_36)","decl":{"start":{"line":643,"column":48},"end":{"line":643,"column":49}},"loc":{"start":{"line":644,"column":20},"end":{"line":644,"column":94}},"line":644},"37":{"name":"(anonymous_37)","decl":{"start":{"line":646,"column":54},"end":{"line":646,"column":55}},"loc":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"line":647},"38":{"name":"(anonymous_38)","decl":{"start":{"line":649,"column":45},"end":{"line":649,"column":46}},"loc":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"line":650},"39":{"name":"(anonymous_39)","decl":{"start":{"line":653,"column":30},"end":{"line":653,"column":31}},"loc":{"start":{"line":653,"column":42},"end":{"line":664,"column":17}},"line":653},"40":{"name":"(anonymous_40)","decl":{"start":{"line":665,"column":26},"end":{"line":665,"column":27}},"loc":{"start":{"line":665,"column":38},"end":{"line":669,"column":17}},"line":665},"41":{"name":"(anonymous_41)","decl":{"start":{"line":670,"column":30},"end":{"line":670,"column":31}},"loc":{"start":{"line":670,"column":41},"end":{"line":676,"column":17}},"line":670},"42":{"name":"(anonymous_42)","decl":{"start":{"line":679,"column":38},"end":{"line":679,"column":39}},"loc":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"line":680},"43":{"name":"(anonymous_43)","decl":{"start":{"line":685,"column":47},"end":{"line":685,"column":48}},"loc":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"line":686},"44":{"name":"(anonymous_44)","decl":{"start":{"line":691,"column":39},"end":{"line":691,"column":40}},"loc":{"start":{"line":691,"column":51},"end":{"line":720,"column":17}},"line":691},"45":{"name":"(anonymous_45)","decl":{"start":{"line":721,"column":42},"end":{"line":721,"column":43}},"loc":{"start":{"line":721,"column":54},"end":{"line":750,"column":17}},"line":721},"46":{"name":"(anonymous_46)","decl":{"start":{"line":751,"column":28},"end":{"line":751,"column":29}},"loc":{"start":{"line":751,"column":34},"end":{"line":755,"column":17}},"line":751},"47":{"name":"(anonymous_47)","decl":{"start":{"line":756,"column":48},"end":{"line":756,"column":49}},"loc":{"start":{"line":757,"column":20},"end":{"line":757,"column":46}},"line":757},"48":{"name":"(anonymous_48)","decl":{"start":{"line":759,"column":28},"end":{"line":759,"column":29}},"loc":{"start":{"line":759,"column":34},"end":{"line":763,"column":17}},"line":759},"49":{"name":"(anonymous_49)","decl":{"start":{"line":764,"column":22},"end":{"line":764,"column":23}},"loc":{"start":{"line":764,"column":54},"end":{"line":781,"column":17}},"line":764},"50":{"name":"(anonymous_50)","decl":{"start":{"line":769,"column":87},"end":{"line":769,"column":88}},"loc":{"start":{"line":769,"column":98},"end":{"line":772,"column":21}},"line":769},"51":{"name":"(anonymous_51)","decl":{"start":{"line":775,"column":31},"end":{"line":775,"column":32}},"loc":{"start":{"line":775,"column":37},"end":{"line":780,"column":21}},"line":775},"52":{"name":"(anonymous_52)","decl":{"start":{"line":782,"column":47},"end":{"line":782,"column":48}},"loc":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"line":783},"53":{"name":"(anonymous_53)","decl":{"start":{"line":785,"column":37},"end":{"line":785,"column":38}},"loc":{"start":{"line":785,"column":92},"end":{"line":789,"column":17}},"line":785},"54":{"name":"(anonymous_54)","decl":{"start":{"line":792,"column":37},"end":{"line":792,"column":38}},"loc":{"start":{"line":793,"column":20},"end":{"line":793,"column":71}},"line":793},"55":{"name":"(anonymous_55)","decl":{"start":{"line":795,"column":49},"end":{"line":795,"column":50}},"loc":{"start":{"line":795,"column":55},"end":{"line":809,"column":17}},"line":795},"56":{"name":"(anonymous_56)","decl":{"start":{"line":810,"column":38},"end":{"line":810,"column":39}},"loc":{"start":{"line":810,"column":50},"end":{"line":825,"column":17}},"line":810},"57":{"name":"(anonymous_57)","decl":{"start":{"line":826,"column":37},"end":{"line":826,"column":38}},"loc":{"start":{"line":826,"column":49},"end":{"line":844,"column":17}},"line":826},"58":{"name":"(anonymous_58)","decl":{"start":{"line":845,"column":23},"end":{"line":845,"column":24}},"loc":{"start":{"line":845,"column":35},"end":{"line":847,"column":17}},"line":845},"59":{"name":"(anonymous_59)","decl":{"start":{"line":848,"column":26},"end":{"line":848,"column":27}},"loc":{"start":{"line":848,"column":38},"end":{"line":851,"column":17}},"line":848},"60":{"name":"(anonymous_60)","decl":{"start":{"line":852,"column":25},"end":{"line":852,"column":26}},"loc":{"start":{"line":852,"column":37},"end":{"line":855,"column":17}},"line":852},"61":{"name":"(anonymous_61)","decl":{"start":{"line":856,"column":22},"end":{"line":856,"column":23}},"loc":{"start":{"line":856,"column":34},"end":{"line":858,"column":17}},"line":856},"62":{"name":"(anonymous_62)","decl":{"start":{"line":859,"column":38},"end":{"line":859,"column":39}},"loc":{"start":{"line":859,"column":50},"end":{"line":874,"column":17}},"line":859},"63":{"name":"(anonymous_63)","decl":{"start":{"line":877,"column":41},"end":{"line":877,"column":42}},"loc":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"line":878},"64":{"name":"(anonymous_64)","decl":{"start":{"line":880,"column":46},"end":{"line":880,"column":47}},"loc":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"line":881},"65":{"name":"(anonymous_65)","decl":{"start":{"line":883,"column":39},"end":{"line":883,"column":40}},"loc":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"line":884},"66":{"name":"(anonymous_66)","decl":{"start":{"line":887,"column":29},"end":{"line":887,"column":30}},"loc":{"start":{"line":887,"column":44},"end":{"line":907,"column":17}},"line":887},"67":{"name":"(anonymous_67)","decl":{"start":{"line":893,"column":103},"end":{"line":893,"column":104}},"loc":{"start":{"line":894,"column":28},"end":{"line":894,"column":68}},"line":894},"68":{"name":"(anonymous_68)","decl":{"start":{"line":895,"column":99},"end":{"line":895,"column":100}},"loc":{"start":{"line":896,"column":28},"end":{"line":896,"column":64}},"line":896},"69":{"name":"(anonymous_69)","decl":{"start":{"line":897,"column":102},"end":{"line":897,"column":103}},"loc":{"start":{"line":898,"column":28},"end":{"line":898,"column":67}},"line":898},"70":{"name":"(anonymous_70)","decl":{"start":{"line":899,"column":102},"end":{"line":899,"column":103}},"loc":{"start":{"line":900,"column":28},"end":{"line":900,"column":67}},"line":900},"71":{"name":"(anonymous_71)","decl":{"start":{"line":901,"column":101},"end":{"line":901,"column":102}},"loc":{"start":{"line":902,"column":28},"end":{"line":902,"column":66}},"line":902},"72":{"name":"(anonymous_72)","decl":{"start":{"line":908,"column":21},"end":{"line":908,"column":22}},"loc":{"start":{"line":908,"column":36},"end":{"line":951,"column":17}},"line":908},"73":{"name":"(anonymous_73)","decl":{"start":{"line":952,"column":24},"end":{"line":952,"column":25}},"loc":{"start":{"line":952,"column":35},"end":{"line":954,"column":17}},"line":952},"74":{"name":"(anonymous_74)","decl":{"start":{"line":955,"column":24},"end":{"line":955,"column":25}},"loc":{"start":{"line":955,"column":37},"end":{"line":957,"column":17}},"line":955},"75":{"name":"(anonymous_75)","decl":{"start":{"line":958,"column":32},"end":{"line":958,"column":33}},"loc":{"start":{"line":958,"column":43},"end":{"line":969,"column":17}},"line":958},"76":{"name":"(anonymous_76)","decl":{"start":{"line":973,"column":33},"end":{"line":973,"column":34}},"loc":{"start":{"line":973,"column":48},"end":{"line":993,"column":17}},"line":973},"77":{"name":"(anonymous_77)","decl":{"start":{"line":996,"column":42},"end":{"line":996,"column":43}},"loc":{"start":{"line":997,"column":20},"end":{"line":997,"column":79}},"line":997},"78":{"name":"(anonymous_78)","decl":{"start":{"line":999,"column":39},"end":{"line":999,"column":40}},"loc":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"line":1000},"79":{"name":"(anonymous_79)","decl":{"start":{"line":1003,"column":38},"end":{"line":1003,"column":39}},"loc":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"line":1004},"80":{"name":"(anonymous_80)","decl":{"start":{"line":1009,"column":23},"end":{"line":1009,"column":24}},"loc":{"start":{"line":1009,"column":34},"end":{"line":1018,"column":17}},"line":1009},"81":{"name":"(anonymous_81)","decl":{"start":{"line":1013,"column":24},"end":{"line":1013,"column":25}},"loc":{"start":{"line":1013,"column":32},"end":{"line":1016,"column":25}},"line":1013},"82":{"name":"(anonymous_82)","decl":{"start":{"line":1019,"column":41},"end":{"line":1019,"column":42}},"loc":{"start":{"line":1020,"column":20},"end":{"line":1020,"column":45}},"line":1020},"83":{"name":"(anonymous_83)","decl":{"start":{"line":1021,"column":43},"end":{"line":1021,"column":44}},"loc":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"line":1022},"84":{"name":"(anonymous_84)","decl":{"start":{"line":1024,"column":43},"end":{"line":1024,"column":44}},"loc":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"line":1025},"85":{"name":"(anonymous_85)","decl":{"start":{"line":1029,"column":31},"end":{"line":1029,"column":32}},"loc":{"start":{"line":1029,"column":37},"end":{"line":1031,"column":17}},"line":1029},"86":{"name":"(anonymous_86)","decl":{"start":{"line":1033,"column":32},"end":{"line":1033,"column":33}},"loc":{"start":{"line":1033,"column":38},"end":{"line":1036,"column":21}},"line":1033},"87":{"name":"(anonymous_87)","decl":{"start":{"line":1037,"column":32},"end":{"line":1037,"column":33}},"loc":{"start":{"line":1037,"column":45},"end":{"line":1043,"column":21}},"line":1037},"88":{"name":"(anonymous_88)","decl":{"start":{"line":1044,"column":56},"end":{"line":1044,"column":57}},"loc":{"start":{"line":1045,"column":24},"end":{"line":1045,"column":74}},"line":1045},"89":{"name":"(anonymous_89)","decl":{"start":{"line":1046,"column":40},"end":{"line":1046,"column":41}},"loc":{"start":{"line":1046,"column":46},"end":{"line":1050,"column":21}},"line":1046},"90":{"name":"(anonymous_90)","decl":{"start":{"line":1051,"column":39},"end":{"line":1051,"column":40}},"loc":{"start":{"line":1051,"column":45},"end":{"line":1061,"column":21}},"line":1051},"91":{"name":"(anonymous_91)","decl":{"start":{"line":1052,"column":59},"end":{"line":1052,"column":60}},"loc":{"start":{"line":1052,"column":72},"end":{"line":1060,"column":25}},"line":1052},"92":{"name":"(anonymous_92)","decl":{"start":{"line":1062,"column":39},"end":{"line":1062,"column":40}},"loc":{"start":{"line":1062,"column":45},"end":{"line":1068,"column":21}},"line":1062},"93":{"name":"(anonymous_93)","decl":{"start":{"line":1070,"column":31},"end":{"line":1070,"column":32}},"loc":{"start":{"line":1070,"column":35},"end":{"line":1070,"column":77}},"line":1070},"94":{"name":"(anonymous_94)","decl":{"start":{"line":1071,"column":34},"end":{"line":1071,"column":35}},"loc":{"start":{"line":1071,"column":38},"end":{"line":1071,"column":81}},"line":1071},"95":{"name":"(anonymous_95)","decl":{"start":{"line":1072,"column":30},"end":{"line":1072,"column":31}},"loc":{"start":{"line":1072,"column":34},"end":{"line":1072,"column":73}},"line":1072},"96":{"name":"(anonymous_96)","decl":{"start":{"line":1073,"column":36},"end":{"line":1073,"column":37}},"loc":{"start":{"line":1073,"column":40},"end":{"line":1073,"column":87}},"line":1073},"97":{"name":"(anonymous_97)","decl":{"start":{"line":1074,"column":29},"end":{"line":1074,"column":30}},"loc":{"start":{"line":1074,"column":33},"end":{"line":1074,"column":67}},"line":1074},"98":{"name":"(anonymous_98)","decl":{"start":{"line":1078,"column":32},"end":{"line":1078,"column":33}},"loc":{"start":{"line":1078,"column":38},"end":{"line":1078,"column":90}},"line":1078},"99":{"name":"(anonymous_99)","decl":{"start":{"line":1079,"column":32},"end":{"line":1079,"column":33}},"loc":{"start":{"line":1079,"column":46},"end":{"line":1079,"column":106}},"line":1079},"100":{"name":"(anonymous_100)","decl":{"start":{"line":1080,"column":32},"end":{"line":1080,"column":33}},"loc":{"start":{"line":1080,"column":46},"end":{"line":1080,"column":106}},"line":1080},"101":{"name":"(anonymous_101)","decl":{"start":{"line":1081,"column":34},"end":{"line":1081,"column":35}},"loc":{"start":{"line":1081,"column":40},"end":{"line":1081,"column":94}},"line":1081},"102":{"name":"(anonymous_102)","decl":{"start":{"line":1082,"column":56},"end":{"line":1082,"column":57}},"loc":{"start":{"line":1082,"column":62},"end":{"line":1082,"column":88}},"line":1082},"103":{"name":"(anonymous_103)","decl":{"start":{"line":1083,"column":31},"end":{"line":1083,"column":32}},"loc":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"line":1083},"104":{"name":"(anonymous_104)","decl":{"start":{"line":1086,"column":26},"end":{"line":1086,"column":27}},"loc":{"start":{"line":1086,"column":32},"end":{"line":1086,"column":71}},"line":1086},"105":{"name":"(anonymous_105)","decl":{"start":{"line":1089,"column":33},"end":{"line":1089,"column":34}},"loc":{"start":{"line":1089,"column":64},"end":{"line":1092,"column":21}},"line":1089},"106":{"name":"(anonymous_106)","decl":{"start":{"line":1096,"column":43},"end":{"line":1096,"column":44}},"loc":{"start":{"line":1097,"column":20},"end":{"line":1097,"column":69}},"line":1097},"107":{"name":"(anonymous_107)","decl":{"start":{"line":1099,"column":42},"end":{"line":1099,"column":43}},"loc":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"line":1100},"108":{"name":"(anonymous_108)","decl":{"start":{"line":1102,"column":21},"end":{"line":1102,"column":22}},"loc":{"start":{"line":1102,"column":27},"end":{"line":1111,"column":17}},"line":1102},"109":{"name":"(anonymous_109)","decl":{"start":{"line":1112,"column":49},"end":{"line":1112,"column":50}},"loc":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"line":1113},"110":{"name":"(anonymous_110)","decl":{"start":{"line":1115,"column":28},"end":{"line":1115,"column":29}},"loc":{"start":{"line":1115,"column":34},"end":{"line":1124,"column":17}},"line":1115},"111":{"name":"(anonymous_111)","decl":{"start":{"line":1125,"column":26},"end":{"line":1125,"column":27}},"loc":{"start":{"line":1126,"column":20},"end":{"line":1126,"column":53}},"line":1126},"112":{"name":"(anonymous_112)","decl":{"start":{"line":1129,"column":25},"end":{"line":1129,"column":26}},"loc":{"start":{"line":1130,"column":20},"end":{"line":1130,"column":63}},"line":1130},"113":{"name":"(anonymous_113)","decl":{"start":{"line":1132,"column":37},"end":{"line":1132,"column":38}},"loc":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"line":1133},"114":{"name":"(anonymous_114)","decl":{"start":{"line":1136,"column":42},"end":{"line":1136,"column":43}},"loc":{"start":{"line":1137,"column":20},"end":{"line":1147,"column":75}},"line":1137},"115":{"name":"(anonymous_115)","decl":{"start":{"line":1150,"column":36},"end":{"line":1150,"column":37}},"loc":{"start":{"line":1150,"column":53},"end":{"line":1165,"column":21}},"line":1150},"116":{"name":"(anonymous_116)","decl":{"start":{"line":1158,"column":36},"end":{"line":1158,"column":37}},"loc":{"start":{"line":1158,"column":48},"end":{"line":1161,"column":25}},"line":1158},"117":{"name":"(anonymous_117)","decl":{"start":{"line":1166,"column":38},"end":{"line":1166,"column":39}},"loc":{"start":{"line":1166,"column":55},"end":{"line":1172,"column":21}},"line":1166},"118":{"name":"(anonymous_118)","decl":{"start":{"line":1177,"column":20},"end":{"line":1177,"column":21}},"loc":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"line":1178},"119":{"name":"(anonymous_119)","decl":{"start":{"line":1185,"column":4},"end":{"line":1185,"column":5}},"loc":{"start":{"line":1185,"column":18},"end":{"line":1190,"column":5}},"line":1185},"120":{"name":"(anonymous_120)","decl":{"start":{"line":1196,"column":4},"end":{"line":1196,"column":5}},"loc":{"start":{"line":1196,"column":17},"end":{"line":1198,"column":5}},"line":1196},"121":{"name":"(anonymous_121)","decl":{"start":{"line":1200,"column":4},"end":{"line":1200,"column":5}},"loc":{"start":{"line":1200,"column":20},"end":{"line":1205,"column":5}},"line":1200},"122":{"name":"(anonymous_122)","decl":{"start":{"line":1203,"column":22},"end":{"line":1203,"column":23}},"loc":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"line":1203},"123":{"name":"(anonymous_123)","decl":{"start":{"line":1207,"column":4},"end":{"line":1207,"column":5}},"loc":{"start":{"line":1207,"column":21},"end":{"line":1225,"column":5}},"line":1207},"124":{"name":"(anonymous_124)","decl":{"start":{"line":1227,"column":4},"end":{"line":1227,"column":5}},"loc":{"start":{"line":1227,"column":11},"end":{"line":1230,"column":5}},"line":1227},"125":{"name":"(anonymous_125)","decl":{"start":{"line":1232,"column":4},"end":{"line":1232,"column":5}},"loc":{"start":{"line":1232,"column":11},"end":{"line":1234,"column":5}},"line":1232},"126":{"name":"(anonymous_126)","decl":{"start":{"line":1236,"column":4},"end":{"line":1236,"column":5}},"loc":{"start":{"line":1236,"column":29},"end":{"line":1260,"column":5}},"line":1236},"127":{"name":"(anonymous_127)","decl":{"start":{"line":1237,"column":57},"end":{"line":1237,"column":58}},"loc":{"start":{"line":1237,"column":70},"end":{"line":1240,"column":9}},"line":1237},"128":{"name":"(anonymous_128)","decl":{"start":{"line":1243,"column":28},"end":{"line":1243,"column":29}},"loc":{"start":{"line":1243,"column":34},"end":{"line":1243,"column":94}},"line":1243},"129":{"name":"(anonymous_129)","decl":{"start":{"line":1248,"column":47},"end":{"line":1248,"column":48}},"loc":{"start":{"line":1248,"column":60},"end":{"line":1259,"column":9}},"line":1248},"130":{"name":"(anonymous_130)","decl":{"start":{"line":1262,"column":4},"end":{"line":1262,"column":5}},"loc":{"start":{"line":1262,"column":12},"end":{"line":1264,"column":5}},"line":1262},"131":{"name":"(anonymous_131)","decl":{"start":{"line":1266,"column":4},"end":{"line":1266,"column":5}},"loc":{"start":{"line":1266,"column":21},"end":{"line":1270,"column":5}},"line":1266},"132":{"name":"(anonymous_132)","decl":{"start":{"line":1272,"column":4},"end":{"line":1272,"column":5}},"loc":{"start":{"line":1272,"column":22},"end":{"line":1275,"column":5}},"line":1272},"133":{"name":"(anonymous_133)","decl":{"start":{"line":1277,"column":4},"end":{"line":1277,"column":5}},"loc":{"start":{"line":1277,"column":14},"end":{"line":1279,"column":5}},"line":1277}},"branchMap":{"0":{"loc":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},{"start":{},"end":{}}],"line":59},"1":{"loc":{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},{"start":{"line":89,"column":15},"end":{"line":93,"column":9}}],"line":87},"2":{"loc":{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},{"start":{"line":91,"column":15},"end":{"line":93,"column":9}}],"line":89},"3":{"loc":{"start":{"line":144,"column":44},"end":{"line":144,"column":91}},"type":"binary-expr","locations":[{"start":{"line":144,"column":44},"end":{"line":144,"column":85}},{"start":{"line":144,"column":89},"end":{"line":144,"column":91}}],"line":144},"4":{"loc":{"start":{"line":145,"column":37},"end":{"line":145,"column":77}},"type":"binary-expr","locations":[{"start":{"line":145,"column":37},"end":{"line":145,"column":71}},{"start":{"line":145,"column":75},"end":{"line":145,"column":77}}],"line":145},"5":{"loc":{"start":{"line":146,"column":40},"end":{"line":146,"column":85}},"type":"binary-expr","locations":[{"start":{"line":146,"column":40},"end":{"line":146,"column":77}},{"start":{"line":146,"column":81},"end":{"line":146,"column":85}}],"line":146},"6":{"loc":{"start":{"line":147,"column":38},"end":{"line":147,"column":81}},"type":"binary-expr","locations":[{"start":{"line":147,"column":38},"end":{"line":147,"column":73}},{"start":{"line":147,"column":77},"end":{"line":147,"column":81}}],"line":147},"7":{"loc":{"start":{"line":148,"column":57},"end":{"line":148,"column":135}},"type":"binary-expr","locations":[{"start":{"line":148,"column":57},"end":{"line":148,"column":129}},{"start":{"line":148,"column":133},"end":{"line":148,"column":135}}],"line":148},"8":{"loc":{"start":{"line":165,"column":36},"end":{"line":165,"column":118}},"type":"binary-expr","locations":[{"start":{"line":165,"column":36},"end":{"line":165,"column":112}},{"start":{"line":165,"column":116},"end":{"line":165,"column":118}}],"line":165},"9":{"loc":{"start":{"line":165,"column":48},"end":{"line":165,"column":86}},"type":"binary-expr","locations":[{"start":{"line":165,"column":48},"end":{"line":165,"column":80}},{"start":{"line":165,"column":84},"end":{"line":165,"column":86}}],"line":165},"10":{"loc":{"start":{"line":281,"column":52},"end":{"line":281,"column":90}},"type":"binary-expr","locations":[{"start":{"line":281,"column":52},"end":{"line":281,"column":84}},{"start":{"line":281,"column":88},"end":{"line":281,"column":90}}],"line":281},"11":{"loc":{"start":{"line":407,"column":22},"end":{"line":407,"column":62}},"type":"binary-expr","locations":[{"start":{"line":407,"column":22},"end":{"line":407,"column":56}},{"start":{"line":407,"column":60},"end":{"line":407,"column":62}}],"line":407},"12":{"loc":{"start":{"line":413,"column":38},"end":{"line":413,"column":67}},"type":"binary-expr","locations":[{"start":{"line":413,"column":38},"end":{"line":413,"column":61}},{"start":{"line":413,"column":65},"end":{"line":413,"column":67}}],"line":413},"13":{"loc":{"start":{"line":414,"column":43},"end":{"line":414,"column":85}},"type":"binary-expr","locations":[{"start":{"line":414,"column":43},"end":{"line":414,"column":72}},{"start":{"line":414,"column":76},"end":{"line":414,"column":85}}],"line":414},"14":{"loc":{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},"type":"if","locations":[{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},{"start":{},"end":{}}],"line":446},"15":{"loc":{"start":{"line":454,"column":35},"end":{"line":454,"column":104}},"type":"binary-expr","locations":[{"start":{"line":454,"column":35},"end":{"line":454,"column":98}},{"start":{"line":454,"column":102},"end":{"line":454,"column":104}}],"line":454},"16":{"loc":{"start":{"line":460,"column":44},"end":{"line":460,"column":99}},"type":"binary-expr","locations":[{"start":{"line":460,"column":44},"end":{"line":460,"column":69}},{"start":{"line":460,"column":73},"end":{"line":460,"column":99}}],"line":460},"17":{"loc":{"start":{"line":461,"column":47},"end":{"line":461,"column":105}},"type":"binary-expr","locations":[{"start":{"line":461,"column":47},"end":{"line":461,"column":75}},{"start":{"line":461,"column":79},"end":{"line":461,"column":105}}],"line":461},"18":{"loc":{"start":{"line":488,"column":39},"end":{"line":488,"column":67}},"type":"binary-expr","locations":[{"start":{"line":488,"column":39},"end":{"line":488,"column":59}},{"start":{"line":488,"column":63},"end":{"line":488,"column":67}}],"line":488},"19":{"loc":{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},"type":"if","locations":[{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},{"start":{},"end":{}}],"line":489},"20":{"loc":{"start":{"line":492,"column":37},"end":{"line":492,"column":63}},"type":"binary-expr","locations":[{"start":{"line":492,"column":37},"end":{"line":492,"column":55}},{"start":{"line":492,"column":59},"end":{"line":492,"column":63}}],"line":492},"21":{"loc":{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},"type":"if","locations":[{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},{"start":{},"end":{}}],"line":493},"22":{"loc":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"type":"binary-expr","locations":[{"start":{"line":520,"column":16},"end":{"line":520,"column":43}},{"start":{"line":520,"column":47},"end":{"line":520,"column":86}}],"line":520},"23":{"loc":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"type":"binary-expr","locations":[{"start":{"line":523,"column":20},"end":{"line":523,"column":49}},{"start":{"line":523,"column":53},"end":{"line":523,"column":83}}],"line":523},"24":{"loc":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"type":"cond-expr","locations":[{"start":{"line":531,"column":24},"end":{"line":531,"column":84}},{"start":{"line":532,"column":24},"end":{"line":532,"column":80}}],"line":530},"25":{"loc":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"type":"binary-expr","locations":[{"start":{"line":540,"column":24},"end":{"line":540,"column":50}},{"start":{"line":540,"column":54},"end":{"line":540,"column":98}}],"line":540},"26":{"loc":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"type":"cond-expr","locations":[{"start":{"line":543,"column":51},"end":{"line":543,"column":75}},{"start":{"line":543,"column":78},"end":{"line":543,"column":100}}],"line":543},"27":{"loc":{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},"type":"if","locations":[{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},{"start":{"line":554,"column":27},"end":{"line":556,"column":21}}],"line":552},"28":{"loc":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"type":"binary-expr","locations":[{"start":{"line":560,"column":20},"end":{"line":560,"column":45}},{"start":{"line":560,"column":49},"end":{"line":560,"column":76}},{"start":{"line":561,"column":20},"end":{"line":561,"column":56}}],"line":560},"29":{"loc":{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},{"start":{"line":566,"column":27},"end":{"line":576,"column":21}}],"line":564},"30":{"loc":{"start":{"line":565,"column":31},"end":{"line":565,"column":92}},"type":"cond-expr","locations":[{"start":{"line":565,"column":54},"end":{"line":565,"column":70}},{"start":{"line":565,"column":73},"end":{"line":565,"column":92}}],"line":565},"31":{"loc":{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},{"start":{"line":568,"column":27},"end":{"line":576,"column":21}}],"line":566},"32":{"loc":{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},{"start":{"line":570,"column":27},"end":{"line":576,"column":21}}],"line":568},"33":{"loc":{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},"type":"if","locations":[{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},{"start":{"line":573,"column":31},"end":{"line":575,"column":25}}],"line":571},"34":{"loc":{"start":{"line":571,"column":28},"end":{"line":571,"column":84}},"type":"binary-expr","locations":[{"start":{"line":571,"column":28},"end":{"line":571,"column":54}},{"start":{"line":571,"column":58},"end":{"line":571,"column":84}}],"line":571},"35":{"loc":{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},{"start":{"line":581,"column":27},"end":{"line":587,"column":21}}],"line":579},"36":{"loc":{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},{"start":{"line":583,"column":27},"end":{"line":587,"column":21}}],"line":581},"37":{"loc":{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},{"start":{"line":585,"column":27},"end":{"line":587,"column":21}}],"line":583},"38":{"loc":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"type":"binary-expr","locations":[{"start":{"line":590,"column":21},"end":{"line":590,"column":48}},{"start":{"line":590,"column":52},"end":{"line":590,"column":88}},{"start":{"line":591,"column":20},"end":{"line":591,"column":85}}],"line":590},"39":{"loc":{"start":{"line":620,"column":38},"end":{"line":620,"column":70}},"type":"cond-expr","locations":[{"start":{"line":620,"column":62},"end":{"line":620,"column":64}},{"start":{"line":620,"column":67},"end":{"line":620,"column":70}}],"line":620},"40":{"loc":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"type":"cond-expr","locations":[{"start":{"line":632,"column":24},"end":{"line":632,"column":35}},{"start":{"line":632,"column":38},"end":{"line":632,"column":48}}],"line":631},"41":{"loc":{"start":{"line":631,"column":20},"end":{"line":631,"column":90}},"type":"binary-expr","locations":[{"start":{"line":631,"column":20},"end":{"line":631,"column":46}},{"start":{"line":631,"column":50},"end":{"line":631,"column":90}}],"line":631},"42":{"loc":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"type":"binary-expr","locations":[{"start":{"line":635,"column":20},"end":{"line":635,"column":47}},{"start":{"line":635,"column":51},"end":{"line":635,"column":94}}],"line":635},"43":{"loc":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"type":"binary-expr","locations":[{"start":{"line":647,"column":20},"end":{"line":647,"column":58}},{"start":{"line":647,"column":62},"end":{"line":647,"column":97}}],"line":647},"44":{"loc":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"type":"cond-expr","locations":[{"start":{"line":651,"column":24},"end":{"line":651,"column":36}},{"start":{"line":651,"column":39},"end":{"line":651,"column":41}}],"line":650},"45":{"loc":{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},{"start":{"line":657,"column":27},"end":{"line":663,"column":21}}],"line":655},"46":{"loc":{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},{"start":{"line":659,"column":27},"end":{"line":663,"column":21}}],"line":657},"47":{"loc":{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},{"start":{"line":661,"column":27},"end":{"line":663,"column":21}}],"line":659},"48":{"loc":{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},"type":"if","locations":[{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},{"start":{},"end":{}}],"line":672},"49":{"loc":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"type":"cond-expr","locations":[{"start":{"line":682,"column":24},"end":{"line":682,"column":35}},{"start":{"line":683,"column":24},"end":{"line":683,"column":34}}],"line":680},"50":{"loc":{"start":{"line":680,"column":20},"end":{"line":681,"column":95}},"type":"binary-expr","locations":[{"start":{"line":680,"column":21},"end":{"line":680,"column":48}},{"start":{"line":680,"column":52},"end":{"line":680,"column":91}},{"start":{"line":681,"column":21},"end":{"line":681,"column":94}}],"line":680},"51":{"loc":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"type":"binary-expr","locations":[{"start":{"line":686,"column":20},"end":{"line":686,"column":60}},{"start":{"line":686,"column":64},"end":{"line":686,"column":98}},{"start":{"line":687,"column":20},"end":{"line":687,"column":69}}],"line":686},"52":{"loc":{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},"type":"if","locations":[{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},{"start":{},"end":{}}],"line":692},"53":{"loc":{"start":{"line":695,"column":20},"end":{"line":719,"column":21}},"type":"switch","locations":[{"start":{"line":696,"column":24},"end":{"line":696,"column":32}},{"start":{"line":697,"column":24},"end":{"line":698,"column":48}},{"start":{"line":699,"column":24},"end":{"line":700,"column":57}},{"start":{"line":701,"column":24},"end":{"line":702,"column":56}},{"start":{"line":703,"column":24},"end":{"line":704,"column":56}},{"start":{"line":705,"column":24},"end":{"line":706,"column":58}},{"start":{"line":707,"column":24},"end":{"line":707,"column":40}},{"start":{"line":708,"column":24},"end":{"line":709,"column":58}},{"start":{"line":710,"column":24},"end":{"line":710,"column":40}},{"start":{"line":711,"column":24},"end":{"line":712,"column":58}},{"start":{"line":713,"column":24},"end":{"line":714,"column":60}},{"start":{"line":715,"column":24},"end":{"line":716,"column":56}},{"start":{"line":717,"column":24},"end":{"line":718,"column":53}}],"line":695},"54":{"loc":{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},"type":"if","locations":[{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},{"start":{},"end":{}}],"line":722},"55":{"loc":{"start":{"line":725,"column":20},"end":{"line":749,"column":21}},"type":"switch","locations":[{"start":{"line":726,"column":24},"end":{"line":726,"column":32}},{"start":{"line":727,"column":24},"end":{"line":728,"column":38}},{"start":{"line":729,"column":24},"end":{"line":730,"column":51}},{"start":{"line":731,"column":24},"end":{"line":732,"column":50}},{"start":{"line":733,"column":24},"end":{"line":734,"column":50}},{"start":{"line":735,"column":24},"end":{"line":736,"column":52}},{"start":{"line":737,"column":24},"end":{"line":737,"column":40}},{"start":{"line":738,"column":24},"end":{"line":739,"column":53}},{"start":{"line":740,"column":24},"end":{"line":740,"column":40}},{"start":{"line":741,"column":24},"end":{"line":742,"column":50}},{"start":{"line":743,"column":24},"end":{"line":744,"column":54}},{"start":{"line":745,"column":24},"end":{"line":746,"column":46}},{"start":{"line":747,"column":24},"end":{"line":748,"column":47}}],"line":725},"56":{"loc":{"start":{"line":764,"column":31},"end":{"line":764,"column":49}},"type":"default-arg","locations":[{"start":{"line":764,"column":44},"end":{"line":764,"column":49}}],"line":764},"57":{"loc":{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},"type":"if","locations":[{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},{"start":{},"end":{}}],"line":777},"58":{"loc":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"type":"cond-expr","locations":[{"start":{"line":783,"column":47},"end":{"line":783,"column":52}},{"start":{"line":783,"column":55},"end":{"line":783,"column":60}}],"line":783},"59":{"loc":{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},"type":"if","locations":[{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},{"start":{},"end":{}}],"line":786},"60":{"loc":{"start":{"line":786,"column":24},"end":{"line":786,"column":69}},"type":"binary-expr","locations":[{"start":{"line":786,"column":24},"end":{"line":786,"column":39}},{"start":{"line":786,"column":43},"end":{"line":786,"column":69}}],"line":786},"61":{"loc":{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},"type":"if","locations":[{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},{"start":{},"end":{}}],"line":796},"62":{"loc":{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},"type":"if","locations":[{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},{"start":{"line":804,"column":27},"end":{"line":808,"column":21}}],"line":802},"63":{"loc":{"start":{"line":802,"column":24},"end":{"line":802,"column":51}},"type":"binary-expr","locations":[{"start":{"line":802,"column":24},"end":{"line":802,"column":34}},{"start":{"line":802,"column":38},"end":{"line":802,"column":51}}],"line":802},"64":{"loc":{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},"type":"if","locations":[{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},{"start":{"line":806,"column":27},"end":{"line":808,"column":21}}],"line":804},"65":{"loc":{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},"type":"if","locations":[{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},{"start":{},"end":{}}],"line":814},"66":{"loc":{"start":{"line":814,"column":24},"end":{"line":814,"column":51}},"type":"binary-expr","locations":[{"start":{"line":814,"column":24},"end":{"line":814,"column":34}},{"start":{"line":814,"column":38},"end":{"line":814,"column":51}}],"line":814},"67":{"loc":{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},"type":"if","locations":[{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},{"start":{"line":819,"column":27},"end":{"line":824,"column":21}}],"line":817},"68":{"loc":{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},"type":"if","locations":[{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},{"start":{"line":821,"column":27},"end":{"line":824,"column":21}}],"line":819},"69":{"loc":{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},"type":"if","locations":[{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},{"start":{},"end":{}}],"line":830},"70":{"loc":{"start":{"line":833,"column":20},"end":{"line":843,"column":21}},"type":"switch","locations":[{"start":{"line":834,"column":24},"end":{"line":835,"column":56}},{"start":{"line":836,"column":24},"end":{"line":840,"column":56}},{"start":{"line":841,"column":24},"end":{"line":842,"column":94}}],"line":833},"71":{"loc":{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},"type":"if","locations":[{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},{"start":{},"end":{}}],"line":837},"72":{"loc":{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},"type":"if","locations":[{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},{"start":{},"end":{}}],"line":863},"73":{"loc":{"start":{"line":866,"column":20},"end":{"line":873,"column":21}},"type":"switch","locations":[{"start":{"line":867,"column":24},"end":{"line":868,"column":38}},{"start":{"line":869,"column":24},"end":{"line":870,"column":55}},{"start":{"line":871,"column":24},"end":{"line":872,"column":51}}],"line":866},"74":{"loc":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"type":"binary-expr","locations":[{"start":{"line":878,"column":20},"end":{"line":878,"column":46}},{"start":{"line":878,"column":50},"end":{"line":878,"column":88}},{"start":{"line":878,"column":92},"end":{"line":878,"column":135}}],"line":878},"75":{"loc":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"type":"binary-expr","locations":[{"start":{"line":881,"column":20},"end":{"line":881,"column":46}},{"start":{"line":881,"column":50},"end":{"line":881,"column":88}}],"line":881},"76":{"loc":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"type":"cond-expr","locations":[{"start":{"line":885,"column":24},"end":{"line":885,"column":35}},{"start":{"line":885,"column":38},"end":{"line":885,"column":48}}],"line":884},"77":{"loc":{"start":{"line":884,"column":20},"end":{"line":884,"column":90}},"type":"binary-expr","locations":[{"start":{"line":884,"column":20},"end":{"line":884,"column":46}},{"start":{"line":884,"column":50},"end":{"line":884,"column":90}}],"line":884},"78":{"loc":{"start":{"line":888,"column":20},"end":{"line":906,"column":21}},"type":"switch","locations":[{"start":{"line":889,"column":24},"end":{"line":889,"column":73}},{"start":{"line":890,"column":24},"end":{"line":890,"column":88}},{"start":{"line":891,"column":24},"end":{"line":891,"column":90}},{"start":{"line":892,"column":24},"end":{"line":892,"column":86}},{"start":{"line":893,"column":24},"end":{"line":894,"column":70}},{"start":{"line":895,"column":24},"end":{"line":896,"column":66}},{"start":{"line":897,"column":24},"end":{"line":898,"column":69}},{"start":{"line":899,"column":24},"end":{"line":900,"column":69}},{"start":{"line":901,"column":24},"end":{"line":902,"column":68}},{"start":{"line":903,"column":24},"end":{"line":903,"column":84}},{"start":{"line":904,"column":24},"end":{"line":904,"column":111}},{"start":{"line":905,"column":24},"end":{"line":905,"column":46}}],"line":888},"79":{"loc":{"start":{"line":909,"column":20},"end":{"line":949,"column":21}},"type":"switch","locations":[{"start":{"line":910,"column":24},"end":{"line":910,"column":50}},{"start":{"line":911,"column":24},"end":{"line":911,"column":49}},{"start":{"line":912,"column":24},"end":{"line":912,"column":49}},{"start":{"line":913,"column":24},"end":{"line":913,"column":45}},{"start":{"line":914,"column":24},"end":{"line":916,"column":34}},{"start":{"line":917,"column":24},"end":{"line":919,"column":34}},{"start":{"line":920,"column":24},"end":{"line":924,"column":34}},{"start":{"line":925,"column":24},"end":{"line":928,"column":34}},{"start":{"line":929,"column":24},"end":{"line":932,"column":34}},{"start":{"line":934,"column":24},"end":{"line":937,"column":34}},{"start":{"line":938,"column":24},"end":{"line":940,"column":35}},{"start":{"line":941,"column":24},"end":{"line":943,"column":35}},{"start":{"line":944,"column":24},"end":{"line":946,"column":35}},{"start":{"line":947,"column":24},"end":{"line":947,"column":32}}],"line":909},"80":{"loc":{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},"type":"if","locations":[{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},{"start":{},"end":{}}],"line":962},"81":{"loc":{"start":{"line":962,"column":24},"end":{"line":962,"column":72}},"type":"binary-expr","locations":[{"start":{"line":962,"column":24},"end":{"line":962,"column":32}},{"start":{"line":962,"column":36},"end":{"line":962,"column":51}},{"start":{"line":962,"column":55},"end":{"line":962,"column":72}}],"line":962},"82":{"loc":{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},"type":"if","locations":[{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},{"start":{},"end":{}}],"line":965},"83":{"loc":{"start":{"line":965,"column":24},"end":{"line":965,"column":72}},"type":"binary-expr","locations":[{"start":{"line":965,"column":24},"end":{"line":965,"column":32}},{"start":{"line":965,"column":36},"end":{"line":965,"column":51}},{"start":{"line":965,"column":55},"end":{"line":965,"column":72}}],"line":965},"84":{"loc":{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},"type":"if","locations":[{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},{"start":{},"end":{}}],"line":974},"85":{"loc":{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},"type":"if","locations":[{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},{"start":{},"end":{}}],"line":977},"86":{"loc":{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},"type":"if","locations":[{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},{"start":{},"end":{}}],"line":980},"87":{"loc":{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},"type":"if","locations":[{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},{"start":{},"end":{}}],"line":983},"88":{"loc":{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},"type":"if","locations":[{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},{"start":{},"end":{}}],"line":986},"89":{"loc":{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},"type":"if","locations":[{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},{"start":{},"end":{}}],"line":989},"90":{"loc":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"type":"cond-expr","locations":[{"start":{"line":1001,"column":24},"end":{"line":1001,"column":35}},{"start":{"line":1001,"column":38},"end":{"line":1001,"column":48}}],"line":1000},"91":{"loc":{"start":{"line":1000,"column":20},"end":{"line":1000,"column":90}},"type":"binary-expr","locations":[{"start":{"line":1000,"column":20},"end":{"line":1000,"column":46}},{"start":{"line":1000,"column":50},"end":{"line":1000,"column":90}}],"line":1000},"92":{"loc":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"type":"cond-expr","locations":[{"start":{"line":1006,"column":72},"end":{"line":1006,"column":78}},{"start":{"line":1007,"column":20},"end":{"line":1007,"column":82}}],"line":1004},"93":{"loc":{"start":{"line":1004,"column":21},"end":{"line":1006,"column":68}},"type":"binary-expr","locations":[{"start":{"line":1004,"column":21},"end":{"line":1004,"column":48}},{"start":{"line":1005,"column":24},"end":{"line":1005,"column":63}},{"start":{"line":1006,"column":24},"end":{"line":1006,"column":67}}],"line":1004},"94":{"loc":{"start":{"line":1007,"column":20},"end":{"line":1007,"column":82}},"type":"cond-expr","locations":[{"start":{"line":1007,"column":47},"end":{"line":1007,"column":73}},{"start":{"line":1007,"column":76},"end":{"line":1007,"column":82}}],"line":1007},"95":{"loc":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"type":"binary-expr","locations":[{"start":{"line":1022,"column":21},"end":{"line":1022,"column":59}},{"start":{"line":1022,"column":63},"end":{"line":1022,"column":89}},{"start":{"line":1023,"column":20},"end":{"line":1023,"column":78}}],"line":1022},"96":{"loc":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"type":"binary-expr","locations":[{"start":{"line":1025,"column":21},"end":{"line":1025,"column":59}},{"start":{"line":1025,"column":63},"end":{"line":1025,"column":89}},{"start":{"line":1026,"column":20},"end":{"line":1026,"column":78}}],"line":1025},"97":{"loc":{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},"type":"if","locations":[{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},{"start":{},"end":{}}],"line":1040},"98":{"loc":{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},"type":"if","locations":[{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},{"start":{"line":1057,"column":35},"end":{"line":1059,"column":29}}],"line":1053},"99":{"loc":{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},"type":"if","locations":[{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},{"start":{"line":1065,"column":31},"end":{"line":1067,"column":25}}],"line":1063},"100":{"loc":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"type":"binary-expr","locations":[{"start":{"line":1083,"column":46},"end":{"line":1083,"column":72}},{"start":{"line":1083,"column":76},"end":{"line":1083,"column":102}},{"start":{"line":1083,"column":106},"end":{"line":1083,"column":126}}],"line":1083},"101":{"loc":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"type":"cond-expr","locations":[{"start":{"line":1100,"column":72},"end":{"line":1100,"column":78}},{"start":{"line":1100,"column":81},"end":{"line":1100,"column":86}}],"line":1100},"102":{"loc":{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},"type":"if","locations":[{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},{"start":{"line":1108,"column":27},"end":{"line":1110,"column":21}}],"line":1103},"103":{"loc":{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},"type":"if","locations":[{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},{"start":{},"end":{}}],"line":1104},"104":{"loc":{"start":{"line":1104,"column":28},"end":{"line":1104,"column":81}},"type":"binary-expr","locations":[{"start":{"line":1104,"column":28},"end":{"line":1104,"column":60}},{"start":{"line":1104,"column":64},"end":{"line":1104,"column":81}}],"line":1104},"105":{"loc":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"type":"cond-expr","locations":[{"start":{"line":1113,"column":72},"end":{"line":1113,"column":78}},{"start":{"line":1113,"column":81},"end":{"line":1113,"column":103}}],"line":1113},"106":{"loc":{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},"type":"if","locations":[{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},{"start":{"line":1121,"column":27},"end":{"line":1123,"column":21}}],"line":1116},"107":{"loc":{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},"type":"if","locations":[{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},{"start":{},"end":{}}],"line":1117},"108":{"loc":{"start":{"line":1117,"column":28},"end":{"line":1117,"column":81}},"type":"binary-expr","locations":[{"start":{"line":1117,"column":28},"end":{"line":1117,"column":60}},{"start":{"line":1117,"column":64},"end":{"line":1117,"column":81}}],"line":1117},"109":{"loc":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"type":"binary-expr","locations":[{"start":{"line":1133,"column":20},"end":{"line":1133,"column":57}},{"start":{"line":1134,"column":20},"end":{"line":1134,"column":58}},{"start":{"line":1135,"column":20},"end":{"line":1135,"column":68}}],"line":1133},"110":{"loc":{"start":{"line":1137,"column":31},"end":{"line":1147,"column":74}},"type":"binary-expr","locations":[{"start":{"line":1137,"column":31},"end":{"line":1137,"column":67}},{"start":{"line":1138,"column":24},"end":{"line":1138,"column":60}},{"start":{"line":1139,"column":24},"end":{"line":1139,"column":57}},{"start":{"line":1140,"column":24},"end":{"line":1140,"column":54}},{"start":{"line":1141,"column":24},"end":{"line":1141,"column":54}},{"start":{"line":1142,"column":24},"end":{"line":1142,"column":57}},{"start":{"line":1143,"column":24},"end":{"line":1143,"column":54}},{"start":{"line":1144,"column":24},"end":{"line":1144,"column":48}},{"start":{"line":1145,"column":24},"end":{"line":1145,"column":62}},{"start":{"line":1146,"column":24},"end":{"line":1146,"column":50}},{"start":{"line":1147,"column":24},"end":{"line":1147,"column":68}},{"start":{"line":1147,"column":72},"end":{"line":1147,"column":74}}],"line":1137},"111":{"loc":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"type":"binary-expr","locations":[{"start":{"line":1178,"column":24},"end":{"line":1178,"column":50}},{"start":{"line":1178,"column":54},"end":{"line":1178,"column":77}}],"line":1178},"112":{"loc":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"type":"cond-expr","locations":[{"start":{"line":1203,"column":39},"end":{"line":1203,"column":71}},{"start":{"line":1203,"column":74},"end":{"line":1203,"column":83}}],"line":1203},"113":{"loc":{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},"type":"if","locations":[{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},{"start":{},"end":{}}],"line":1244},"114":{"loc":{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},"type":"if","locations":[{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},{"start":{"line":1254,"column":19},"end":{"line":1258,"column":13}}],"line":1249},"115":{"loc":{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},"type":"if","locations":[{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},{"start":{},"end":{}}],"line":1250},"116":{"loc":{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},"type":"if","locations":[{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},{"start":{},"end":{}}],"line":1255}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0,0],"51":[0,0,0],"52":[0,0],"53":[0,0,0,0,0,0,0,0,0,0,0,0,0],"54":[0,0],"55":[0,0,0,0,0,0,0,0,0,0,0,0,0],"56":[0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0,0],"71":[0,0],"72":[0,0],"73":[0,0,0],"74":[0,0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0,0,0,0,0,0,0,0,0,0,0],"79":[0,0,0,0,0,0,0,0,0,0,0,0,0,0],"80":[0,0],"81":[0,0,0],"82":[0,0],"83":[0,0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0,0],"94":[0,0],"95":[0,0,0],"96":[0,0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0,0],"110":[0,0,0,0,0,0,0,0,0,0,0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4b2dcefbc4cc4bde8c17749519d2bb0e3d382bd8"} +,"/home/runner/work/blockpy/blockpy/src/console.js": {"path":"/home/runner/work/blockpy/blockpy/src/console.js","statementMap":{"0":{"start":{"line":7,"column":24},"end":{"line":10,"column":10}},"1":{"start":{"line":16,"column":30},"end":{"line":16,"column":43}},"2":{"start":{"line":22,"column":28},"end":{"line":39,"column":12}},"3":{"start":{"line":45,"column":29},"end":{"line":58,"column":1}},"4":{"start":{"line":71,"column":8},"end":{"line":71,"column":25}},"5":{"start":{"line":76,"column":8},"end":{"line":76,"column":25}},"6":{"start":{"line":81,"column":8},"end":{"line":81,"column":31}},"7":{"start":{"line":86,"column":8},"end":{"line":90,"column":10}},"8":{"start":{"line":96,"column":8},"end":{"line":103,"column":11}},"9":{"start":{"line":108,"column":8},"end":{"line":108,"column":57}},"10":{"start":{"line":113,"column":8},"end":{"line":113,"column":23}},"11":{"start":{"line":121,"column":8},"end":{"line":121,"column":46}},"12":{"start":{"line":128,"column":8},"end":{"line":128,"column":27}},"13":{"start":{"line":135,"column":8},"end":{"line":135,"column":44}},"14":{"start":{"line":136,"column":8},"end":{"line":136,"column":60}},"15":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"16":{"start":{"line":141,"column":12},"end":{"line":141,"column":37}},"17":{"start":{"line":143,"column":22},"end":{"line":143,"column":44}},"18":{"start":{"line":145,"column":12},"end":{"line":145,"column":37}},"19":{"start":{"line":153,"column":8},"end":{"line":153,"column":45}},"20":{"start":{"line":154,"column":8},"end":{"line":154,"column":61}},"21":{"start":{"line":155,"column":8},"end":{"line":155,"column":25}},"22":{"start":{"line":156,"column":8},"end":{"line":156,"column":37}},"23":{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},"24":{"start":{"line":161,"column":12},"end":{"line":161,"column":37}},"25":{"start":{"line":162,"column":22},"end":{"line":162,"column":44}},"26":{"start":{"line":163,"column":12},"end":{"line":163,"column":37}},"27":{"start":{"line":172,"column":8},"end":{"line":172,"column":52}},"28":{"start":{"line":178,"column":8},"end":{"line":178,"column":44}},"29":{"start":{"line":179,"column":8},"end":{"line":179,"column":60}},"30":{"start":{"line":180,"column":8},"end":{"line":180,"column":25}},"31":{"start":{"line":181,"column":8},"end":{"line":181,"column":37}},"32":{"start":{"line":182,"column":8},"end":{"line":182,"column":35}},"33":{"start":{"line":183,"column":8},"end":{"line":183,"column":33}},"34":{"start":{"line":184,"column":8},"end":{"line":184,"column":55}},"35":{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},"36":{"start":{"line":190,"column":12},"end":{"line":190,"column":42}},"37":{"start":{"line":191,"column":12},"end":{"line":191,"column":37}},"38":{"start":{"line":192,"column":22},"end":{"line":192,"column":44}},"39":{"start":{"line":193,"column":12},"end":{"line":193,"column":37}},"40":{"start":{"line":202,"column":8},"end":{"line":202,"column":32}},"41":{"start":{"line":203,"column":8},"end":{"line":203,"column":52}},"42":{"start":{"line":207,"column":8},"end":{"line":207,"column":32}},"43":{"start":{"line":208,"column":8},"end":{"line":208,"column":72}},"44":{"start":{"line":208,"column":29},"end":{"line":208,"column":71}},"45":{"start":{"line":215,"column":8},"end":{"line":215,"column":52}},"46":{"start":{"line":216,"column":8},"end":{"line":216,"column":59}},"47":{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},"48":{"start":{"line":221,"column":12},"end":{"line":221,"column":38}},"49":{"start":{"line":222,"column":12},"end":{"line":222,"column":43}},"50":{"start":{"line":223,"column":12},"end":{"line":223,"column":36}},"51":{"start":{"line":231,"column":8},"end":{"line":231,"column":51}},"52":{"start":{"line":232,"column":8},"end":{"line":232,"column":58}},"53":{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},"54":{"start":{"line":237,"column":12},"end":{"line":237,"column":36}},"55":{"start":{"line":246,"column":8},"end":{"line":246,"column":46}},"56":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"57":{"start":{"line":251,"column":30},"end":{"line":251,"column":54}},"58":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"59":{"start":{"line":253,"column":16},"end":{"line":253,"column":35}},"60":{"start":{"line":255,"column":27},"end":{"line":255,"column":70}},"61":{"start":{"line":256,"column":12},"end":{"line":256,"column":39}},"62":{"start":{"line":257,"column":12},"end":{"line":257,"column":36}},"63":{"start":{"line":258,"column":12},"end":{"line":258,"column":32}},"64":{"start":{"line":266,"column":8},"end":{"line":266,"column":52}},"65":{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},"66":{"start":{"line":271,"column":30},"end":{"line":271,"column":54}},"67":{"start":{"line":272,"column":27},"end":{"line":272,"column":70}},"68":{"start":{"line":273,"column":12},"end":{"line":273,"column":39}},"69":{"start":{"line":274,"column":12},"end":{"line":274,"column":36}},"70":{"start":{"line":275,"column":12},"end":{"line":275,"column":32}},"71":{"start":{"line":282,"column":8},"end":{"line":282,"column":58}},"72":{"start":{"line":283,"column":8},"end":{"line":283,"column":28}},"73":{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},"74":{"start":{"line":294,"column":28},"end":{"line":294,"column":54}},"75":{"start":{"line":296,"column":27},"end":{"line":296,"column":68}},"76":{"start":{"line":298,"column":29},"end":{"line":298,"column":81}},"77":{"start":{"line":299,"column":12},"end":{"line":299,"column":41}},"78":{"start":{"line":300,"column":12},"end":{"line":300,"column":40}},"79":{"start":{"line":302,"column":27},"end":{"line":302,"column":43}},"80":{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},"81":{"start":{"line":304,"column":34},"end":{"line":304,"column":58}},"82":{"start":{"line":305,"column":31},"end":{"line":305,"column":73}},"83":{"start":{"line":306,"column":16},"end":{"line":306,"column":42}},"84":{"start":{"line":308,"column":12},"end":{"line":309,"column":36}},"85":{"start":{"line":311,"column":12},"end":{"line":311,"column":39}},"86":{"start":{"line":312,"column":12},"end":{"line":312,"column":36}},"87":{"start":{"line":314,"column":12},"end":{"line":314,"column":61}},"88":{"start":{"line":316,"column":8},"end":{"line":316,"column":18}},"89":{"start":{"line":321,"column":31},"end":{"line":323,"column":10}},"90":{"start":{"line":322,"column":12},"end":{"line":322,"column":37}},"91":{"start":{"line":324,"column":25},"end":{"line":324,"column":63}},"92":{"start":{"line":325,"column":25},"end":{"line":334,"column":9}},"93":{"start":{"line":326,"column":36},"end":{"line":326,"column":47}},"94":{"start":{"line":327,"column":12},"end":{"line":327,"column":51}},"95":{"start":{"line":328,"column":12},"end":{"line":328,"column":63}},"96":{"start":{"line":329,"column":12},"end":{"line":329,"column":70}},"97":{"start":{"line":330,"column":12},"end":{"line":330,"column":46}},"98":{"start":{"line":331,"column":12},"end":{"line":331,"column":41}},"99":{"start":{"line":332,"column":12},"end":{"line":332,"column":42}},"100":{"start":{"line":333,"column":12},"end":{"line":333,"column":32}},"101":{"start":{"line":335,"column":8},"end":{"line":335,"column":33}},"102":{"start":{"line":336,"column":8},"end":{"line":340,"column":11}},"103":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"104":{"start":{"line":338,"column":16},"end":{"line":338,"column":29}},"105":{"start":{"line":341,"column":8},"end":{"line":341,"column":22}},"106":{"start":{"line":342,"column":8},"end":{"line":342,"column":74}},"107":{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},"108":{"start":{"line":344,"column":36},"end":{"line":344,"column":81}},"109":{"start":{"line":345,"column":12},"end":{"line":345,"column":41}},"110":{"start":{"line":346,"column":12},"end":{"line":346,"column":63}},"111":{"start":{"line":347,"column":12},"end":{"line":352,"column":15}},"112":{"start":{"line":348,"column":16},"end":{"line":348,"column":45}},"113":{"start":{"line":349,"column":16},"end":{"line":349,"column":46}},"114":{"start":{"line":350,"column":16},"end":{"line":350,"column":36}},"115":{"start":{"line":351,"column":16},"end":{"line":351,"column":43}},"116":{"start":{"line":354,"column":8},"end":{"line":354,"column":32}},"117":{"start":{"line":360,"column":8},"end":{"line":360,"column":33}},"118":{"start":{"line":366,"column":8},"end":{"line":366,"column":48}},"119":{"start":{"line":367,"column":8},"end":{"line":367,"column":45}},"120":{"start":{"line":368,"column":8},"end":{"line":371,"column":11}},"121":{"start":{"line":369,"column":12},"end":{"line":369,"column":50}},"122":{"start":{"line":370,"column":12},"end":{"line":370,"column":26}},"123":{"start":{"line":375,"column":8},"end":{"line":375,"column":32}},"124":{"start":{"line":390,"column":8},"end":{"line":390,"column":25}},"125":{"start":{"line":391,"column":8},"end":{"line":391,"column":23}},"126":{"start":{"line":392,"column":8},"end":{"line":392,"column":55}},"127":{"start":{"line":394,"column":8},"end":{"line":394,"column":33}},"128":{"start":{"line":395,"column":8},"end":{"line":395,"column":34}},"129":{"start":{"line":396,"column":8},"end":{"line":396,"column":55}},"130":{"start":{"line":397,"column":8},"end":{"line":397,"column":75}},"131":{"start":{"line":399,"column":8},"end":{"line":399,"column":55}},"132":{"start":{"line":401,"column":8},"end":{"line":401,"column":27}},"133":{"start":{"line":402,"column":8},"end":{"line":402,"column":21}},"134":{"start":{"line":412,"column":8},"end":{"line":412,"column":32}},"135":{"start":{"line":414,"column":8},"end":{"line":414,"column":31}},"136":{"start":{"line":415,"column":8},"end":{"line":415,"column":31}},"137":{"start":{"line":416,"column":8},"end":{"line":416,"column":32}},"138":{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},"139":{"start":{"line":419,"column":12},"end":{"line":419,"column":56}},"140":{"start":{"line":420,"column":12},"end":{"line":420,"column":84}},"141":{"start":{"line":423,"column":8},"end":{"line":423,"column":31}},"142":{"start":{"line":424,"column":8},"end":{"line":429,"column":10}},"143":{"start":{"line":431,"column":8},"end":{"line":431,"column":31}},"144":{"start":{"line":432,"column":8},"end":{"line":432,"column":32}},"145":{"start":{"line":436,"column":8},"end":{"line":436,"column":20}},"146":{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},"147":{"start":{"line":441,"column":12},"end":{"line":441,"column":63}},"148":{"start":{"line":442,"column":12},"end":{"line":442,"column":52}},"149":{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},"150":{"start":{"line":445,"column":46},"end":{"line":445,"column":69}},"151":{"start":{"line":446,"column":16},"end":{"line":446,"column":64}},"152":{"start":{"line":447,"column":16},"end":{"line":447,"column":88}},"153":{"start":{"line":448,"column":16},"end":{"line":448,"column":70}},"154":{"start":{"line":451,"column":8},"end":{"line":451,"column":39}},"155":{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},"156":{"start":{"line":458,"column":12},"end":{"line":458,"column":49}},"157":{"start":{"line":459,"column":12},"end":{"line":459,"column":84}},"158":{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},"159":{"start":{"line":463,"column":12},"end":{"line":463,"column":52}},"160":{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},"161":{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},"162":{"start":{"line":470,"column":29},"end":{"line":470,"column":74}},"163":{"start":{"line":471,"column":30},"end":{"line":471,"column":59}},"164":{"start":{"line":472,"column":16},"end":{"line":472,"column":80}},"165":{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},"166":{"start":{"line":474,"column":29},"end":{"line":474,"column":51}},"167":{"start":{"line":475,"column":30},"end":{"line":475,"column":59}},"168":{"start":{"line":476,"column":16},"end":{"line":476,"column":80}},"169":{"start":{"line":485,"column":8},"end":{"line":485,"column":20}},"170":{"start":{"line":489,"column":8},"end":{"line":489,"column":72}},"171":{"start":{"line":493,"column":8},"end":{"line":493,"column":74}},"172":{"start":{"line":497,"column":8},"end":{"line":497,"column":53}},"173":{"start":{"line":508,"column":8},"end":{"line":514,"column":11}},"174":{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},"175":{"start":{"line":510,"column":16},"end":{"line":510,"column":31}},"176":{"start":{"line":512,"column":16},"end":{"line":512,"column":31}},"177":{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},"178":{"start":{"line":525,"column":12},"end":{"line":525,"column":19}},"179":{"start":{"line":527,"column":20},"end":{"line":527,"column":25}},"180":{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},"181":{"start":{"line":529,"column":12},"end":{"line":529,"column":25}},"182":{"start":{"line":531,"column":25},"end":{"line":531,"column":45}},"183":{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},"184":{"start":{"line":533,"column":12},"end":{"line":533,"column":98}},"185":{"start":{"line":535,"column":12},"end":{"line":535,"column":54}},"186":{"start":{"line":537,"column":8},"end":{"line":541,"column":9}},"187":{"start":{"line":537,"column":19},"end":{"line":537,"column":20}},"188":{"start":{"line":538,"column":12},"end":{"line":538,"column":46}},"189":{"start":{"line":539,"column":12},"end":{"line":539,"column":52}},"190":{"start":{"line":540,"column":12},"end":{"line":540,"column":98}},"191":{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},"192":{"start":{"line":543,"column":12},"end":{"line":543,"column":46}},"193":{"start":{"line":544,"column":12},"end":{"line":544,"column":52}},"194":{"start":{"line":545,"column":12},"end":{"line":545,"column":35}},"195":{"start":{"line":551,"column":8},"end":{"line":551,"column":64}},"196":{"start":{"line":552,"column":8},"end":{"line":552,"column":48}},"197":{"start":{"line":553,"column":8},"end":{"line":553,"column":31}},"198":{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},"199":{"start":{"line":558,"column":12},"end":{"line":558,"column":92}},"200":{"start":{"line":559,"column":12},"end":{"line":559,"column":52}},"201":{"start":{"line":561,"column":8},"end":{"line":561,"column":31}},"202":{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},"203":{"start":{"line":566,"column":12},"end":{"line":566,"column":83}},"204":{"start":{"line":567,"column":12},"end":{"line":567,"column":53}},"205":{"start":{"line":569,"column":8},"end":{"line":569,"column":32}},"206":{"start":{"line":573,"column":8},"end":{"line":573,"column":45}},"207":{"start":{"line":574,"column":8},"end":{"line":574,"column":76}},"208":{"start":{"line":575,"column":8},"end":{"line":575,"column":49}},"209":{"start":{"line":576,"column":8},"end":{"line":576,"column":32}},"210":{"start":{"line":580,"column":27},"end":{"line":580,"column":65}},"211":{"start":{"line":581,"column":8},"end":{"line":581,"column":45}},"212":{"start":{"line":582,"column":8},"end":{"line":582,"column":28}},"213":{"start":{"line":591,"column":8},"end":{"line":591,"column":74}},"214":{"start":{"line":592,"column":8},"end":{"line":592,"column":56}},"215":{"start":{"line":597,"column":8},"end":{"line":597,"column":62}},"216":{"start":{"line":598,"column":8},"end":{"line":598,"column":56}},"217":{"start":{"line":602,"column":30},"end":{"line":602,"column":69}},"218":{"start":{"line":603,"column":8},"end":{"line":603,"column":55}},"219":{"start":{"line":611,"column":8},"end":{"line":613,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":37},"end":{"line":114,"column":5}},"line":65},"1":{"name":"(anonymous_1)","decl":{"start":{"line":120,"column":4},"end":{"line":120,"column":5}},"loc":{"start":{"line":120,"column":15},"end":{"line":122,"column":5}},"line":120},"2":{"name":"(anonymous_2)","decl":{"start":{"line":127,"column":4},"end":{"line":127,"column":5}},"loc":{"start":{"line":127,"column":13},"end":{"line":129,"column":5}},"line":127},"3":{"name":"(anonymous_3)","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":5}},"loc":{"start":{"line":134,"column":22},"end":{"line":137,"column":5}},"line":134},"4":{"name":"(anonymous_4)","decl":{"start":{"line":139,"column":4},"end":{"line":139,"column":5}},"loc":{"start":{"line":139,"column":18},"end":{"line":148,"column":5}},"line":139},"5":{"name":"(anonymous_5)","decl":{"start":{"line":152,"column":4},"end":{"line":152,"column":5}},"loc":{"start":{"line":152,"column":40},"end":{"line":157,"column":5}},"line":152},"6":{"name":"(anonymous_6)","decl":{"start":{"line":159,"column":4},"end":{"line":159,"column":5}},"loc":{"start":{"line":159,"column":18},"end":{"line":165,"column":5}},"line":159},"7":{"name":"(anonymous_7)","decl":{"start":{"line":167,"column":4},"end":{"line":167,"column":5}},"loc":{"start":{"line":167,"column":14},"end":{"line":169,"column":5}},"line":167},"8":{"name":"(anonymous_8)","decl":{"start":{"line":171,"column":4},"end":{"line":171,"column":5}},"loc":{"start":{"line":171,"column":11},"end":{"line":173,"column":5}},"line":171},"9":{"name":"(anonymous_9)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":51},"end":{"line":186,"column":5}},"line":177},"10":{"name":"(anonymous_10)","decl":{"start":{"line":188,"column":4},"end":{"line":188,"column":5}},"loc":{"start":{"line":188,"column":18},"end":{"line":195,"column":5}},"line":188},"11":{"name":"(anonymous_11)","decl":{"start":{"line":197,"column":4},"end":{"line":197,"column":5}},"loc":{"start":{"line":197,"column":14},"end":{"line":199,"column":5}},"line":197},"12":{"name":"(anonymous_12)","decl":{"start":{"line":201,"column":4},"end":{"line":201,"column":5}},"loc":{"start":{"line":201,"column":11},"end":{"line":204,"column":5}},"line":201},"13":{"name":"(anonymous_13)","decl":{"start":{"line":202,"column":23},"end":{"line":202,"column":24}},"loc":{"start":{"line":202,"column":29},"end":{"line":202,"column":31}},"line":202},"14":{"name":"(anonymous_14)","decl":{"start":{"line":206,"column":4},"end":{"line":206,"column":5}},"loc":{"start":{"line":206,"column":41},"end":{"line":209,"column":5}},"line":206},"15":{"name":"(anonymous_15)","decl":{"start":{"line":208,"column":23},"end":{"line":208,"column":24}},"loc":{"start":{"line":208,"column":29},"end":{"line":208,"column":71}},"line":208},"16":{"name":"(anonymous_16)","decl":{"start":{"line":214,"column":4},"end":{"line":214,"column":5}},"loc":{"start":{"line":214,"column":31},"end":{"line":217,"column":5}},"line":214},"17":{"name":"(anonymous_17)","decl":{"start":{"line":219,"column":4},"end":{"line":219,"column":5}},"loc":{"start":{"line":219,"column":18},"end":{"line":226,"column":5}},"line":219},"18":{"name":"(anonymous_18)","decl":{"start":{"line":230,"column":4},"end":{"line":230,"column":5}},"loc":{"start":{"line":230,"column":31},"end":{"line":233,"column":5}},"line":230},"19":{"name":"(anonymous_19)","decl":{"start":{"line":235,"column":4},"end":{"line":235,"column":5}},"loc":{"start":{"line":235,"column":18},"end":{"line":240,"column":5}},"line":235},"20":{"name":"(anonymous_20)","decl":{"start":{"line":245,"column":4},"end":{"line":245,"column":5}},"loc":{"start":{"line":245,"column":24},"end":{"line":247,"column":5}},"line":245},"21":{"name":"(anonymous_21)","decl":{"start":{"line":249,"column":4},"end":{"line":249,"column":5}},"loc":{"start":{"line":249,"column":18},"end":{"line":260,"column":5}},"line":249},"22":{"name":"(anonymous_22)","decl":{"start":{"line":265,"column":4},"end":{"line":265,"column":5}},"loc":{"start":{"line":265,"column":31},"end":{"line":267,"column":5}},"line":265},"23":{"name":"(anonymous_23)","decl":{"start":{"line":269,"column":4},"end":{"line":269,"column":5}},"loc":{"start":{"line":269,"column":18},"end":{"line":277,"column":5}},"line":269},"24":{"name":"(anonymous_24)","decl":{"start":{"line":281,"column":4},"end":{"line":281,"column":5}},"loc":{"start":{"line":281,"column":37},"end":{"line":284,"column":5}},"line":281},"25":{"name":"(anonymous_25)","decl":{"start":{"line":290,"column":4},"end":{"line":290,"column":5}},"loc":{"start":{"line":290,"column":18},"end":{"line":317,"column":5}},"line":290},"26":{"name":"(anonymous_26)","decl":{"start":{"line":319,"column":4},"end":{"line":319,"column":5}},"loc":{"start":{"line":319,"column":35},"end":{"line":355,"column":5}},"line":319},"27":{"name":"(anonymous_27)","decl":{"start":{"line":321,"column":43},"end":{"line":321,"column":44}},"loc":{"start":{"line":321,"column":56},"end":{"line":323,"column":9}},"line":321},"28":{"name":"(anonymous_28)","decl":{"start":{"line":325,"column":25},"end":{"line":325,"column":26}},"loc":{"start":{"line":325,"column":31},"end":{"line":334,"column":9}},"line":325},"29":{"name":"(anonymous_29)","decl":{"start":{"line":336,"column":20},"end":{"line":336,"column":21}},"loc":{"start":{"line":336,"column":27},"end":{"line":340,"column":9}},"line":336},"30":{"name":"(anonymous_30)","decl":{"start":{"line":347,"column":31},"end":{"line":347,"column":32}},"loc":{"start":{"line":347,"column":44},"end":{"line":352,"column":13}},"line":347},"31":{"name":"(anonymous_31)","decl":{"start":{"line":359,"column":4},"end":{"line":359,"column":5}},"loc":{"start":{"line":359,"column":22},"end":{"line":361,"column":5}},"line":359},"32":{"name":"(anonymous_32)","decl":{"start":{"line":365,"column":4},"end":{"line":365,"column":5}},"loc":{"start":{"line":365,"column":22},"end":{"line":372,"column":5}},"line":365},"33":{"name":"(anonymous_33)","decl":{"start":{"line":368,"column":24},"end":{"line":368,"column":25}},"loc":{"start":{"line":368,"column":30},"end":{"line":371,"column":9}},"line":368},"34":{"name":"(anonymous_34)","decl":{"start":{"line":374,"column":4},"end":{"line":374,"column":5}},"loc":{"start":{"line":374,"column":18},"end":{"line":376,"column":5}},"line":374},"35":{"name":"(anonymous_35)","decl":{"start":{"line":389,"column":4},"end":{"line":389,"column":5}},"loc":{"start":{"line":389,"column":28},"end":{"line":405,"column":5}},"line":389},"36":{"name":"(anonymous_36)","decl":{"start":{"line":411,"column":4},"end":{"line":411,"column":5}},"loc":{"start":{"line":411,"column":12},"end":{"line":433,"column":5}},"line":411},"37":{"name":"(anonymous_37)","decl":{"start":{"line":435,"column":4},"end":{"line":435,"column":5}},"loc":{"start":{"line":435,"column":20},"end":{"line":437,"column":5}},"line":435},"38":{"name":"(anonymous_38)","decl":{"start":{"line":439,"column":4},"end":{"line":439,"column":5}},"loc":{"start":{"line":439,"column":20},"end":{"line":452,"column":5}},"line":439},"39":{"name":"(anonymous_39)","decl":{"start":{"line":454,"column":4},"end":{"line":454,"column":5}},"loc":{"start":{"line":454,"column":44},"end":{"line":465,"column":5}},"line":454},"40":{"name":"(anonymous_40)","decl":{"start":{"line":467,"column":4},"end":{"line":467,"column":5}},"loc":{"start":{"line":467,"column":20},"end":{"line":481,"column":5}},"line":467},"41":{"name":"(anonymous_41)","decl":{"start":{"line":484,"column":4},"end":{"line":484,"column":5}},"loc":{"start":{"line":484,"column":16},"end":{"line":486,"column":5}},"line":484},"42":{"name":"(anonymous_42)","decl":{"start":{"line":488,"column":4},"end":{"line":488,"column":5}},"loc":{"start":{"line":488,"column":15},"end":{"line":490,"column":5}},"line":488},"43":{"name":"(anonymous_43)","decl":{"start":{"line":492,"column":4},"end":{"line":492,"column":5}},"loc":{"start":{"line":492,"column":16},"end":{"line":494,"column":5}},"line":492},"44":{"name":"(anonymous_44)","decl":{"start":{"line":496,"column":4},"end":{"line":496,"column":5}},"loc":{"start":{"line":496,"column":14},"end":{"line":498,"column":5}},"line":496},"45":{"name":"(anonymous_45)","decl":{"start":{"line":507,"column":4},"end":{"line":507,"column":5}},"loc":{"start":{"line":507,"column":28},"end":{"line":515,"column":5}},"line":507},"46":{"name":"(anonymous_46)","decl":{"start":{"line":508,"column":61},"end":{"line":508,"column":62}},"loc":{"start":{"line":508,"column":72},"end":{"line":514,"column":9}},"line":508},"47":{"name":"(anonymous_47)","decl":{"start":{"line":521,"column":4},"end":{"line":521,"column":5}},"loc":{"start":{"line":521,"column":20},"end":{"line":547,"column":5}},"line":521},"48":{"name":"(anonymous_48)","decl":{"start":{"line":550,"column":4},"end":{"line":550,"column":5}},"loc":{"start":{"line":550,"column":16},"end":{"line":554,"column":5}},"line":550},"49":{"name":"(anonymous_49)","decl":{"start":{"line":556,"column":4},"end":{"line":556,"column":5}},"loc":{"start":{"line":556,"column":40},"end":{"line":562,"column":5}},"line":556},"50":{"name":"(anonymous_50)","decl":{"start":{"line":564,"column":4},"end":{"line":564,"column":5}},"loc":{"start":{"line":564,"column":30},"end":{"line":570,"column":5}},"line":564},"51":{"name":"(anonymous_51)","decl":{"start":{"line":572,"column":4},"end":{"line":572,"column":5}},"loc":{"start":{"line":572,"column":29},"end":{"line":577,"column":5}},"line":572},"52":{"name":"(anonymous_52)","decl":{"start":{"line":579,"column":4},"end":{"line":579,"column":5}},"loc":{"start":{"line":579,"column":22},"end":{"line":583,"column":5}},"line":579},"53":{"name":"(anonymous_53)","decl":{"start":{"line":590,"column":4},"end":{"line":590,"column":5}},"loc":{"start":{"line":590,"column":25},"end":{"line":593,"column":5}},"line":590},"54":{"name":"(anonymous_54)","decl":{"start":{"line":596,"column":4},"end":{"line":596,"column":5}},"loc":{"start":{"line":596,"column":15},"end":{"line":599,"column":5}},"line":596},"55":{"name":"(anonymous_55)","decl":{"start":{"line":601,"column":4},"end":{"line":601,"column":5}},"loc":{"start":{"line":601,"column":16},"end":{"line":604,"column":5}},"line":601},"56":{"name":"(anonymous_56)","decl":{"start":{"line":610,"column":4},"end":{"line":610,"column":5}},"loc":{"start":{"line":610,"column":21},"end":{"line":614,"column":5}},"line":610}},"branchMap":{"0":{"loc":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},{"start":{},"end":{}}],"line":140},"1":{"loc":{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},"type":"if","locations":[{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},{"start":{},"end":{}}],"line":160},"2":{"loc":{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},"type":"if","locations":[{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},{"start":{},"end":{}}],"line":189},"3":{"loc":{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},"type":"if","locations":[{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},{"start":{},"end":{}}],"line":220},"4":{"loc":{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},"type":"if","locations":[{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},{"start":{},"end":{}}],"line":236},"5":{"loc":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":250},"6":{"loc":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"type":"if","locations":[{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},{"start":{},"end":{}}],"line":252},"7":{"loc":{"start":{"line":252,"column":16},"end":{"line":252,"column":62}},"type":"binary-expr","locations":[{"start":{"line":252,"column":16},"end":{"line":252,"column":28}},{"start":{"line":252,"column":32},"end":{"line":252,"column":62}}],"line":252},"8":{"loc":{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},"type":"if","locations":[{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},{"start":{},"end":{}}],"line":270},"9":{"loc":{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},"type":"if","locations":[{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},{"start":{},"end":{}}],"line":292},"10":{"loc":{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},"type":"if","locations":[{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},{"start":{},"end":{}}],"line":303},"11":{"loc":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"type":"if","locations":[{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},{"start":{},"end":{}}],"line":337},"12":{"loc":{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},"type":"if","locations":[{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},{"start":{},"end":{}}],"line":343},"13":{"loc":{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},"type":"if","locations":[{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},{"start":{},"end":{}}],"line":418},"14":{"loc":{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},"type":"if","locations":[{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},{"start":{},"end":{}}],"line":440},"15":{"loc":{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},"type":"if","locations":[{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},{"start":{},"end":{}}],"line":444},"16":{"loc":{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},"type":"if","locations":[{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},{"start":{},"end":{}}],"line":456},"17":{"loc":{"start":{"line":456,"column":12},"end":{"line":457,"column":43}},"type":"binary-expr","locations":[{"start":{"line":456,"column":12},"end":{"line":456,"column":88}},{"start":{"line":457,"column":12},"end":{"line":457,"column":43}}],"line":456},"18":{"loc":{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},"type":"if","locations":[{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},{"start":{},"end":{}}],"line":462},"19":{"loc":{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},"type":"if","locations":[{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},{"start":{},"end":{}}],"line":468},"20":{"loc":{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},"type":"if","locations":[{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},{"start":{"line":473,"column":19},"end":{"line":479,"column":13}}],"line":469},"21":{"loc":{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},"type":"if","locations":[{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},{"start":{"line":477,"column":19},"end":{"line":479,"column":13}}],"line":473},"22":{"loc":{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},"type":"if","locations":[{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},{"start":{"line":511,"column":19},"end":{"line":513,"column":13}}],"line":509},"23":{"loc":{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},"type":"if","locations":[{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},{"start":{},"end":{}}],"line":524},"24":{"loc":{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},"type":"if","locations":[{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},{"start":{},"end":{}}],"line":528},"25":{"loc":{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},"type":"if","locations":[{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},{"start":{"line":534,"column":15},"end":{"line":536,"column":9}}],"line":532},"26":{"loc":{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},"type":"if","locations":[{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},{"start":{},"end":{}}],"line":542},"27":{"loc":{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},"type":"if","locations":[{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},{"start":{},"end":{}}],"line":557},"28":{"loc":{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},"type":"if","locations":[{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},{"start":{},"end":{}}],"line":565}},"s":{"0":4,"1":4,"2":4,"3":4,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e37d3925631906eaa7678c52e3d5c658ab7e81d5"} +,"/home/runner/work/blockpy/blockpy/src/corgis.js": {"path":"/home/runner/work/blockpy/blockpy/src/corgis.js","statementMap":{"0":{"start":{"line":5,"column":32},"end":{"line":5,"column":34}},"1":{"start":{"line":6,"column":41},"end":{"line":6,"column":43}},"2":{"start":{"line":14,"column":22},"end":{"line":21,"column":1}},"3":{"start":{"line":15,"column":4},"end":{"line":20,"column":38}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":21}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":24}},"7":{"start":{"line":40,"column":0},"end":{"line":63,"column":2}},"8":{"start":{"line":42,"column":16},"end":{"line":42,"column":31}},"9":{"start":{"line":43,"column":17},"end":{"line":43,"column":50}},"10":{"start":{"line":44,"column":17},"end":{"line":44,"column":44}},"11":{"start":{"line":45,"column":18},"end":{"line":45,"column":20}},"12":{"start":{"line":46,"column":4},"end":{"line":50,"column":7}},"13":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"14":{"start":{"line":48,"column":12},"end":{"line":48,"column":88}},"15":{"start":{"line":53,"column":4},"end":{"line":62,"column":7}},"16":{"start":{"line":55,"column":8},"end":{"line":55,"column":38}},"17":{"start":{"line":56,"column":8},"end":{"line":56,"column":46}},"18":{"start":{"line":58,"column":8},"end":{"line":58,"column":31}},"19":{"start":{"line":59,"column":8},"end":{"line":59,"column":25}},"20":{"start":{"line":61,"column":8},"end":{"line":61,"column":39}},"21":{"start":{"line":77,"column":0},"end":{"line":101,"column":2}},"22":{"start":{"line":78,"column":25},"end":{"line":78,"column":27}},"23":{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},"24":{"start":{"line":80,"column":19},"end":{"line":80,"column":101}},"25":{"start":{"line":81,"column":8},"end":{"line":81,"column":59}},"26":{"start":{"line":83,"column":25},"end":{"line":83,"column":58}},"27":{"start":{"line":85,"column":26},"end":{"line":85,"column":60}},"28":{"start":{"line":86,"column":24},"end":{"line":88,"column":10}},"29":{"start":{"line":87,"column":12},"end":{"line":87,"column":80}},"30":{"start":{"line":89,"column":25},"end":{"line":89,"column":58}},"31":{"start":{"line":91,"column":8},"end":{"line":97,"column":11}},"32":{"start":{"line":92,"column":12},"end":{"line":92,"column":43}},"33":{"start":{"line":93,"column":12},"end":{"line":93,"column":87}},"34":{"start":{"line":94,"column":12},"end":{"line":94,"column":69}},"35":{"start":{"line":95,"column":12},"end":{"line":95,"column":77}},"36":{"start":{"line":96,"column":12},"end":{"line":96,"column":65}},"37":{"start":{"line":98,"column":8},"end":{"line":98,"column":63}},"38":{"start":{"line":100,"column":4},"end":{"line":100,"column":26}},"39":{"start":{"line":110,"column":0},"end":{"line":145,"column":2}},"40":{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},"41":{"start":{"line":112,"column":19},"end":{"line":112,"column":68}},"42":{"start":{"line":113,"column":8},"end":{"line":143,"column":11}},"43":{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},"44":{"start":{"line":116,"column":32},"end":{"line":116,"column":57}},"45":{"start":{"line":117,"column":24},"end":{"line":117,"column":114}},"46":{"start":{"line":118,"column":23},"end":{"line":118,"column":101}},"47":{"start":{"line":119,"column":12},"end":{"line":139,"column":15}},"48":{"start":{"line":120,"column":34},"end":{"line":120,"column":59}},"49":{"start":{"line":121,"column":32},"end":{"line":121,"column":36}},"50":{"start":{"line":122,"column":26},"end":{"line":122,"column":151}},"51":{"start":{"line":123,"column":29},"end":{"line":123,"column":72}},"52":{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},"53":{"start":{"line":125,"column":20},"end":{"line":125,"column":41}},"54":{"start":{"line":127,"column":20},"end":{"line":130,"column":23}},"55":{"start":{"line":128,"column":24},"end":{"line":128,"column":90}},"56":{"start":{"line":129,"column":24},"end":{"line":129,"column":45}},"57":{"start":{"line":133,"column":16},"end":{"line":138,"column":36}},"58":{"start":{"line":140,"column":12},"end":{"line":140,"column":33}},"59":{"start":{"line":142,"column":12},"end":{"line":142,"column":77}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":22},"end":{"line":14,"column":23}},"loc":{"start":{"line":14,"column":37},"end":{"line":21,"column":1}},"line":14},"1":{"name":"BlockPyCorgis","decl":{"start":{"line":33,"column":16},"end":{"line":33,"column":29}},"loc":{"start":{"line":33,"column":36},"end":{"line":38,"column":1}},"line":33},"2":{"name":"(anonymous_2)","decl":{"start":{"line":40,"column":39},"end":{"line":40,"column":40}},"loc":{"start":{"line":40,"column":59},"end":{"line":63,"column":1}},"line":40},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":60},"end":{"line":46,"column":61}},"loc":{"start":{"line":46,"column":70},"end":{"line":50,"column":5}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":34},"end":{"line":53,"column":35}},"loc":{"start":{"line":53,"column":46},"end":{"line":57,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":57,"column":12},"end":{"line":57,"column":13}},"loc":{"start":{"line":57,"column":25},"end":{"line":60,"column":5}},"line":57},"6":{"name":"(anonymous_6)","decl":{"start":{"line":60,"column":14},"end":{"line":60,"column":15}},"loc":{"start":{"line":60,"column":26},"end":{"line":62,"column":5}},"line":60},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":40},"end":{"line":77,"column":41}},"loc":{"start":{"line":77,"column":62},"end":{"line":101,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":86,"column":51},"end":{"line":86,"column":52}},"loc":{"start":{"line":86,"column":67},"end":{"line":88,"column":9}},"line":86},"9":{"name":"(anonymous_9)","decl":{"start":{"line":91,"column":55},"end":{"line":91,"column":56}},"loc":{"start":{"line":91,"column":61},"end":{"line":97,"column":9}},"line":91},"10":{"name":"(anonymous_10)","decl":{"start":{"line":110,"column":37},"end":{"line":110,"column":38}},"loc":{"start":{"line":110,"column":49},"end":{"line":145,"column":1}},"line":110},"11":{"name":"(anonymous_11)","decl":{"start":{"line":113,"column":40},"end":{"line":113,"column":41}},"loc":{"start":{"line":113,"column":50},"end":{"line":143,"column":9}},"line":113},"12":{"name":"(anonymous_12)","decl":{"start":{"line":119,"column":45},"end":{"line":119,"column":46}},"loc":{"start":{"line":119,"column":55},"end":{"line":139,"column":13}},"line":119},"13":{"name":"(anonymous_13)","decl":{"start":{"line":127,"column":31},"end":{"line":127,"column":32}},"loc":{"start":{"line":127,"column":37},"end":{"line":130,"column":21}},"line":127}},"branchMap":{"0":{"loc":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},{"start":{},"end":{}}],"line":47},"1":{"loc":{"start":{"line":47,"column":12},"end":{"line":47,"column":65}},"type":"binary-expr","locations":[{"start":{"line":47,"column":12},"end":{"line":47,"column":16}},{"start":{"line":47,"column":20},"end":{"line":47,"column":65}}],"line":47},"2":{"loc":{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},"type":"if","locations":[{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},{"start":{},"end":{}}],"line":79},"3":{"loc":{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},{"start":{},"end":{}}],"line":111},"4":{"loc":{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},"type":"if","locations":[{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},{"start":{"line":126,"column":23},"end":{"line":131,"column":17}}],"line":124}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":1,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"426447481e96aae108685621cb3be3c184b93d80"} +,"/home/runner/work/blockpy/blockpy/src/dialog.js": {"path":"/home/runner/work/blockpy/blockpy/src/dialog.js","statementMap":{"0":{"start":{"line":3,"column":25},"end":{"line":26,"column":1}},"1":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"2":{"start":{"line":41,"column":4},"end":{"line":41,"column":19}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":45}},"4":{"start":{"line":44,"column":4},"end":{"line":44,"column":43}},"5":{"start":{"line":45,"column":4},"end":{"line":45,"column":47}},"6":{"start":{"line":46,"column":4},"end":{"line":46,"column":46}},"7":{"start":{"line":47,"column":4},"end":{"line":47,"column":48}},"8":{"start":{"line":49,"column":4},"end":{"line":49,"column":24}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":51,"column":4},"end":{"line":54,"column":7}},"11":{"start":{"line":52,"column":8},"end":{"line":52,"column":19}},"12":{"start":{"line":53,"column":8},"end":{"line":53,"column":31}},"13":{"start":{"line":55,"column":4},"end":{"line":58,"column":7}},"14":{"start":{"line":56,"column":8},"end":{"line":56,"column":18}},"15":{"start":{"line":61,"column":0},"end":{"line":63,"column":2}},"16":{"start":{"line":62,"column":4},"end":{"line":62,"column":27}},"17":{"start":{"line":73,"column":0},"end":{"line":87,"column":2}},"18":{"start":{"line":74,"column":4},"end":{"line":74,"column":30}},"19":{"start":{"line":75,"column":4},"end":{"line":75,"column":28}},"20":{"start":{"line":76,"column":4},"end":{"line":76,"column":27}},"21":{"start":{"line":77,"column":4},"end":{"line":77,"column":27}},"22":{"start":{"line":78,"column":4},"end":{"line":80,"column":7}},"23":{"start":{"line":82,"column":4},"end":{"line":86,"column":7}},"24":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"25":{"start":{"line":84,"column":12},"end":{"line":84,"column":22}},"26":{"start":{"line":89,"column":0},"end":{"line":98,"column":2}},"27":{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},"28":{"start":{"line":91,"column":8},"end":{"line":91,"column":25}},"29":{"start":{"line":93,"column":4},"end":{"line":93,"column":31}},"30":{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},"31":{"start":{"line":95,"column":4},"end":{"line":95,"column":17}},"32":{"start":{"line":96,"column":4},"end":{"line":96,"column":41}},"33":{"start":{"line":100,"column":0},"end":{"line":102,"column":2}},"34":{"start":{"line":101,"column":4},"end":{"line":101,"column":152}},"35":{"start":{"line":104,"column":0},"end":{"line":107,"column":2}},"36":{"start":{"line":105,"column":4},"end":{"line":106,"column":94}},"37":{"start":{"line":109,"column":0},"end":{"line":112,"column":2}},"38":{"start":{"line":110,"column":4},"end":{"line":111,"column":94}},"39":{"start":{"line":114,"column":0},"end":{"line":117,"column":2}},"40":{"start":{"line":115,"column":4},"end":{"line":116,"column":74}},"41":{"start":{"line":119,"column":0},"end":{"line":122,"column":2}},"42":{"start":{"line":120,"column":4},"end":{"line":121,"column":74}},"43":{"start":{"line":124,"column":0},"end":{"line":127,"column":2}},"44":{"start":{"line":125,"column":4},"end":{"line":126,"column":74}},"45":{"start":{"line":129,"column":0},"end":{"line":132,"column":2}},"46":{"start":{"line":130,"column":4},"end":{"line":131,"column":74}},"47":{"start":{"line":134,"column":0},"end":{"line":137,"column":2}},"48":{"start":{"line":135,"column":4},"end":{"line":136,"column":94}},"49":{"start":{"line":139,"column":0},"end":{"line":141,"column":2}},"50":{"start":{"line":140,"column":4},"end":{"line":140,"column":149}},"51":{"start":{"line":143,"column":0},"end":{"line":145,"column":2}},"52":{"start":{"line":144,"column":4},"end":{"line":144,"column":30}},"53":{"start":{"line":147,"column":0},"end":{"line":149,"column":2}},"54":{"start":{"line":151,"column":0},"end":{"line":154,"column":2}},"55":{"start":{"line":152,"column":4},"end":{"line":153,"column":40}},"56":{"start":{"line":156,"column":0},"end":{"line":159,"column":2}},"57":{"start":{"line":157,"column":4},"end":{"line":158,"column":40}},"58":{"start":{"line":161,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":162,"column":19},"end":{"line":162,"column":81}},"60":{"start":{"line":163,"column":4},"end":{"line":163,"column":96}},"61":{"start":{"line":164,"column":4},"end":{"line":189,"column":7}},"62":{"start":{"line":192,"column":0},"end":{"line":216,"column":2}},"63":{"start":{"line":193,"column":20},"end":{"line":193,"column":64}},"64":{"start":{"line":194,"column":22},"end":{"line":194,"column":76}},"65":{"start":{"line":195,"column":14},"end":{"line":200,"column":5}},"66":{"start":{"line":196,"column":22},"end":{"line":196,"column":79}},"67":{"start":{"line":197,"column":21},"end":{"line":197,"column":75}},"68":{"start":{"line":198,"column":8},"end":{"line":198,"column":54}},"69":{"start":{"line":199,"column":8},"end":{"line":199,"column":48}},"70":{"start":{"line":201,"column":4},"end":{"line":214,"column":25}},"71":{"start":{"line":218,"column":0},"end":{"line":244,"column":2}},"72":{"start":{"line":219,"column":27},"end":{"line":223,"column":100}},"73":{"start":{"line":224,"column":4},"end":{"line":236,"column":7}},"74":{"start":{"line":238,"column":4},"end":{"line":243,"column":7}},"75":{"start":{"line":240,"column":8},"end":{"line":242,"column":11}},"76":{"start":{"line":241,"column":12},"end":{"line":241,"column":70}}},"fnMap":{"0":{"name":"BlockPyDialog","decl":{"start":{"line":39,"column":16},"end":{"line":39,"column":29}},"loc":{"start":{"line":39,"column":41},"end":{"line":59,"column":1}},"line":39},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":16}},"loc":{"start":{"line":49,"column":21},"end":{"line":49,"column":23}},"line":49},"2":{"name":"(anonymous_2)","decl":{"start":{"line":50,"column":14},"end":{"line":50,"column":15}},"loc":{"start":{"line":50,"column":20},"end":{"line":50,"column":22}},"line":50},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":26},"end":{"line":51,"column":27}},"loc":{"start":{"line":51,"column":32},"end":{"line":54,"column":5}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":27},"end":{"line":55,"column":28}},"loc":{"start":{"line":55,"column":33},"end":{"line":58,"column":5}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":61,"column":32},"end":{"line":61,"column":33}},"loc":{"start":{"line":61,"column":44},"end":{"line":63,"column":1}},"line":61},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":31},"end":{"line":73,"column":32}},"loc":{"start":{"line":73,"column":63},"end":{"line":87,"column":1}},"line":73},"7":{"name":"(anonymous_7)","decl":{"start":{"line":82,"column":35},"end":{"line":82,"column":36}},"loc":{"start":{"line":82,"column":48},"end":{"line":86,"column":5}},"line":82},"8":{"name":"(anonymous_8)","decl":{"start":{"line":89,"column":34},"end":{"line":89,"column":35}},"loc":{"start":{"line":89,"column":75},"end":{"line":98,"column":1}},"line":89},"9":{"name":"(anonymous_9)","decl":{"start":{"line":100,"column":53},"end":{"line":100,"column":54}},"loc":{"start":{"line":100,"column":65},"end":{"line":102,"column":1}},"line":100},"10":{"name":"(anonymous_10)","decl":{"start":{"line":104,"column":52},"end":{"line":104,"column":53}},"loc":{"start":{"line":104,"column":70},"end":{"line":107,"column":1}},"line":104},"11":{"name":"(anonymous_11)","decl":{"start":{"line":109,"column":55},"end":{"line":109,"column":56}},"loc":{"start":{"line":109,"column":73},"end":{"line":112,"column":1}},"line":109},"12":{"name":"(anonymous_12)","decl":{"start":{"line":114,"column":47},"end":{"line":114,"column":48}},"loc":{"start":{"line":114,"column":65},"end":{"line":117,"column":1}},"line":114},"13":{"name":"(anonymous_13)","decl":{"start":{"line":119,"column":49},"end":{"line":119,"column":50}},"loc":{"start":{"line":119,"column":67},"end":{"line":122,"column":1}},"line":119},"14":{"name":"(anonymous_14)","decl":{"start":{"line":124,"column":46},"end":{"line":124,"column":47}},"loc":{"start":{"line":124,"column":64},"end":{"line":127,"column":1}},"line":124},"15":{"name":"(anonymous_15)","decl":{"start":{"line":129,"column":46},"end":{"line":129,"column":47}},"loc":{"start":{"line":129,"column":64},"end":{"line":132,"column":1}},"line":129},"16":{"name":"(anonymous_16)","decl":{"start":{"line":134,"column":51},"end":{"line":134,"column":52}},"loc":{"start":{"line":134,"column":69},"end":{"line":137,"column":1}},"line":134},"17":{"name":"(anonymous_17)","decl":{"start":{"line":139,"column":51},"end":{"line":139,"column":52}},"loc":{"start":{"line":139,"column":68},"end":{"line":141,"column":1}},"line":139},"18":{"name":"(anonymous_18)","decl":{"start":{"line":143,"column":49},"end":{"line":143,"column":50}},"loc":{"start":{"line":143,"column":75},"end":{"line":145,"column":1}},"line":143},"19":{"name":"(anonymous_19)","decl":{"start":{"line":147,"column":44},"end":{"line":147,"column":45}},"loc":{"start":{"line":147,"column":56},"end":{"line":149,"column":1}},"line":147},"20":{"name":"(anonymous_20)","decl":{"start":{"line":151,"column":59},"end":{"line":151,"column":60}},"loc":{"start":{"line":151,"column":71},"end":{"line":154,"column":1}},"line":151},"21":{"name":"(anonymous_21)","decl":{"start":{"line":156,"column":48},"end":{"line":156,"column":49}},"loc":{"start":{"line":156,"column":60},"end":{"line":159,"column":1}},"line":156},"22":{"name":"(anonymous_22)","decl":{"start":{"line":161,"column":37},"end":{"line":161,"column":38}},"loc":{"start":{"line":161,"column":49},"end":{"line":190,"column":1}},"line":161},"23":{"name":"(anonymous_23)","decl":{"start":{"line":192,"column":38},"end":{"line":192,"column":39}},"loc":{"start":{"line":192,"column":50},"end":{"line":216,"column":1}},"line":192},"24":{"name":"(anonymous_24)","decl":{"start":{"line":195,"column":14},"end":{"line":195,"column":15}},"loc":{"start":{"line":195,"column":20},"end":{"line":200,"column":5}},"line":195},"25":{"name":"(anonymous_25)","decl":{"start":{"line":218,"column":38},"end":{"line":218,"column":39}},"loc":{"start":{"line":218,"column":66},"end":{"line":244,"column":1}},"line":218},"26":{"name":"(anonymous_26)","decl":{"start":{"line":238,"column":58},"end":{"line":238,"column":59}},"loc":{"start":{"line":238,"column":64},"end":{"line":243,"column":5}},"line":238},"27":{"name":"(anonymous_27)","decl":{"start":{"line":240,"column":48},"end":{"line":240,"column":49}},"loc":{"start":{"line":240,"column":54},"end":{"line":242,"column":9}},"line":240}},"branchMap":{"0":{"loc":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},{"start":{},"end":{}}],"line":83},"1":{"loc":{"start":{"line":83,"column":12},"end":{"line":83,"column":53}},"type":"binary-expr","locations":[{"start":{"line":83,"column":12},"end":{"line":83,"column":33}},{"start":{"line":83,"column":37},"end":{"line":83,"column":53}}],"line":83},"2":{"loc":{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},{"start":{},"end":{}}],"line":90},"3":{"loc":{"start":{"line":163,"column":15},"end":{"line":163,"column":95}},"type":"cond-expr","locations":[{"start":{"line":163,"column":26},"end":{"line":163,"column":90}},{"start":{"line":163,"column":93},"end":{"line":163,"column":95}}],"line":163},"4":{"loc":{"start":{"line":194,"column":22},"end":{"line":194,"column":76}},"type":"cond-expr","locations":[{"start":{"line":194,"column":62},"end":{"line":194,"column":64}},{"start":{"line":194,"column":67},"end":{"line":194,"column":76}}],"line":194},"5":{"loc":{"start":{"line":219,"column":27},"end":{"line":223,"column":100}},"type":"cond-expr","locations":[{"start":{"line":219,"column":41},"end":{"line":223,"column":5}},{"start":{"line":223,"column":8},"end":{"line":223,"column":100}}],"line":219}},"s":{"0":5,"1":6,"2":6,"3":6,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":0,"12":0,"13":6,"14":0,"15":5,"16":0,"17":5,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":5,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":5,"34":0,"35":5,"36":0,"37":5,"38":0,"39":5,"40":0,"41":5,"42":0,"43":5,"44":0,"45":5,"46":0,"47":5,"48":0,"49":5,"50":0,"51":5,"52":0,"53":5,"54":5,"55":0,"56":5,"57":0,"58":5,"59":0,"60":0,"61":0,"62":5,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":5,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":6,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"55330ff8c89789a90d0ed04585df40e01513b922"} +,"/home/runner/work/blockpy/blockpy/src/editors.js": {"path":"/home/runner/work/blockpy/blockpy/src/editors.js","statementMap":{"0":{"start":{"line":30,"column":25},"end":{"line":40,"column":1}},"1":{"start":{"line":42,"column":27},"end":{"line":42,"column":47}},"2":{"start":{"line":44,"column":26},"end":{"line":47,"column":1}},"3":{"start":{"line":49,"column":28},"end":{"line":62,"column":12}},"4":{"start":{"line":49,"column":60},"end":{"line":56,"column":1}},"5":{"start":{"line":66,"column":8},"end":{"line":66,"column":25}},"6":{"start":{"line":67,"column":8},"end":{"line":67,"column":23}},"7":{"start":{"line":68,"column":8},"end":{"line":68,"column":28}},"8":{"start":{"line":69,"column":8},"end":{"line":69,"column":30}},"9":{"start":{"line":70,"column":8},"end":{"line":70,"column":30}},"10":{"start":{"line":71,"column":8},"end":{"line":71,"column":26}},"11":{"start":{"line":72,"column":8},"end":{"line":72,"column":73}},"12":{"start":{"line":72,"column":44},"end":{"line":72,"column":71}},"13":{"start":{"line":73,"column":8},"end":{"line":73,"column":76}},"14":{"start":{"line":77,"column":25},"end":{"line":77,"column":40}},"15":{"start":{"line":78,"column":23},"end":{"line":78,"column":64}},"16":{"start":{"line":79,"column":8},"end":{"line":79,"column":34}},"17":{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},"18":{"start":{"line":81,"column":8},"end":{"line":81,"column":57}},"19":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"20":{"start":{"line":82,"column":19},"end":{"line":82,"column":20}},"21":{"start":{"line":83,"column":12},"end":{"line":83,"column":55}},"22":{"start":{"line":88,"column":8},"end":{"line":88,"column":48}},"23":{"start":{"line":92,"column":24},"end":{"line":92,"column":36}},"24":{"start":{"line":93,"column":24},"end":{"line":93,"column":62}},"25":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"26":{"start":{"line":95,"column":12},"end":{"line":95,"column":62}},"27":{"start":{"line":97,"column":8},"end":{"line":97,"column":33}},"28":{"start":{"line":98,"column":8},"end":{"line":98,"column":51}},"29":{"start":{"line":102,"column":20},"end":{"line":102,"column":34}},"30":{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},"31":{"start":{"line":104,"column":12},"end":{"line":104,"column":34}},"32":{"start":{"line":106,"column":12},"end":{"line":106,"column":23}},"33":{"start":{"line":108,"column":19},"end":{"line":108,"column":56}},"34":{"start":{"line":109,"column":19},"end":{"line":109,"column":53}},"35":{"start":{"line":110,"column":8},"end":{"line":110,"column":60}},"36":{"start":{"line":114,"column":34},"end":{"line":114,"column":61}},"37":{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},"38":{"start":{"line":116,"column":12},"end":{"line":116,"column":42}},"39":{"start":{"line":118,"column":29},"end":{"line":118,"column":62}},"40":{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},"41":{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},"42":{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},"43":{"start":{"line":122,"column":20},"end":{"line":122,"column":64}},"44":{"start":{"line":124,"column":20},"end":{"line":124,"column":95}},"45":{"start":{"line":125,"column":20},"end":{"line":125,"column":47}},"46":{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},"47":{"start":{"line":130,"column":12},"end":{"line":130,"column":42}},"48":{"start":{"line":132,"column":12},"end":{"line":132,"column":39}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":49,"column":50},"end":{"line":49,"column":51}},"loc":{"start":{"line":49,"column":60},"end":{"line":56,"column":1}},"line":49},"1":{"name":"(anonymous_1)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":27},"end":{"line":74,"column":5}},"line":65},"2":{"name":"(anonymous_2)","decl":{"start":{"line":72,"column":34},"end":{"line":72,"column":35}},"loc":{"start":{"line":72,"column":44},"end":{"line":72,"column":71}},"line":72},"3":{"name":"(anonymous_3)","decl":{"start":{"line":76,"column":4},"end":{"line":76,"column":5}},"loc":{"start":{"line":76,"column":25},"end":{"line":85,"column":5}},"line":76},"4":{"name":"(anonymous_4)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":17},"end":{"line":89,"column":5}},"line":87},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":4},"end":{"line":91,"column":5}},"loc":{"start":{"line":91,"column":30},"end":{"line":99,"column":5}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":31},"end":{"line":111,"column":5}},"line":101},"7":{"name":"(anonymous_7)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":5}},"loc":{"start":{"line":113,"column":20},"end":{"line":135,"column":5}},"line":113}},"branchMap":{"0":{"loc":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"type":"if","locations":[{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},{"start":{},"end":{}}],"line":94},"1":{"loc":{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},{"start":{"line":105,"column":15},"end":{"line":107,"column":9}}],"line":103},"2":{"loc":{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},"type":"if","locations":[{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},{"start":{},"end":{}}],"line":115},"3":{"loc":{"start":{"line":115,"column":12},"end":{"line":115,"column":59}},"type":"binary-expr","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":31}},{"start":{"line":115,"column":35},"end":{"line":115,"column":59}}],"line":115},"4":{"loc":{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},"type":"if","locations":[{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},{"start":{},"end":{}}],"line":119},"5":{"loc":{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},"type":"if","locations":[{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},{"start":{},"end":{}}],"line":120},"6":{"loc":{"start":{"line":120,"column":16},"end":{"line":120,"column":51}},"type":"binary-expr","locations":[{"start":{"line":120,"column":16},"end":{"line":120,"column":33}},{"start":{"line":120,"column":37},"end":{"line":120,"column":51}}],"line":120},"7":{"loc":{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},"type":"if","locations":[{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},{"start":{"line":123,"column":23},"end":{"line":126,"column":17}}],"line":121},"8":{"loc":{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},"type":"if","locations":[{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},{"start":{"line":131,"column":15},"end":{"line":133,"column":9}}],"line":129}},"s":{"0":4,"1":4,"2":4,"3":4,"4":40,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0},"f":{"0":40,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"36f8bf6fc908147be501102bcffa9a6f01deb0d7"} +,"/home/runner/work/blockpy/blockpy/src/engine.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine.js","statementMap":{"0":{"start":{"line":24,"column":8},"end":{"line":24,"column":25}},"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":56}},"2":{"start":{"line":27,"column":8},"end":{"line":33,"column":10}},"3":{"start":{"line":36,"column":8},"end":{"line":36,"column":65}},"4":{"start":{"line":39,"column":8},"end":{"line":39,"column":34}},"5":{"start":{"line":45,"column":8},"end":{"line":45,"column":37}},"6":{"start":{"line":46,"column":8},"end":{"line":46,"column":35}},"7":{"start":{"line":53,"column":21},"end":{"line":53,"column":48}},"8":{"start":{"line":54,"column":8},"end":{"line":54,"column":32}},"9":{"start":{"line":55,"column":8},"end":{"line":55,"column":30}},"10":{"start":{"line":56,"column":8},"end":{"line":56,"column":31}},"11":{"start":{"line":57,"column":8},"end":{"line":57,"column":34}},"12":{"start":{"line":58,"column":8},"end":{"line":58,"column":42}},"13":{"start":{"line":62,"column":22},"end":{"line":62,"column":49}},"14":{"start":{"line":63,"column":8},"end":{"line":63,"column":27}},"15":{"start":{"line":64,"column":8},"end":{"line":64,"column":34}},"16":{"start":{"line":65,"column":8},"end":{"line":65,"column":36}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":28}},"18":{"start":{"line":67,"column":8},"end":{"line":67,"column":34}},"19":{"start":{"line":68,"column":8},"end":{"line":68,"column":45}},"20":{"start":{"line":69,"column":8},"end":{"line":69,"column":31}},"21":{"start":{"line":70,"column":8},"end":{"line":70,"column":29}},"22":{"start":{"line":74,"column":8},"end":{"line":78,"column":10}},"23":{"start":{"line":87,"column":8},"end":{"line":87,"column":33}},"24":{"start":{"line":89,"column":8},"end":{"line":89,"column":28}},"25":{"start":{"line":91,"column":8},"end":{"line":91,"column":36}},"26":{"start":{"line":93,"column":8},"end":{"line":93,"column":45}},"27":{"start":{"line":95,"column":8},"end":{"line":95,"column":46}},"28":{"start":{"line":101,"column":8},"end":{"line":101,"column":34}},"29":{"start":{"line":110,"column":8},"end":{"line":110,"column":63}},"30":{"start":{"line":111,"column":24},"end":{"line":114,"column":9}},"31":{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},"32":{"start":{"line":116,"column":12},"end":{"line":119,"column":15}},"33":{"start":{"line":117,"column":16},"end":{"line":117,"column":56}},"34":{"start":{"line":118,"column":16},"end":{"line":118,"column":36}},"35":{"start":{"line":121,"column":12},"end":{"line":121,"column":83}},"36":{"start":{"line":123,"column":8},"end":{"line":123,"column":76}},"37":{"start":{"line":127,"column":8},"end":{"line":127,"column":65}},"38":{"start":{"line":128,"column":8},"end":{"line":133,"column":49}},"39":{"start":{"line":137,"column":8},"end":{"line":137,"column":63}},"40":{"start":{"line":138,"column":30},"end":{"line":138,"column":69}},"41":{"start":{"line":139,"column":8},"end":{"line":139,"column":37}},"42":{"start":{"line":140,"column":8},"end":{"line":155,"column":11}},"43":{"start":{"line":141,"column":12},"end":{"line":141,"column":79}},"44":{"start":{"line":142,"column":28},"end":{"line":145,"column":13}},"45":{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},"46":{"start":{"line":148,"column":16},"end":{"line":148,"column":56}},"47":{"start":{"line":149,"column":16},"end":{"line":149,"column":55}},"48":{"start":{"line":151,"column":16},"end":{"line":152,"column":52}},"49":{"start":{"line":154,"column":12},"end":{"line":154,"column":80}},"50":{"start":{"line":159,"column":8},"end":{"line":159,"column":66}},"51":{"start":{"line":160,"column":8},"end":{"line":165,"column":71}},"52":{"start":{"line":169,"column":8},"end":{"line":169,"column":68}},"53":{"start":{"line":173,"column":8},"end":{"line":173,"column":63}},"54":{"start":{"line":174,"column":8},"end":{"line":178,"column":10}},"55":{"start":{"line":175,"column":12},"end":{"line":177,"column":64}},"56":{"start":{"line":185,"column":23},"end":{"line":185,"column":34}},"57":{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},"58":{"start":{"line":188,"column":12},"end":{"line":188,"column":25}},"59":{"start":{"line":190,"column":8},"end":{"line":190,"column":53}},"60":{"start":{"line":191,"column":8},"end":{"line":191,"column":47}},"61":{"start":{"line":193,"column":21},"end":{"line":193,"column":25}},"62":{"start":{"line":194,"column":23},"end":{"line":194,"column":52}},"63":{"start":{"line":195,"column":8},"end":{"line":195,"column":30}},"64":{"start":{"line":196,"column":8},"end":{"line":196,"column":28}},"65":{"start":{"line":197,"column":8},"end":{"line":197,"column":29}},"66":{"start":{"line":198,"column":8},"end":{"line":209,"column":11}},"67":{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},"68":{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},"69":{"start":{"line":204,"column":20},"end":{"line":204,"column":77}},"70":{"start":{"line":206,"column":16},"end":{"line":206,"column":75}},"71":{"start":{"line":207,"column":16},"end":{"line":207,"column":63}},"72":{"start":{"line":210,"column":8},"end":{"line":210,"column":70}},"73":{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},"74":{"start":{"line":220,"column":12},"end":{"line":220,"column":34}},"75":{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},"76":{"start":{"line":229,"column":12},"end":{"line":229,"column":36}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":22},"end":{"line":47,"column":5}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":52,"column":4},"end":{"line":52,"column":5}},"loc":{"start":{"line":52,"column":19},"end":{"line":59,"column":5}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":61,"column":4},"end":{"line":61,"column":5}},"loc":{"start":{"line":61,"column":24},"end":{"line":71,"column":5}},"line":61},"3":{"name":"(anonymous_3)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":27},"end":{"line":79,"column":5}},"line":73},"4":{"name":"(anonymous_4)","decl":{"start":{"line":84,"column":4},"end":{"line":84,"column":5}},"loc":{"start":{"line":84,"column":12},"end":{"line":96,"column":5}},"line":84},"5":{"name":"(anonymous_5)","decl":{"start":{"line":98,"column":4},"end":{"line":98,"column":5}},"loc":{"start":{"line":98,"column":38},"end":{"line":103,"column":5}},"line":98},"6":{"name":"(anonymous_6)","decl":{"start":{"line":105,"column":4},"end":{"line":105,"column":5}},"loc":{"start":{"line":105,"column":11},"end":{"line":107,"column":5}},"line":105},"7":{"name":"(anonymous_7)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":5}},"loc":{"start":{"line":109,"column":31},"end":{"line":124,"column":5}},"line":109},"8":{"name":"(anonymous_8)","decl":{"start":{"line":116,"column":27},"end":{"line":116,"column":28}},"loc":{"start":{"line":116,"column":33},"end":{"line":119,"column":13}},"line":116},"9":{"name":"(anonymous_9)","decl":{"start":{"line":126,"column":4},"end":{"line":126,"column":5}},"loc":{"start":{"line":126,"column":12},"end":{"line":134,"column":5}},"line":126},"10":{"name":"(anonymous_10)","decl":{"start":{"line":136,"column":4},"end":{"line":136,"column":5}},"loc":{"start":{"line":136,"column":15},"end":{"line":156,"column":5}},"line":136},"11":{"name":"(anonymous_11)","decl":{"start":{"line":140,"column":29},"end":{"line":140,"column":30}},"loc":{"start":{"line":140,"column":44},"end":{"line":155,"column":9}},"line":140},"12":{"name":"(anonymous_12)","decl":{"start":{"line":158,"column":4},"end":{"line":158,"column":5}},"loc":{"start":{"line":158,"column":13},"end":{"line":166,"column":5}},"line":158},"13":{"name":"(anonymous_13)","decl":{"start":{"line":168,"column":4},"end":{"line":168,"column":5}},"loc":{"start":{"line":168,"column":15},"end":{"line":170,"column":5}},"line":168},"14":{"name":"(anonymous_14)","decl":{"start":{"line":172,"column":4},"end":{"line":172,"column":5}},"loc":{"start":{"line":172,"column":14},"end":{"line":179,"column":5}},"line":172},"15":{"name":"(anonymous_15)","decl":{"start":{"line":174,"column":42},"end":{"line":174,"column":43}},"loc":{"start":{"line":175,"column":12},"end":{"line":177,"column":64}},"line":175},"16":{"name":"(anonymous_16)","decl":{"start":{"line":184,"column":4},"end":{"line":184,"column":5}},"loc":{"start":{"line":184,"column":16},"end":{"line":211,"column":5}},"line":184},"17":{"name":"(anonymous_17)","decl":{"start":{"line":198,"column":49},"end":{"line":198,"column":50}},"loc":{"start":{"line":198,"column":67},"end":{"line":209,"column":9}},"line":198},"18":{"name":"(anonymous_18)","decl":{"start":{"line":218,"column":4},"end":{"line":218,"column":5}},"loc":{"start":{"line":218,"column":20},"end":{"line":222,"column":5}},"line":218},"19":{"name":"(anonymous_19)","decl":{"start":{"line":227,"column":4},"end":{"line":227,"column":5}},"loc":{"start":{"line":227,"column":22},"end":{"line":231,"column":5}},"line":227}},"branchMap":{"0":{"loc":{"start":{"line":98,"column":15},"end":{"line":98,"column":36}},"type":"default-arg","locations":[{"start":{"line":98,"column":31},"end":{"line":98,"column":36}}],"line":98},"1":{"loc":{"start":{"line":109,"column":8},"end":{"line":109,"column":29}},"type":"default-arg","locations":[{"start":{"line":109,"column":24},"end":{"line":109,"column":29}}],"line":109},"2":{"loc":{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},"type":"if","locations":[{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},{"start":{"line":120,"column":15},"end":{"line":122,"column":9}}],"line":115},"3":{"loc":{"start":{"line":115,"column":12},"end":{"line":115,"column":86}},"type":"binary-expr","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":66}},{"start":{"line":115,"column":70},"end":{"line":115,"column":86}}],"line":115},"4":{"loc":{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},{"start":{"line":150,"column":19},"end":{"line":153,"column":13}}],"line":146},"5":{"loc":{"start":{"line":146,"column":16},"end":{"line":147,"column":51}},"type":"binary-expr","locations":[{"start":{"line":146,"column":16},"end":{"line":146,"column":70}},{"start":{"line":147,"column":16},"end":{"line":147,"column":51}}],"line":146},"6":{"loc":{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},"type":"if","locations":[{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},{"start":{},"end":{}}],"line":187},"7":{"loc":{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},"type":"if","locations":[{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},{"start":{},"end":{}}],"line":199},"8":{"loc":{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},"type":"if","locations":[{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},{"start":{},"end":{}}],"line":202},"9":{"loc":{"start":{"line":202,"column":20},"end":{"line":203,"column":73}},"type":"binary-expr","locations":[{"start":{"line":202,"column":20},"end":{"line":202,"column":28}},{"start":{"line":203,"column":20},"end":{"line":203,"column":73}}],"line":202},"10":{"loc":{"start":{"line":203,"column":22},"end":{"line":203,"column":72}},"type":"binary-expr","locations":[{"start":{"line":203,"column":22},"end":{"line":203,"column":47}},{"start":{"line":203,"column":51},"end":{"line":203,"column":72}}],"line":203},"11":{"loc":{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},"type":"if","locations":[{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},{"start":{},"end":{}}],"line":219},"12":{"loc":{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},"type":"if","locations":[{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},{"start":{},"end":{}}],"line":228}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ab5a283d7d1b2eefbd5abf0a0515ca8f120fbaa2"} +,"/home/runner/work/blockpy/blockpy/src/feedback.js": {"path":"/home/runner/work/blockpy/blockpy/src/feedback.js","statementMap":{"0":{"start":{"line":3,"column":27},"end":{"line":75,"column":1}},"1":{"start":{"line":89,"column":8},"end":{"line":89,"column":25}},"2":{"start":{"line":90,"column":8},"end":{"line":90,"column":23}},"3":{"start":{"line":92,"column":8},"end":{"line":92,"column":64}},"4":{"start":{"line":94,"column":8},"end":{"line":94,"column":68}},"5":{"start":{"line":95,"column":8},"end":{"line":95,"column":62}},"6":{"start":{"line":96,"column":8},"end":{"line":96,"column":66}},"7":{"start":{"line":97,"column":8},"end":{"line":97,"column":68}},"8":{"start":{"line":100,"column":8},"end":{"line":100,"column":103}},"9":{"start":{"line":100,"column":56},"end":{"line":100,"column":101}},"10":{"start":{"line":107,"column":8},"end":{"line":109,"column":16}},"11":{"start":{"line":117,"column":31},"end":{"line":117,"column":34}},"12":{"start":{"line":118,"column":27},"end":{"line":118,"column":48}},"13":{"start":{"line":120,"column":30},"end":{"line":120,"column":61}},"14":{"start":{"line":121,"column":29},"end":{"line":121,"column":71}},"15":{"start":{"line":122,"column":26},"end":{"line":122,"column":47}},"16":{"start":{"line":124,"column":8},"end":{"line":126,"column":45}},"17":{"start":{"line":134,"column":8},"end":{"line":134,"column":44}},"18":{"start":{"line":135,"column":8},"end":{"line":135,"column":42}},"19":{"start":{"line":136,"column":8},"end":{"line":136,"column":39}},"20":{"start":{"line":137,"column":8},"end":{"line":137,"column":41}},"21":{"start":{"line":138,"column":8},"end":{"line":138,"column":50}},"22":{"start":{"line":139,"column":8},"end":{"line":139,"column":54}},"23":{"start":{"line":140,"column":8},"end":{"line":140,"column":37}},"24":{"start":{"line":141,"column":8},"end":{"line":141,"column":35}},"25":{"start":{"line":142,"column":8},"end":{"line":142,"column":48}},"26":{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},"27":{"start":{"line":147,"column":27},"end":{"line":147,"column":84}},"28":{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},"29":{"start":{"line":149,"column":27},"end":{"line":149,"column":74}},"30":{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},"31":{"start":{"line":151,"column":20},"end":{"line":151,"column":50}},"32":{"start":{"line":155,"column":8},"end":{"line":155,"column":20}},"33":{"start":{"line":174,"column":22},"end":{"line":174,"column":64}},"34":{"start":{"line":175,"column":23},"end":{"line":175,"column":66}},"35":{"start":{"line":176,"column":20},"end":{"line":176,"column":60}},"36":{"start":{"line":177,"column":19},"end":{"line":177,"column":58}},"37":{"start":{"line":178,"column":19},"end":{"line":178,"column":40}},"38":{"start":{"line":179,"column":24},"end":{"line":179,"column":67}},"39":{"start":{"line":182,"column":24},"end":{"line":182,"column":59}},"40":{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},"41":{"start":{"line":184,"column":12},"end":{"line":184,"column":35}},"42":{"start":{"line":185,"column":12},"end":{"line":185,"column":32}},"43":{"start":{"line":186,"column":12},"end":{"line":186,"column":44}},"44":{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},"45":{"start":{"line":191,"column":12},"end":{"line":191,"column":42}},"46":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"47":{"start":{"line":196,"column":12},"end":{"line":196,"column":35}},"48":{"start":{"line":200,"column":8},"end":{"line":200,"column":89}},"49":{"start":{"line":201,"column":8},"end":{"line":201,"column":44}},"50":{"start":{"line":202,"column":8},"end":{"line":202,"column":46}},"51":{"start":{"line":203,"column":8},"end":{"line":203,"column":40}},"52":{"start":{"line":205,"column":8},"end":{"line":207,"column":11}},"53":{"start":{"line":206,"column":12},"end":{"line":206,"column":46}},"54":{"start":{"line":210,"column":8},"end":{"line":210,"column":100}},"55":{"start":{"line":213,"column":8},"end":{"line":213,"column":69}},"56":{"start":{"line":216,"column":19},"end":{"line":216,"column":59}},"57":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"58":{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},"59":{"start":{"line":219,"column":12},"end":{"line":219,"column":53}},"60":{"start":{"line":223,"column":28},"end":{"line":223,"column":69}},"61":{"start":{"line":224,"column":8},"end":{"line":224,"column":54}},"62":{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},"63":{"start":{"line":226,"column":33},"end":{"line":226,"column":35}},"64":{"start":{"line":227,"column":12},"end":{"line":231,"column":15}},"65":{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},"66":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"67":{"start":{"line":232,"column":12},"end":{"line":232,"column":62}},"68":{"start":{"line":235,"column":8},"end":{"line":238,"column":9}},"69":{"start":{"line":235,"column":19},"end":{"line":235,"column":20}},"70":{"start":{"line":236,"column":31},"end":{"line":236,"column":43}},"71":{"start":{"line":237,"column":12},"end":{"line":237,"column":176}},"72":{"start":{"line":237,"column":82},"end":{"line":237,"column":174}},"73":{"start":{"line":242,"column":8},"end":{"line":242,"column":30}},"74":{"start":{"line":243,"column":8},"end":{"line":243,"column":86}},"75":{"start":{"line":247,"column":23},"end":{"line":247,"column":41}},"76":{"start":{"line":248,"column":8},"end":{"line":248,"column":73}},"77":{"start":{"line":249,"column":8},"end":{"line":249,"column":37}},"78":{"start":{"line":250,"column":8},"end":{"line":250,"column":37}},"79":{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},"80":{"start":{"line":252,"column":12},"end":{"line":252,"column":43}},"81":{"start":{"line":254,"column":12},"end":{"line":254,"column":44}},"82":{"start":{"line":256,"column":8},"end":{"line":256,"column":107}},"83":{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},"84":{"start":{"line":258,"column":12},"end":{"line":258,"column":36}},"85":{"start":{"line":260,"column":8},"end":{"line":262,"column":11}},"86":{"start":{"line":261,"column":12},"end":{"line":261,"column":94}},"87":{"start":{"line":269,"column":8},"end":{"line":269,"column":46}},"88":{"start":{"line":271,"column":8},"end":{"line":271,"column":35}},"89":{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},"90":{"start":{"line":273,"column":12},"end":{"line":273,"column":54}},"91":{"start":{"line":279,"column":8},"end":{"line":279,"column":36}},"92":{"start":{"line":283,"column":22},"end":{"line":283,"column":71}},"93":{"start":{"line":284,"column":25},"end":{"line":284,"column":89}},"94":{"start":{"line":285,"column":21},"end":{"line":285,"column":69}},"95":{"start":{"line":286,"column":23},"end":{"line":286,"column":50}},"96":{"start":{"line":287,"column":22},"end":{"line":287,"column":73}},"97":{"start":{"line":288,"column":31},"end":{"line":288,"column":89}},"98":{"start":{"line":289,"column":8},"end":{"line":289,"column":64}},"99":{"start":{"line":290,"column":30},"end":{"line":290,"column":87}},"100":{"start":{"line":291,"column":23},"end":{"line":291,"column":62}},"101":{"start":{"line":292,"column":26},"end":{"line":292,"column":55}},"102":{"start":{"line":293,"column":20},"end":{"line":293,"column":67}},"103":{"start":{"line":294,"column":8},"end":{"line":297,"column":35}},"104":{"start":{"line":298,"column":8},"end":{"line":310,"column":11}},"105":{"start":{"line":314,"column":8},"end":{"line":314,"column":38}},"106":{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},"107":{"start":{"line":316,"column":12},"end":{"line":316,"column":19}},"108":{"start":{"line":318,"column":25},"end":{"line":318,"column":53}},"109":{"start":{"line":319,"column":25},"end":{"line":319,"column":69}},"110":{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},"111":{"start":{"line":321,"column":12},"end":{"line":321,"column":19}},"112":{"start":{"line":323,"column":24},"end":{"line":323,"column":26}},"113":{"start":{"line":324,"column":8},"end":{"line":326,"column":11}},"114":{"start":{"line":325,"column":12},"end":{"line":325,"column":64}},"115":{"start":{"line":327,"column":8},"end":{"line":329,"column":11}},"116":{"start":{"line":328,"column":12},"end":{"line":328,"column":64}},"117":{"start":{"line":330,"column":24},"end":{"line":330,"column":33}},"118":{"start":{"line":331,"column":8},"end":{"line":345,"column":9}},"119":{"start":{"line":331,"column":21},"end":{"line":331,"column":22}},"120":{"start":{"line":332,"column":44},"end":{"line":332,"column":56}},"121":{"start":{"line":333,"column":30},"end":{"line":333,"column":59}},"122":{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},"123":{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},"124":{"start":{"line":336,"column":20},"end":{"line":336,"column":44}},"125":{"start":{"line":338,"column":16},"end":{"line":338,"column":47}},"126":{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},"127":{"start":{"line":341,"column":20},"end":{"line":341,"column":45}},"128":{"start":{"line":343,"column":16},"end":{"line":343,"column":51}},"129":{"start":{"line":346,"column":8},"end":{"line":346,"column":49}},"130":{"start":{"line":347,"column":8},"end":{"line":353,"column":11}},"131":{"start":{"line":348,"column":12},"end":{"line":349,"column":49}},"132":{"start":{"line":350,"column":12},"end":{"line":352,"column":15}},"133":{"start":{"line":351,"column":16},"end":{"line":351,"column":63}},"134":{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},"135":{"start":{"line":358,"column":12},"end":{"line":358,"column":77}},"136":{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},"137":{"start":{"line":360,"column":16},"end":{"line":360,"column":38}},"138":{"start":{"line":366,"column":8},"end":{"line":366,"column":49}},"139":{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},"140":{"start":{"line":371,"column":12},"end":{"line":371,"column":32}},"141":{"start":{"line":374,"column":8},"end":{"line":374,"column":30}},"142":{"start":{"line":375,"column":8},"end":{"line":375,"column":29}},"143":{"start":{"line":376,"column":8},"end":{"line":376,"column":49}},"144":{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},"145":{"start":{"line":379,"column":12},"end":{"line":379,"column":27}},"146":{"start":{"line":381,"column":8},"end":{"line":381,"column":44}},"147":{"start":{"line":382,"column":8},"end":{"line":382,"column":46}},"148":{"start":{"line":383,"column":8},"end":{"line":383,"column":40}},"149":{"start":{"line":384,"column":8},"end":{"line":384,"column":50}},"150":{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},"151":{"start":{"line":386,"column":12},"end":{"line":386,"column":55}},"152":{"start":{"line":391,"column":8},"end":{"line":408,"column":11}},"153":{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},"154":{"start":{"line":393,"column":16},"end":{"line":393,"column":28}},"155":{"start":{"line":395,"column":25},"end":{"line":395,"column":37}},"156":{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},"157":{"start":{"line":397,"column":16},"end":{"line":397,"column":82}},"158":{"start":{"line":399,"column":23},"end":{"line":399,"column":81}},"159":{"start":{"line":400,"column":23},"end":{"line":400,"column":72}},"160":{"start":{"line":401,"column":24},"end":{"line":402,"column":71}},"161":{"start":{"line":403,"column":25},"end":{"line":403,"column":27}},"162":{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},"163":{"start":{"line":405,"column":16},"end":{"line":405,"column":69}},"164":{"start":{"line":407,"column":12},"end":{"line":407,"column":48}},"165":{"start":{"line":412,"column":19},"end":{"line":412,"column":32}},"166":{"start":{"line":413,"column":19},"end":{"line":413,"column":47}},"167":{"start":{"line":414,"column":18},"end":{"line":414,"column":51}},"168":{"start":{"line":415,"column":24},"end":{"line":415,"column":26}},"169":{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},"170":{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},"171":{"start":{"line":418,"column":34},"end":{"line":418,"column":82}},"172":{"start":{"line":419,"column":31},"end":{"line":419,"column":45}},"173":{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},"174":{"start":{"line":421,"column":20},"end":{"line":423,"column":60}},"175":{"start":{"line":425,"column":20},"end":{"line":425,"column":46}},"176":{"start":{"line":427,"column":16},"end":{"line":427,"column":50}},"177":{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},"178":{"start":{"line":431,"column":16},"end":{"line":431,"column":108}},"179":{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},"180":{"start":{"line":434,"column":16},"end":{"line":434,"column":109}},"181":{"start":{"line":437,"column":8},"end":{"line":437,"column":34}},"182":{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},"183":{"start":{"line":442,"column":12},"end":{"line":442,"column":67}},"184":{"start":{"line":443,"column":12},"end":{"line":443,"column":70}},"185":{"start":{"line":445,"column":12},"end":{"line":445,"column":68}},"186":{"start":{"line":446,"column":12},"end":{"line":446,"column":71}},"187":{"start":{"line":448,"column":22},"end":{"line":448,"column":76}},"188":{"start":{"line":449,"column":8},"end":{"line":449,"column":60}},"189":{"start":{"line":451,"column":8},"end":{"line":451,"column":36}},"190":{"start":{"line":453,"column":8},"end":{"line":453,"column":120}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":88,"column":4},"end":{"line":88,"column":5}},"loc":{"start":{"line":88,"column":27},"end":{"line":101,"column":5}},"line":88},"1":{"name":"(anonymous_1)","decl":{"start":{"line":100,"column":50},"end":{"line":100,"column":51}},"loc":{"start":{"line":100,"column":56},"end":{"line":100,"column":101}},"line":100},"2":{"name":"(anonymous_2)","decl":{"start":{"line":106,"column":4},"end":{"line":106,"column":5}},"loc":{"start":{"line":106,"column":21},"end":{"line":110,"column":5}},"line":106},"3":{"name":"(anonymous_3)","decl":{"start":{"line":116,"column":4},"end":{"line":116,"column":5}},"loc":{"start":{"line":116,"column":24},"end":{"line":127,"column":5}},"line":116},"4":{"name":"(anonymous_4)","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":5}},"loc":{"start":{"line":133,"column":27},"end":{"line":143,"column":5}},"line":133},"5":{"name":"(anonymous_5)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":44},"end":{"line":162,"column":5}},"line":145},"6":{"name":"(anonymous_6)","decl":{"start":{"line":164,"column":4},"end":{"line":164,"column":5}},"loc":{"start":{"line":164,"column":28},"end":{"line":166,"column":5}},"line":164},"7":{"name":"(anonymous_7)","decl":{"start":{"line":172,"column":4},"end":{"line":172,"column":5}},"loc":{"start":{"line":172,"column":37},"end":{"line":239,"column":5}},"line":172},"8":{"name":"(anonymous_8)","decl":{"start":{"line":205,"column":43},"end":{"line":205,"column":44}},"loc":{"start":{"line":205,"column":57},"end":{"line":207,"column":9}},"line":205},"9":{"name":"(anonymous_9)","decl":{"start":{"line":227,"column":67},"end":{"line":227,"column":68}},"loc":{"start":{"line":227,"column":77},"end":{"line":231,"column":13}},"line":227},"10":{"name":"(anonymous_10)","decl":{"start":{"line":237,"column":76},"end":{"line":237,"column":77}},"loc":{"start":{"line":237,"column":82},"end":{"line":237,"column":174}},"line":237},"11":{"name":"(anonymous_11)","decl":{"start":{"line":241,"column":4},"end":{"line":241,"column":5}},"loc":{"start":{"line":241,"column":28},"end":{"line":244,"column":5}},"line":241},"12":{"name":"(anonymous_12)","decl":{"start":{"line":246,"column":4},"end":{"line":246,"column":5}},"loc":{"start":{"line":246,"column":59},"end":{"line":263,"column":5}},"line":246},"13":{"name":"(anonymous_13)","decl":{"start":{"line":260,"column":23},"end":{"line":260,"column":24}},"loc":{"start":{"line":260,"column":29},"end":{"line":262,"column":9}},"line":260},"14":{"name":"(anonymous_14)","decl":{"start":{"line":268,"column":4},"end":{"line":268,"column":5}},"loc":{"start":{"line":268,"column":38},"end":{"line":280,"column":5}},"line":268},"15":{"name":"(anonymous_15)","decl":{"start":{"line":282,"column":4},"end":{"line":282,"column":5}},"loc":{"start":{"line":282,"column":35},"end":{"line":311,"column":5}},"line":282},"16":{"name":"(anonymous_16)","decl":{"start":{"line":313,"column":4},"end":{"line":313,"column":5}},"loc":{"start":{"line":313,"column":41},"end":{"line":354,"column":5}},"line":313},"17":{"name":"(anonymous_17)","decl":{"start":{"line":324,"column":48},"end":{"line":324,"column":49}},"loc":{"start":{"line":324,"column":61},"end":{"line":326,"column":9}},"line":324},"18":{"name":"(anonymous_18)","decl":{"start":{"line":327,"column":92},"end":{"line":327,"column":93}},"loc":{"start":{"line":327,"column":105},"end":{"line":329,"column":9}},"line":327},"19":{"name":"(anonymous_19)","decl":{"start":{"line":347,"column":34},"end":{"line":347,"column":35}},"loc":{"start":{"line":347,"column":40},"end":{"line":353,"column":9}},"line":347},"20":{"name":"(anonymous_20)","decl":{"start":{"line":350,"column":55},"end":{"line":350,"column":56}},"loc":{"start":{"line":350,"column":66},"end":{"line":352,"column":13}},"line":350},"21":{"name":"(anonymous_21)","decl":{"start":{"line":356,"column":4},"end":{"line":356,"column":5}},"loc":{"start":{"line":356,"column":27},"end":{"line":363,"column":5}},"line":356},"22":{"name":"(anonymous_22)","decl":{"start":{"line":365,"column":4},"end":{"line":365,"column":5}},"loc":{"start":{"line":365,"column":27},"end":{"line":367,"column":5}},"line":365},"23":{"name":"(anonymous_23)","decl":{"start":{"line":369,"column":4},"end":{"line":369,"column":5}},"loc":{"start":{"line":369,"column":40},"end":{"line":388,"column":5}},"line":369},"24":{"name":"(anonymous_24)","decl":{"start":{"line":390,"column":4},"end":{"line":390,"column":5}},"loc":{"start":{"line":390,"column":44},"end":{"line":409,"column":5}},"line":390},"25":{"name":"(anonymous_25)","decl":{"start":{"line":391,"column":35},"end":{"line":391,"column":36}},"loc":{"start":{"line":391,"column":44},"end":{"line":408,"column":9}},"line":391},"26":{"name":"(anonymous_26)","decl":{"start":{"line":411,"column":4},"end":{"line":411,"column":5}},"loc":{"start":{"line":411,"column":62},"end":{"line":438,"column":5}},"line":411},"27":{"name":"(anonymous_27)","decl":{"start":{"line":440,"column":4},"end":{"line":440,"column":5}},"loc":{"start":{"line":440,"column":50},"end":{"line":454,"column":5}},"line":440}},"branchMap":{"0":{"loc":{"start":{"line":125,"column":12},"end":{"line":126,"column":43}},"type":"binary-expr","locations":[{"start":{"line":125,"column":13},"end":{"line":125,"column":42}},{"start":{"line":126,"column":13},"end":{"line":126,"column":42}}],"line":125},"1":{"loc":{"start":{"line":133,"column":10},"end":{"line":133,"column":25}},"type":"default-arg","locations":[{"start":{"line":133,"column":18},"end":{"line":133,"column":25}}],"line":133},"2":{"loc":{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},"type":"if","locations":[{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},{"start":{},"end":{}}],"line":146},"3":{"loc":{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},{"start":{},"end":{}}],"line":148},"4":{"loc":{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},"type":"if","locations":[{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},{"start":{},"end":{}}],"line":150},"5":{"loc":{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},"type":"if","locations":[{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},{"start":{},"end":{}}],"line":183},"6":{"loc":{"start":{"line":183,"column":12},"end":{"line":183,"column":62}},"type":"binary-expr","locations":[{"start":{"line":183,"column":12},"end":{"line":183,"column":21}},{"start":{"line":183,"column":25},"end":{"line":183,"column":62}}],"line":183},"7":{"loc":{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},{"start":{},"end":{}}],"line":190},"8":{"loc":{"start":{"line":190,"column":12},"end":{"line":190,"column":88}},"type":"binary-expr","locations":[{"start":{"line":190,"column":12},"end":{"line":190,"column":51}},{"start":{"line":190,"column":55},"end":{"line":190,"column":88}}],"line":190},"9":{"loc":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},{"start":{},"end":{}}],"line":195},"10":{"loc":{"start":{"line":195,"column":12},"end":{"line":195,"column":62}},"type":"binary-expr","locations":[{"start":{"line":195,"column":12},"end":{"line":195,"column":37}},{"start":{"line":195,"column":41},"end":{"line":195,"column":62}}],"line":195},"11":{"loc":{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},"type":"if","locations":[{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},{"start":{},"end":{}}],"line":218},"12":{"loc":{"start":{"line":218,"column":12},"end":{"line":218,"column":47}},"type":"binary-expr","locations":[{"start":{"line":218,"column":12},"end":{"line":218,"column":25}},{"start":{"line":218,"column":29},"end":{"line":218,"column":47}}],"line":218},"13":{"loc":{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},"type":"if","locations":[{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},{"start":{},"end":{}}],"line":225},"14":{"loc":{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},"type":"if","locations":[{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},{"start":{},"end":{}}],"line":228},"15":{"loc":{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},"type":"if","locations":[{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},{"start":{"line":253,"column":15},"end":{"line":255,"column":9}}],"line":251},"16":{"loc":{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":257},"17":{"loc":{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},"type":"if","locations":[{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},{"start":{},"end":{}}],"line":272},"18":{"loc":{"start":{"line":289,"column":18},"end":{"line":289,"column":63}},"type":"cond-expr","locations":[{"start":{"line":289,"column":39},"end":{"line":289,"column":53}},{"start":{"line":289,"column":56},"end":{"line":289,"column":63}}],"line":289},"19":{"loc":{"start":{"line":294,"column":16},"end":{"line":297,"column":34}},"type":"cond-expr","locations":[{"start":{"line":294,"column":50},"end":{"line":294,"column":52}},{"start":{"line":295,"column":14},"end":{"line":297,"column":34}}],"line":294},"20":{"loc":{"start":{"line":295,"column":14},"end":{"line":297,"column":34}},"type":"cond-expr","locations":[{"start":{"line":296,"column":18},"end":{"line":296,"column":64}},{"start":{"line":297,"column":18},"end":{"line":297,"column":34}}],"line":295},"21":{"loc":{"start":{"line":299,"column":69},"end":{"line":299,"column":114}},"type":"cond-expr","locations":[{"start":{"line":299,"column":81},"end":{"line":299,"column":109}},{"start":{"line":299,"column":112},"end":{"line":299,"column":114}}],"line":299},"22":{"loc":{"start":{"line":301,"column":52},"end":{"line":301,"column":98}},"type":"cond-expr","locations":[{"start":{"line":301,"column":61},"end":{"line":301,"column":63}},{"start":{"line":301,"column":66},"end":{"line":301,"column":98}}],"line":301},"23":{"loc":{"start":{"line":304,"column":14},"end":{"line":304,"column":71}},"type":"cond-expr","locations":[{"start":{"line":304,"column":23},"end":{"line":304,"column":25}},{"start":{"line":304,"column":28},"end":{"line":304,"column":71}}],"line":304},"24":{"loc":{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},"type":"if","locations":[{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},{"start":{},"end":{}}],"line":315},"25":{"loc":{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},"type":"if","locations":[{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},{"start":{},"end":{}}],"line":320},"26":{"loc":{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},"type":"if","locations":[{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},{"start":{"line":339,"column":19},"end":{"line":344,"column":13}}],"line":334},"27":{"loc":{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},"type":"if","locations":[{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},{"start":{},"end":{}}],"line":335},"28":{"loc":{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},"type":"if","locations":[{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},{"start":{},"end":{}}],"line":340},"29":{"loc":{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},"type":"if","locations":[{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},{"start":{},"end":{}}],"line":357},"30":{"loc":{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},"type":"if","locations":[{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},{"start":{},"end":{}}],"line":359},"31":{"loc":{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},"type":"if","locations":[{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},{"start":{},"end":{}}],"line":370},"32":{"loc":{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},{"start":{},"end":{}}],"line":378},"33":{"loc":{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},"type":"if","locations":[{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},{"start":{},"end":{}}],"line":385},"34":{"loc":{"start":{"line":385,"column":12},"end":{"line":385,"column":51}},"type":"binary-expr","locations":[{"start":{"line":385,"column":12},"end":{"line":385,"column":32}},{"start":{"line":385,"column":36},"end":{"line":385,"column":51}}],"line":385},"35":{"loc":{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},"type":"if","locations":[{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},{"start":{},"end":{}}],"line":392},"36":{"loc":{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},"type":"if","locations":[{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},{"start":{},"end":{}}],"line":396},"37":{"loc":{"start":{"line":401,"column":24},"end":{"line":402,"column":71}},"type":"cond-expr","locations":[{"start":{"line":402,"column":41},"end":{"line":402,"column":66}},{"start":{"line":402,"column":69},"end":{"line":402,"column":71}}],"line":401},"38":{"loc":{"start":{"line":401,"column":25},"end":{"line":402,"column":37}},"type":"binary-expr","locations":[{"start":{"line":401,"column":25},"end":{"line":401,"column":51}},{"start":{"line":402,"column":12},"end":{"line":402,"column":37}}],"line":401},"39":{"loc":{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},"type":"if","locations":[{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},{"start":{},"end":{}}],"line":404},"40":{"loc":{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},"type":"if","locations":[{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},{"start":{"line":429,"column":15},"end":{"line":436,"column":9}}],"line":416},"41":{"loc":{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},"type":"if","locations":[{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},{"start":{},"end":{}}],"line":417},"42":{"loc":{"start":{"line":417,"column":16},"end":{"line":417,"column":78}},"type":"binary-expr","locations":[{"start":{"line":417,"column":16},"end":{"line":417,"column":25}},{"start":{"line":417,"column":29},"end":{"line":417,"column":48}},{"start":{"line":417,"column":52},"end":{"line":417,"column":78}}],"line":417},"43":{"loc":{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},"type":"if","locations":[{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},{"start":{"line":424,"column":23},"end":{"line":426,"column":17}}],"line":420},"44":{"loc":{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},"type":"if","locations":[{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},{"start":{},"end":{}}],"line":430},"45":{"loc":{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},"type":"if","locations":[{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},{"start":{},"end":{}}],"line":433},"46":{"loc":{"start":{"line":433,"column":16},"end":{"line":433,"column":57}},"type":"binary-expr","locations":[{"start":{"line":433,"column":16},"end":{"line":433,"column":31}},{"start":{"line":433,"column":35},"end":{"line":433,"column":57}}],"line":433},"47":{"loc":{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},"type":"if","locations":[{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},{"start":{"line":444,"column":15},"end":{"line":447,"column":9}}],"line":441}},"s":{"0":5,"1":5,"2":5,"3":5,"4":5,"5":5,"6":5,"7":5,"8":5,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0},"f":{"0":5,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"b":{"0":[0,0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"44c16dc6aa8ddd7a3f547b00bef0da7cdece90ca"} +,"/home/runner/work/blockpy/blockpy/src/files.js": {"path":"/home/runner/work/blockpy/blockpy/src/files.js","statementMap":{"0":{"start":{"line":5,"column":16},"end":{"line":24,"column":1}},"1":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":32}},"3":{"start":{"line":9,"column":30},"end":{"line":9,"column":32}},"4":{"start":{"line":10,"column":30},"end":{"line":10,"column":36}},"5":{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},"6":{"start":{"line":12,"column":8},"end":{"line":12,"column":56}},"7":{"start":{"line":13,"column":8},"end":{"line":13,"column":53}},"8":{"start":{"line":15,"column":4},"end":{"line":23,"column":11}},"9":{"start":{"line":26,"column":24},"end":{"line":134,"column":1}},"10":{"start":{"line":136,"column":40},"end":{"line":176,"column":1}},"11":{"start":{"line":190,"column":28},"end":{"line":199,"column":1}},"12":{"start":{"line":201,"column":31},"end":{"line":210,"column":1}},"13":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"14":{"start":{"line":214,"column":8},"end":{"line":214,"column":33}},"15":{"start":{"line":216,"column":8},"end":{"line":216,"column":24}},"16":{"start":{"line":220,"column":29},"end":{"line":220,"column":43}},"17":{"start":{"line":221,"column":26},"end":{"line":221,"column":37}},"18":{"start":{"line":223,"column":20},"end":{"line":227,"column":1}},"19":{"start":{"line":229,"column":31},"end":{"line":229,"column":63}},"20":{"start":{"line":231,"column":33},"end":{"line":232,"column":89}},"21":{"start":{"line":234,"column":33},"end":{"line":239,"column":75}},"22":{"start":{"line":243,"column":8},"end":{"line":243,"column":25}},"23":{"start":{"line":244,"column":8},"end":{"line":244,"column":33}},"24":{"start":{"line":245,"column":8},"end":{"line":245,"column":39}},"25":{"start":{"line":246,"column":8},"end":{"line":246,"column":26}},"26":{"start":{"line":247,"column":8},"end":{"line":247,"column":27}},"27":{"start":{"line":252,"column":4},"end":{"line":252,"column":90}},"28":{"start":{"line":256,"column":4},"end":{"line":256,"column":66}},"29":{"start":{"line":256,"column":29},"end":{"line":256,"column":37}},"30":{"start":{"line":256,"column":55},"end":{"line":256,"column":63}},"31":{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},"32":{"start":{"line":261,"column":20},"end":{"line":261,"column":48}},"33":{"start":{"line":262,"column":25},"end":{"line":262,"column":27}},"34":{"start":{"line":263,"column":8},"end":{"line":267,"column":9}},"35":{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},"36":{"start":{"line":265,"column":16},"end":{"line":265,"column":74}},"37":{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},"38":{"start":{"line":270,"column":12},"end":{"line":270,"column":38}},"39":{"start":{"line":272,"column":12},"end":{"line":272,"column":30}},"40":{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},"41":{"start":{"line":276,"column":12},"end":{"line":276,"column":30}},"42":{"start":{"line":278,"column":12},"end":{"line":278,"column":22}},"43":{"start":{"line":284,"column":4},"end":{"line":289,"column":8}},"44":{"start":{"line":285,"column":8},"end":{"line":288,"column":10}},"45":{"start":{"line":293,"column":4},"end":{"line":298,"column":7}},"46":{"start":{"line":294,"column":21},"end":{"line":294,"column":23}},"47":{"start":{"line":295,"column":8},"end":{"line":296,"column":55}},"48":{"start":{"line":296,"column":12},"end":{"line":296,"column":53}},"49":{"start":{"line":297,"column":8},"end":{"line":297,"column":38}},"50":{"start":{"line":306,"column":8},"end":{"line":306,"column":25}},"51":{"start":{"line":307,"column":8},"end":{"line":307,"column":25}},"52":{"start":{"line":308,"column":8},"end":{"line":308,"column":26}},"53":{"start":{"line":310,"column":8},"end":{"line":310,"column":26}},"54":{"start":{"line":311,"column":8},"end":{"line":311,"column":27}},"55":{"start":{"line":313,"column":8},"end":{"line":313,"column":31}},"56":{"start":{"line":314,"column":8},"end":{"line":314,"column":30}},"57":{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},"58":{"start":{"line":324,"column":12},"end":{"line":324,"column":41}},"59":{"start":{"line":326,"column":8},"end":{"line":326,"column":47}},"60":{"start":{"line":330,"column":8},"end":{"line":330,"column":39}},"61":{"start":{"line":334,"column":25},"end":{"line":334,"column":29}},"62":{"start":{"line":335,"column":8},"end":{"line":355,"column":10}},"63":{"start":{"line":338,"column":12},"end":{"line":354,"column":35}},"64":{"start":{"line":339,"column":16},"end":{"line":353,"column":23}},"65":{"start":{"line":339,"column":48},"end":{"line":339,"column":89}},"66":{"start":{"line":341,"column":40},"end":{"line":341,"column":52}},"67":{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},"68":{"start":{"line":344,"column":39},"end":{"line":344,"column":121}},"69":{"start":{"line":345,"column":28},"end":{"line":345,"column":59}},"70":{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},"71":{"start":{"line":348,"column":39},"end":{"line":348,"column":90}},"72":{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},"73":{"start":{"line":350,"column":32},"end":{"line":350,"column":84}},"74":{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},"75":{"start":{"line":377,"column":12},"end":{"line":377,"column":58}},"76":{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},"77":{"start":{"line":379,"column":12},"end":{"line":379,"column":59}},"78":{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},"79":{"start":{"line":381,"column":12},"end":{"line":381,"column":62}},"80":{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},"81":{"start":{"line":383,"column":12},"end":{"line":383,"column":60}},"82":{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},"83":{"start":{"line":385,"column":12},"end":{"line":385,"column":66}},"84":{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},"85":{"start":{"line":387,"column":12},"end":{"line":387,"column":66}},"86":{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},"87":{"start":{"line":389,"column":12},"end":{"line":389,"column":88}},"88":{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},"89":{"start":{"line":391,"column":12},"end":{"line":391,"column":88}},"90":{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},"91":{"start":{"line":393,"column":12},"end":{"line":393,"column":88}},"92":{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},"93":{"start":{"line":395,"column":12},"end":{"line":395,"column":88}},"94":{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},"95":{"start":{"line":397,"column":12},"end":{"line":397,"column":58}},"96":{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},"97":{"start":{"line":399,"column":12},"end":{"line":399,"column":62}},"98":{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},"99":{"start":{"line":401,"column":12},"end":{"line":401,"column":71}},"100":{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},"101":{"start":{"line":403,"column":12},"end":{"line":403,"column":50}},"102":{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},"103":{"start":{"line":405,"column":12},"end":{"line":405,"column":86}},"104":{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},"105":{"start":{"line":409,"column":12},"end":{"line":409,"column":88}},"106":{"start":{"line":411,"column":12},"end":{"line":411,"column":78}},"107":{"start":{"line":416,"column":8},"end":{"line":416,"column":27}},"108":{"start":{"line":417,"column":25},"end":{"line":417,"column":37}},"109":{"start":{"line":418,"column":8},"end":{"line":422,"column":9}},"110":{"start":{"line":418,"column":19},"end":{"line":418,"column":20}},"111":{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},"112":{"start":{"line":420,"column":16},"end":{"line":420,"column":53}},"113":{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},"114":{"start":{"line":424,"column":26},"end":{"line":424,"column":54}},"115":{"start":{"line":425,"column":12},"end":{"line":425,"column":43}},"116":{"start":{"line":426,"column":12},"end":{"line":426,"column":32}},"117":{"start":{"line":431,"column":8},"end":{"line":431,"column":34}},"118":{"start":{"line":432,"column":8},"end":{"line":432,"column":42}},"119":{"start":{"line":433,"column":8},"end":{"line":433,"column":35}},"120":{"start":{"line":434,"column":8},"end":{"line":434,"column":41}},"121":{"start":{"line":435,"column":8},"end":{"line":435,"column":53}},"122":{"start":{"line":439,"column":8},"end":{"line":446,"column":9}},"123":{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},"124":{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},"125":{"start":{"line":442,"column":20},"end":{"line":442,"column":45}},"126":{"start":{"line":443,"column":20},"end":{"line":443,"column":47}},"127":{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},"128":{"start":{"line":453,"column":31},"end":{"line":453,"column":52}},"129":{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},"130":{"start":{"line":455,"column":16},"end":{"line":455,"column":48}},"131":{"start":{"line":457,"column":16},"end":{"line":457,"column":48}},"132":{"start":{"line":459,"column":12},"end":{"line":459,"column":48}},"133":{"start":{"line":460,"column":12},"end":{"line":460,"column":32}},"134":{"start":{"line":463,"column":26},"end":{"line":463,"column":62}},"135":{"start":{"line":464,"column":12},"end":{"line":464,"column":44}},"136":{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},"137":{"start":{"line":466,"column":16},"end":{"line":466,"column":43}},"138":{"start":{"line":468,"column":16},"end":{"line":468,"column":43}},"139":{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},"140":{"start":{"line":471,"column":16},"end":{"line":471,"column":41}},"141":{"start":{"line":473,"column":12},"end":{"line":473,"column":27}},"142":{"start":{"line":478,"column":8},"end":{"line":478,"column":34}},"143":{"start":{"line":479,"column":8},"end":{"line":479,"column":47}},"144":{"start":{"line":483,"column":8},"end":{"line":483,"column":46}},"145":{"start":{"line":487,"column":8},"end":{"line":487,"column":37}},"146":{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},"147":{"start":{"line":497,"column":23},"end":{"line":497,"column":56}},"148":{"start":{"line":498,"column":12},"end":{"line":498,"column":30}},"149":{"start":{"line":499,"column":12},"end":{"line":499,"column":24}},"150":{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},"151":{"start":{"line":501,"column":12},"end":{"line":501,"column":25}},"152":{"start":{"line":504,"column":24},"end":{"line":504,"column":106}},"153":{"start":{"line":504,"column":72},"end":{"line":504,"column":105}},"154":{"start":{"line":505,"column":12},"end":{"line":505,"column":34}},"155":{"start":{"line":510,"column":19},"end":{"line":510,"column":40}},"156":{"start":{"line":511,"column":8},"end":{"line":511,"column":37}},"157":{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},"158":{"start":{"line":513,"column":12},"end":{"line":513,"column":76}},"159":{"start":{"line":513,"column":56},"end":{"line":513,"column":74}},"160":{"start":{"line":515,"column":8},"end":{"line":515,"column":20}},"161":{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},"162":{"start":{"line":520,"column":12},"end":{"line":520,"column":25}},"163":{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},"164":{"start":{"line":522,"column":12},"end":{"line":522,"column":25}},"165":{"start":{"line":525,"column":24},"end":{"line":525,"column":106}},"166":{"start":{"line":525,"column":72},"end":{"line":525,"column":105}},"167":{"start":{"line":526,"column":12},"end":{"line":526,"column":34}},"168":{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},"169":{"start":{"line":532,"column":12},"end":{"line":532,"column":85}},"170":{"start":{"line":532,"column":61},"end":{"line":532,"column":83}},"171":{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},"172":{"start":{"line":559,"column":12},"end":{"line":559,"column":33}},"173":{"start":{"line":561,"column":25},"end":{"line":561,"column":47}},"174":{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},"175":{"start":{"line":564,"column":12},"end":{"line":564,"column":59}},"176":{"start":{"line":565,"column":12},"end":{"line":565,"column":59}},"177":{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},"178":{"start":{"line":569,"column":12},"end":{"line":569,"column":56}},"179":{"start":{"line":570,"column":12},"end":{"line":570,"column":56}},"180":{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},"181":{"start":{"line":572,"column":12},"end":{"line":572,"column":56}},"182":{"start":{"line":575,"column":32},"end":{"line":575,"column":71}},"183":{"start":{"line":576,"column":35},"end":{"line":576,"column":84}},"184":{"start":{"line":577,"column":33},"end":{"line":577,"column":80}},"185":{"start":{"line":579,"column":26},"end":{"line":579,"column":71}},"186":{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},"187":{"start":{"line":581,"column":12},"end":{"line":581,"column":31}},"188":{"start":{"line":584,"column":29},"end":{"line":584,"column":79}},"189":{"start":{"line":585,"column":31},"end":{"line":585,"column":85}},"190":{"start":{"line":586,"column":29},"end":{"line":586,"column":86}},"191":{"start":{"line":587,"column":28},"end":{"line":587,"column":85}},"192":{"start":{"line":588,"column":28},"end":{"line":588,"column":51}},"193":{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},"194":{"start":{"line":590,"column":12},"end":{"line":590,"column":117}},"195":{"start":{"line":592,"column":32},"end":{"line":592,"column":89}},"196":{"start":{"line":593,"column":30},"end":{"line":593,"column":85}},"197":{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},"198":{"start":{"line":595,"column":12},"end":{"line":596,"column":102}},"199":{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},"200":{"start":{"line":598,"column":12},"end":{"line":599,"column":103}},"201":{"start":{"line":604,"column":8},"end":{"line":608,"column":9}},"202":{"start":{"line":604,"column":19},"end":{"line":604,"column":20}},"203":{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},"204":{"start":{"line":606,"column":16},"end":{"line":606,"column":36}},"205":{"start":{"line":609,"column":8},"end":{"line":609,"column":25}},"206":{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},"207":{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},"208":{"start":{"line":615,"column":16},"end":{"line":615,"column":101}},"209":{"start":{"line":617,"column":12},"end":{"line":617,"column":29}},"210":{"start":{"line":619,"column":8},"end":{"line":632,"column":9}},"211":{"start":{"line":621,"column":16},"end":{"line":621,"column":101}},"212":{"start":{"line":623,"column":16},"end":{"line":623,"column":102}},"213":{"start":{"line":625,"column":16},"end":{"line":625,"column":108}},"214":{"start":{"line":627,"column":16},"end":{"line":627,"column":104}},"215":{"start":{"line":629,"column":16},"end":{"line":629,"column":115}},"216":{"start":{"line":631,"column":16},"end":{"line":631,"column":116}},"217":{"start":{"line":633,"column":8},"end":{"line":633,"column":25}},"218":{"start":{"line":637,"column":19},"end":{"line":637,"column":53}},"219":{"start":{"line":638,"column":23},"end":{"line":638,"column":76}},"220":{"start":{"line":639,"column":23},"end":{"line":639,"column":76}},"221":{"start":{"line":640,"column":24},"end":{"line":640,"column":78}},"222":{"start":{"line":641,"column":29},"end":{"line":641,"column":46}},"223":{"start":{"line":642,"column":8},"end":{"line":647,"column":11}},"224":{"start":{"line":643,"column":28},"end":{"line":643,"column":66}},"225":{"start":{"line":644,"column":12},"end":{"line":644,"column":77}},"226":{"start":{"line":646,"column":12},"end":{"line":646,"column":37}},"227":{"start":{"line":648,"column":18},"end":{"line":660,"column":9}},"228":{"start":{"line":649,"column":25},"end":{"line":649,"column":27}},"229":{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},"230":{"start":{"line":651,"column":16},"end":{"line":651,"column":41}},"231":{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},"232":{"start":{"line":653,"column":16},"end":{"line":653,"column":29}},"233":{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},"234":{"start":{"line":657,"column":16},"end":{"line":657,"column":49}},"235":{"start":{"line":658,"column":16},"end":{"line":658,"column":39}},"236":{"start":{"line":661,"column":8},"end":{"line":665,"column":11}},"237":{"start":{"line":662,"column":12},"end":{"line":662,"column":31}},"238":{"start":{"line":663,"column":12},"end":{"line":663,"column":18}},"239":{"start":{"line":664,"column":12},"end":{"line":664,"column":48}},"240":{"start":{"line":666,"column":8},"end":{"line":666,"column":87}},"241":{"start":{"line":675,"column":20},"end":{"line":675,"column":35}},"242":{"start":{"line":677,"column":29},"end":{"line":677,"column":116}},"243":{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},"244":{"start":{"line":679,"column":12},"end":{"line":679,"column":24}},"245":{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},"246":{"start":{"line":682,"column":12},"end":{"line":687,"column":13}},"247":{"start":{"line":683,"column":16},"end":{"line":683,"column":49}},"248":{"start":{"line":685,"column":16},"end":{"line":685,"column":81}},"249":{"start":{"line":686,"column":16},"end":{"line":686,"column":28}},"250":{"start":{"line":688,"column":12},"end":{"line":688,"column":44}},"251":{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},"252":{"start":{"line":690,"column":12},"end":{"line":690,"column":66}},"253":{"start":{"line":692,"column":12},"end":{"line":694,"column":15}},"254":{"start":{"line":693,"column":16},"end":{"line":693,"column":75}},"255":{"start":{"line":699,"column":26},"end":{"line":699,"column":28}},"256":{"start":{"line":700,"column":8},"end":{"line":714,"column":11}},"257":{"start":{"line":701,"column":12},"end":{"line":713,"column":15}},"258":{"start":{"line":702,"column":37},"end":{"line":702,"column":86}},"259":{"start":{"line":703,"column":34},"end":{"line":703,"column":63}},"260":{"start":{"line":704,"column":34},"end":{"line":704,"column":63}},"261":{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},"262":{"start":{"line":706,"column":20},"end":{"line":706,"column":46}},"263":{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},"264":{"start":{"line":709,"column":20},"end":{"line":709,"column":57}},"265":{"start":{"line":711,"column":16},"end":{"line":711,"column":65}},"266":{"start":{"line":712,"column":16},"end":{"line":712,"column":49}},"267":{"start":{"line":715,"column":8},"end":{"line":715,"column":25}},"268":{"start":{"line":719,"column":34},"end":{"line":719,"column":64}},"269":{"start":{"line":720,"column":8},"end":{"line":735,"column":11}},"270":{"start":{"line":721,"column":12},"end":{"line":734,"column":15}},"271":{"start":{"line":722,"column":16},"end":{"line":733,"column":19}},"272":{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},"273":{"start":{"line":724,"column":24},"end":{"line":724,"column":47}},"274":{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},"275":{"start":{"line":727,"column":24},"end":{"line":731,"column":27}},"276":{"start":{"line":728,"column":28},"end":{"line":728,"column":65}},"277":{"start":{"line":729,"column":28},"end":{"line":729,"column":98}},"278":{"start":{"line":730,"column":28},"end":{"line":730,"column":66}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":17}},"loc":{"start":{"line":5,"column":77},"end":{"line":24,"column":1}},"line":5},"1":{"name":"chompSpecialFile","decl":{"start":{"line":212,"column":16},"end":{"line":212,"column":32}},"loc":{"start":{"line":212,"column":43},"end":{"line":218,"column":1}},"line":212},"2":{"name":"(anonymous_2)","decl":{"start":{"line":242,"column":4},"end":{"line":242,"column":5}},"loc":{"start":{"line":242,"column":42},"end":{"line":248,"column":5}},"line":242},"3":{"name":"makeModelFile","decl":{"start":{"line":251,"column":16},"end":{"line":251,"column":29}},"loc":{"start":{"line":251,"column":50},"end":{"line":253,"column":1}},"line":251},"4":{"name":"makeMockModelFile","decl":{"start":{"line":255,"column":9},"end":{"line":255,"column":26}},"loc":{"start":{"line":255,"column":47},"end":{"line":257,"column":1}},"line":255},"5":{"name":"(anonymous_5)","decl":{"start":{"line":256,"column":23},"end":{"line":256,"column":24}},"loc":{"start":{"line":256,"column":29},"end":{"line":256,"column":37}},"line":256},"6":{"name":"(anonymous_6)","decl":{"start":{"line":256,"column":49},"end":{"line":256,"column":50}},"loc":{"start":{"line":256,"column":55},"end":{"line":256,"column":63}},"line":256},"7":{"name":"loadConcatenatedFile","decl":{"start":{"line":259,"column":16},"end":{"line":259,"column":36}},"loc":{"start":{"line":259,"column":70},"end":{"line":281,"column":1}},"line":259},"8":{"name":"createConcatenatedFile","decl":{"start":{"line":283,"column":16},"end":{"line":283,"column":38}},"loc":{"start":{"line":283,"column":54},"end":{"line":290,"column":1}},"line":283},"9":{"name":"(anonymous_9)","decl":{"start":{"line":284,"column":46},"end":{"line":284,"column":47}},"loc":{"start":{"line":284,"column":54},"end":{"line":289,"column":5}},"line":284},"10":{"name":"observeConcatenatedFile","decl":{"start":{"line":292,"column":16},"end":{"line":292,"column":39}},"loc":{"start":{"line":292,"column":55},"end":{"line":299,"column":1}},"line":292},"11":{"name":"(anonymous_11)","decl":{"start":{"line":293,"column":27},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":33},"end":{"line":298,"column":5}},"line":293},"12":{"name":"(anonymous_12)","decl":{"start":{"line":295,"column":32},"end":{"line":295,"column":33}},"loc":{"start":{"line":296,"column":12},"end":{"line":296,"column":53}},"line":296},"13":{"name":"(anonymous_13)","decl":{"start":{"line":305,"column":4},"end":{"line":305,"column":5}},"loc":{"start":{"line":305,"column":22},"end":{"line":320,"column":5}},"line":305},"14":{"name":"(anonymous_14)","decl":{"start":{"line":322,"column":4},"end":{"line":322,"column":5}},"loc":{"start":{"line":322,"column":34},"end":{"line":327,"column":5}},"line":322},"15":{"name":"(anonymous_15)","decl":{"start":{"line":329,"column":4},"end":{"line":329,"column":5}},"loc":{"start":{"line":329,"column":31},"end":{"line":331,"column":5}},"line":329},"16":{"name":"(anonymous_16)","decl":{"start":{"line":333,"column":4},"end":{"line":333,"column":5}},"loc":{"start":{"line":333,"column":17},"end":{"line":356,"column":5}},"line":333},"17":{"name":"(anonymous_17)","decl":{"start":{"line":337,"column":66},"end":{"line":337,"column":67}},"loc":{"start":{"line":338,"column":12},"end":{"line":354,"column":35}},"line":338},"18":{"name":"(anonymous_18)","decl":{"start":{"line":338,"column":32},"end":{"line":338,"column":33}},"loc":{"start":{"line":338,"column":50},"end":{"line":354,"column":13}},"line":338},"19":{"name":"(anonymous_19)","decl":{"start":{"line":339,"column":29},"end":{"line":339,"column":30}},"loc":{"start":{"line":339,"column":48},"end":{"line":339,"column":89}},"line":339},"20":{"name":"(anonymous_20)","decl":{"start":{"line":340,"column":29},"end":{"line":340,"column":30}},"loc":{"start":{"line":340,"column":47},"end":{"line":353,"column":21}},"line":340},"21":{"name":"(anonymous_21)","decl":{"start":{"line":375,"column":4},"end":{"line":375,"column":5}},"loc":{"start":{"line":375,"column":23},"end":{"line":413,"column":5}},"line":375},"22":{"name":"(anonymous_22)","decl":{"start":{"line":415,"column":4},"end":{"line":415,"column":5}},"loc":{"start":{"line":415,"column":33},"end":{"line":428,"column":5}},"line":415},"23":{"name":"(anonymous_23)","decl":{"start":{"line":430,"column":4},"end":{"line":430,"column":5}},"loc":{"start":{"line":430,"column":17},"end":{"line":436,"column":5}},"line":430},"24":{"name":"(anonymous_24)","decl":{"start":{"line":438,"column":4},"end":{"line":438,"column":5}},"loc":{"start":{"line":438,"column":25},"end":{"line":448,"column":5}},"line":438},"25":{"name":"(anonymous_25)","decl":{"start":{"line":450,"column":4},"end":{"line":450,"column":5}},"loc":{"start":{"line":450,"column":43},"end":{"line":475,"column":5}},"line":450},"26":{"name":"(anonymous_26)","decl":{"start":{"line":477,"column":4},"end":{"line":477,"column":5}},"loc":{"start":{"line":477,"column":34},"end":{"line":480,"column":5}},"line":477},"27":{"name":"(anonymous_27)","decl":{"start":{"line":482,"column":4},"end":{"line":482,"column":5}},"loc":{"start":{"line":482,"column":23},"end":{"line":484,"column":5}},"line":482},"28":{"name":"(anonymous_28)","decl":{"start":{"line":486,"column":4},"end":{"line":486,"column":5}},"loc":{"start":{"line":486,"column":22},"end":{"line":488,"column":5}},"line":486},"29":{"name":"(anonymous_29)","decl":{"start":{"line":495,"column":4},"end":{"line":495,"column":5}},"loc":{"start":{"line":495,"column":25},"end":{"line":507,"column":5}},"line":495},"30":{"name":"(anonymous_30)","decl":{"start":{"line":504,"column":59},"end":{"line":504,"column":60}},"loc":{"start":{"line":504,"column":72},"end":{"line":504,"column":105}},"line":504},"31":{"name":"(anonymous_31)","decl":{"start":{"line":509,"column":4},"end":{"line":509,"column":5}},"loc":{"start":{"line":509,"column":33},"end":{"line":516,"column":5}},"line":509},"32":{"name":"(anonymous_32)","decl":{"start":{"line":513,"column":44},"end":{"line":513,"column":45}},"loc":{"start":{"line":513,"column":56},"end":{"line":513,"column":74}},"line":513},"33":{"name":"(anonymous_33)","decl":{"start":{"line":518,"column":4},"end":{"line":518,"column":5}},"loc":{"start":{"line":518,"column":36},"end":{"line":528,"column":5}},"line":518},"34":{"name":"(anonymous_34)","decl":{"start":{"line":525,"column":59},"end":{"line":525,"column":60}},"loc":{"start":{"line":525,"column":72},"end":{"line":525,"column":105}},"line":525},"35":{"name":"(anonymous_35)","decl":{"start":{"line":530,"column":4},"end":{"line":530,"column":5}},"loc":{"start":{"line":530,"column":24},"end":{"line":534,"column":5}},"line":530},"36":{"name":"(anonymous_36)","decl":{"start":{"line":532,"column":49},"end":{"line":532,"column":50}},"loc":{"start":{"line":532,"column":61},"end":{"line":532,"column":83}},"line":532},"37":{"name":"(anonymous_37)","decl":{"start":{"line":536,"column":4},"end":{"line":536,"column":5}},"loc":{"start":{"line":536,"column":39},"end":{"line":601,"column":5}},"line":536},"38":{"name":"(anonymous_38)","decl":{"start":{"line":603,"column":4},"end":{"line":603,"column":5}},"loc":{"start":{"line":603,"column":46},"end":{"line":610,"column":5}},"line":603},"39":{"name":"(anonymous_39)","decl":{"start":{"line":612,"column":4},"end":{"line":612,"column":5}},"loc":{"start":{"line":612,"column":49},"end":{"line":634,"column":5}},"line":612},"40":{"name":"(anonymous_40)","decl":{"start":{"line":636,"column":4},"end":{"line":636,"column":5}},"loc":{"start":{"line":636,"column":24},"end":{"line":667,"column":5}},"line":636},"41":{"name":"(anonymous_41)","decl":{"start":{"line":642,"column":29},"end":{"line":642,"column":30}},"loc":{"start":{"line":642,"column":35},"end":{"line":647,"column":9}},"line":642},"42":{"name":"(anonymous_42)","decl":{"start":{"line":648,"column":18},"end":{"line":648,"column":19}},"loc":{"start":{"line":648,"column":24},"end":{"line":660,"column":9}},"line":648},"43":{"name":"(anonymous_43)","decl":{"start":{"line":661,"column":20},"end":{"line":661,"column":21}},"loc":{"start":{"line":661,"column":27},"end":{"line":665,"column":9}},"line":661},"44":{"name":"(anonymous_44)","decl":{"start":{"line":666,"column":72},"end":{"line":666,"column":73}},"loc":{"start":{"line":666,"column":76},"end":{"line":666,"column":78}},"line":666},"45":{"name":"(anonymous_45)","decl":{"start":{"line":669,"column":4},"end":{"line":669,"column":5}},"loc":{"start":{"line":669,"column":32},"end":{"line":696,"column":5}},"line":669},"46":{"name":"(anonymous_46)","decl":{"start":{"line":692,"column":58},"end":{"line":692,"column":59}},"loc":{"start":{"line":692,"column":68},"end":{"line":694,"column":13}},"line":692},"47":{"name":"(anonymous_47)","decl":{"start":{"line":698,"column":4},"end":{"line":698,"column":5}},"loc":{"start":{"line":698,"column":27},"end":{"line":716,"column":5}},"line":698},"48":{"name":"(anonymous_48)","decl":{"start":{"line":700,"column":38},"end":{"line":700,"column":39}},"loc":{"start":{"line":700,"column":68},"end":{"line":714,"column":9}},"line":700},"49":{"name":"(anonymous_49)","decl":{"start":{"line":701,"column":32},"end":{"line":701,"column":33}},"loc":{"start":{"line":701,"column":53},"end":{"line":713,"column":13}},"line":701},"50":{"name":"(anonymous_50)","decl":{"start":{"line":718,"column":4},"end":{"line":718,"column":5}},"loc":{"start":{"line":718,"column":31},"end":{"line":737,"column":5}},"line":718},"51":{"name":"(anonymous_51)","decl":{"start":{"line":720,"column":38},"end":{"line":720,"column":39}},"loc":{"start":{"line":720,"column":70},"end":{"line":735,"column":9}},"line":720},"52":{"name":"(anonymous_52)","decl":{"start":{"line":721,"column":50},"end":{"line":721,"column":51}},"loc":{"start":{"line":721,"column":82},"end":{"line":734,"column":13}},"line":721},"53":{"name":"(anonymous_53)","decl":{"start":{"line":722,"column":54},"end":{"line":722,"column":55}},"loc":{"start":{"line":722,"column":83},"end":{"line":733,"column":17}},"line":722},"54":{"name":"(anonymous_54)","decl":{"start":{"line":727,"column":97},"end":{"line":727,"column":98}},"loc":{"start":{"line":727,"column":107},"end":{"line":731,"column":25}},"line":727}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},{"start":{},"end":{}}],"line":6},"1":{"loc":{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},"type":"if","locations":[{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},{"start":{},"end":{}}],"line":11},"2":{"loc":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},{"start":{"line":215,"column":11},"end":{"line":217,"column":5}}],"line":213},"3":{"loc":{"start":{"line":245,"column":24},"end":{"line":245,"column":38}},"type":"binary-expr","locations":[{"start":{"line":245,"column":24},"end":{"line":245,"column":32}},{"start":{"line":245,"column":36},"end":{"line":245,"column":38}}],"line":245},"4":{"loc":{"start":{"line":252,"column":73},"end":{"line":252,"column":87}},"type":"binary-expr","locations":[{"start":{"line":252,"column":73},"end":{"line":252,"column":81}},{"start":{"line":252,"column":85},"end":{"line":252,"column":87}}],"line":252},"5":{"loc":{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},"type":"if","locations":[{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},{"start":{"line":274,"column":11},"end":{"line":280,"column":5}}],"line":260},"6":{"loc":{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},"type":"if","locations":[{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},{"start":{},"end":{}}],"line":264},"7":{"loc":{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},"type":"if","locations":[{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},{"start":{"line":271,"column":15},"end":{"line":273,"column":9}}],"line":269},"8":{"loc":{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},"type":"if","locations":[{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},{"start":{"line":277,"column":15},"end":{"line":279,"column":9}}],"line":275},"9":{"loc":{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},"type":"if","locations":[{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},{"start":{},"end":{}}],"line":323},"10":{"loc":{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},"type":"if","locations":[{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},{"start":{"line":346,"column":31},"end":{"line":352,"column":25}}],"line":342},"11":{"loc":{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},"type":"if","locations":[{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},{"start":{},"end":{}}],"line":346},"12":{"loc":{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},"type":"if","locations":[{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},{"start":{},"end":{}}],"line":349},"13":{"loc":{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},{"start":{"line":378,"column":15},"end":{"line":412,"column":9}}],"line":376},"14":{"loc":{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},{"start":{"line":380,"column":15},"end":{"line":412,"column":9}}],"line":378},"15":{"loc":{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},{"start":{"line":382,"column":15},"end":{"line":412,"column":9}}],"line":380},"16":{"loc":{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},{"start":{"line":384,"column":15},"end":{"line":412,"column":9}}],"line":382},"17":{"loc":{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},{"start":{"line":386,"column":15},"end":{"line":412,"column":9}}],"line":384},"18":{"loc":{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},{"start":{"line":388,"column":15},"end":{"line":412,"column":9}}],"line":386},"19":{"loc":{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},{"start":{"line":390,"column":15},"end":{"line":412,"column":9}}],"line":388},"20":{"loc":{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},{"start":{"line":392,"column":15},"end":{"line":412,"column":9}}],"line":390},"21":{"loc":{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},{"start":{"line":394,"column":15},"end":{"line":412,"column":9}}],"line":392},"22":{"loc":{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},{"start":{"line":396,"column":15},"end":{"line":412,"column":9}}],"line":394},"23":{"loc":{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},{"start":{"line":398,"column":15},"end":{"line":412,"column":9}}],"line":396},"24":{"loc":{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},{"start":{"line":400,"column":15},"end":{"line":412,"column":9}}],"line":398},"25":{"loc":{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},{"start":{"line":402,"column":15},"end":{"line":412,"column":9}}],"line":400},"26":{"loc":{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},{"start":{"line":404,"column":15},"end":{"line":412,"column":9}}],"line":402},"27":{"loc":{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},{"start":{"line":406,"column":15},"end":{"line":412,"column":9}}],"line":404},"28":{"loc":{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},{"start":{"line":410,"column":15},"end":{"line":412,"column":9}}],"line":406},"29":{"loc":{"start":{"line":406,"column":19},"end":{"line":408,"column":48}},"type":"binary-expr","locations":[{"start":{"line":406,"column":19},"end":{"line":406,"column":48}},{"start":{"line":407,"column":19},"end":{"line":407,"column":48}},{"start":{"line":408,"column":19},"end":{"line":408,"column":48}}],"line":406},"30":{"loc":{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},"type":"if","locations":[{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},{"start":{},"end":{}}],"line":419},"31":{"loc":{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},"type":"if","locations":[{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},{"start":{},"end":{}}],"line":423},"32":{"loc":{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},"type":"if","locations":[{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},{"start":{},"end":{}}],"line":440},"33":{"loc":{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},"type":"if","locations":[{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},{"start":{},"end":{}}],"line":441},"34":{"loc":{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},"type":"if","locations":[{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},{"start":{"line":461,"column":15},"end":{"line":474,"column":9}}],"line":451},"35":{"loc":{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},"type":"if","locations":[{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},{"start":{"line":456,"column":19},"end":{"line":458,"column":13}}],"line":454},"36":{"loc":{"start":{"line":459,"column":32},"end":{"line":459,"column":46}},"type":"binary-expr","locations":[{"start":{"line":459,"column":32},"end":{"line":459,"column":40}},{"start":{"line":459,"column":44},"end":{"line":459,"column":46}}],"line":459},"37":{"loc":{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},"type":"if","locations":[{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},{"start":{"line":467,"column":19},"end":{"line":469,"column":13}}],"line":465},"38":{"loc":{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},"type":"if","locations":[{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},{"start":{},"end":{}}],"line":470},"39":{"loc":{"start":{"line":478,"column":19},"end":{"line":478,"column":33}},"type":"binary-expr","locations":[{"start":{"line":478,"column":19},"end":{"line":478,"column":27}},{"start":{"line":478,"column":31},"end":{"line":478,"column":33}}],"line":478},"40":{"loc":{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},"type":"if","locations":[{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},{"start":{"line":500,"column":15},"end":{"line":506,"column":9}}],"line":496},"41":{"loc":{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},"type":"if","locations":[{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},{"start":{"line":502,"column":15},"end":{"line":506,"column":9}}],"line":500},"42":{"loc":{"start":{"line":505,"column":19},"end":{"line":505,"column":33}},"type":"binary-expr","locations":[{"start":{"line":505,"column":19},"end":{"line":505,"column":24}},{"start":{"line":505,"column":28},"end":{"line":505,"column":33}}],"line":505},"43":{"loc":{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},"type":"if","locations":[{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},{"start":{},"end":{}}],"line":512},"44":{"loc":{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},"type":"if","locations":[{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},{"start":{"line":521,"column":15},"end":{"line":527,"column":9}}],"line":519},"45":{"loc":{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},"type":"if","locations":[{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},{"start":{"line":523,"column":15},"end":{"line":527,"column":9}}],"line":521},"46":{"loc":{"start":{"line":526,"column":19},"end":{"line":526,"column":33}},"type":"binary-expr","locations":[{"start":{"line":526,"column":19},"end":{"line":526,"column":24}},{"start":{"line":526,"column":28},"end":{"line":526,"column":33}}],"line":526},"47":{"loc":{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},"type":"if","locations":[{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},{"start":{},"end":{}}],"line":531},"48":{"loc":{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},"type":"if","locations":[{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},{"start":{},"end":{}}],"line":558},"49":{"loc":{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},"type":"if","locations":[{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},{"start":{},"end":{}}],"line":563},"50":{"loc":{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},"type":"if","locations":[{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},{"start":{"line":571,"column":15},"end":{"line":573,"column":9}}],"line":568},"51":{"loc":{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},"type":"if","locations":[{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},{"start":{},"end":{}}],"line":571},"52":{"loc":{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},"type":"if","locations":[{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},{"start":{},"end":{}}],"line":580},"53":{"loc":{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},"type":"if","locations":[{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},{"start":{},"end":{}}],"line":589},"54":{"loc":{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},"type":"if","locations":[{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},{"start":{"line":597,"column":15},"end":{"line":600,"column":9}}],"line":594},"55":{"loc":{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},"type":"if","locations":[{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},{"start":{},"end":{}}],"line":597},"56":{"loc":{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},"type":"if","locations":[{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},{"start":{},"end":{}}],"line":605},"57":{"loc":{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},"type":"if","locations":[{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},{"start":{},"end":{}}],"line":613},"58":{"loc":{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},"type":"if","locations":[{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},{"start":{},"end":{}}],"line":614},"59":{"loc":{"start":{"line":619,"column":8},"end":{"line":632,"column":9}},"type":"switch","locations":[{"start":{"line":620,"column":12},"end":{"line":621,"column":101}},{"start":{"line":622,"column":12},"end":{"line":623,"column":102}},{"start":{"line":624,"column":12},"end":{"line":625,"column":108}},{"start":{"line":626,"column":12},"end":{"line":627,"column":104}},{"start":{"line":628,"column":12},"end":{"line":629,"column":115}},{"start":{"line":630,"column":12},"end":{"line":631,"column":116}}],"line":619},"60":{"loc":{"start":{"line":644,"column":24},"end":{"line":644,"column":76}},"type":"cond-expr","locations":[{"start":{"line":644,"column":50},"end":{"line":644,"column":64}},{"start":{"line":644,"column":67},"end":{"line":644,"column":76}}],"line":644},"61":{"loc":{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},"type":"if","locations":[{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},{"start":{"line":652,"column":19},"end":{"line":654,"column":13}}],"line":650},"62":{"loc":{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},"type":"if","locations":[{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},{"start":{},"end":{}}],"line":652},"63":{"loc":{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},"type":"if","locations":[{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},{"start":{},"end":{}}],"line":656},"64":{"loc":{"start":{"line":669,"column":20},"end":{"line":669,"column":30}},"type":"default-arg","locations":[{"start":{"line":669,"column":26},"end":{"line":669,"column":30}}],"line":669},"65":{"loc":{"start":{"line":677,"column":29},"end":{"line":677,"column":116}},"type":"binary-expr","locations":[{"start":{"line":677,"column":29},"end":{"line":677,"column":69}},{"start":{"line":677,"column":73},"end":{"line":677,"column":116}}],"line":677},"66":{"loc":{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},"type":"if","locations":[{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},{"start":{},"end":{}}],"line":678},"67":{"loc":{"start":{"line":678,"column":12},"end":{"line":678,"column":35}},"type":"binary-expr","locations":[{"start":{"line":678,"column":12},"end":{"line":678,"column":25}},{"start":{"line":678,"column":29},"end":{"line":678,"column":35}}],"line":678},"68":{"loc":{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},"type":"if","locations":[{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},{"start":{"line":689,"column":15},"end":{"line":695,"column":9}}],"line":681},"69":{"loc":{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},"type":"if","locations":[{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},{"start":{"line":691,"column":15},"end":{"line":695,"column":9}}],"line":689},"70":{"loc":{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},"type":"if","locations":[{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},{"start":{},"end":{}}],"line":705},"71":{"loc":{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},"type":"if","locations":[{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},{"start":{},"end":{}}],"line":708},"72":{"loc":{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},"type":"if","locations":[{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},{"start":{},"end":{}}],"line":723},"73":{"loc":{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},"type":"if","locations":[{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},{"start":{},"end":{}}],"line":726}},"s":{"0":4,"1":36,"2":4,"3":36,"4":36,"5":36,"6":32,"7":32,"8":36,"9":4,"10":4,"11":4,"12":4,"13":0,"14":0,"15":0,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0},"f":{"0":36,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0},"b":{"0":[4,32],"1":[32,4],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0,0,0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"8c401a753260f6ac5861238a400d75519fd2d624"} +,"/home/runner/work/blockpy/blockpy/src/footer.js": {"path":"/home/runner/work/blockpy/blockpy/src/footer.js","statementMap":{"0":{"start":{"line":2,"column":25},"end":{"line":41,"column":1}}},"fnMap":{},"branchMap":{},"s":{"0":4},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"18c646073e7730ee72412b5a56f41f9eea4429a9"} +,"/home/runner/work/blockpy/blockpy/src/history.js": {"path":"/home/runner/work/blockpy/blockpy/src/history.js","statementMap":{"0":{"start":{"line":3,"column":36},"end":{"line":31,"column":1}},"1":{"start":{"line":43,"column":8},"end":{"line":43,"column":25}},"2":{"start":{"line":44,"column":8},"end":{"line":44,"column":23}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":30}},"4":{"start":{"line":46,"column":8},"end":{"line":46,"column":26}},"5":{"start":{"line":47,"column":8},"end":{"line":47,"column":29}},"6":{"start":{"line":51,"column":8},"end":{"line":51,"column":31}},"7":{"start":{"line":52,"column":8},"end":{"line":52,"column":29}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":63}},"9":{"start":{"line":54,"column":21},"end":{"line":54,"column":22}},"10":{"start":{"line":55,"column":8},"end":{"line":73,"column":15}},"11":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"12":{"start":{"line":63,"column":33},"end":{"line":63,"column":88}},"13":{"start":{"line":64,"column":32},"end":{"line":64,"column":93}},"14":{"start":{"line":65,"column":31},"end":{"line":65,"column":63}},"15":{"start":{"line":66,"column":29},"end":{"line":66,"column":89}},"16":{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},"17":{"start":{"line":68,"column":20},"end":{"line":68,"column":49}},"18":{"start":{"line":69,"column":20},"end":{"line":69,"column":48}},"19":{"start":{"line":70,"column":20},"end":{"line":70,"column":32}},"20":{"start":{"line":72,"column":16},"end":{"line":72,"column":45}},"21":{"start":{"line":74,"column":8},"end":{"line":74,"column":49}},"22":{"start":{"line":75,"column":8},"end":{"line":77,"column":11}},"23":{"start":{"line":76,"column":12},"end":{"line":76,"column":32}},"24":{"start":{"line":81,"column":8},"end":{"line":81,"column":29}},"25":{"start":{"line":82,"column":8},"end":{"line":82,"column":28}},"26":{"start":{"line":86,"column":24},"end":{"line":86,"column":57}},"27":{"start":{"line":87,"column":8},"end":{"line":87,"column":52}},"28":{"start":{"line":88,"column":8},"end":{"line":88,"column":28}},"29":{"start":{"line":92,"column":24},"end":{"line":92,"column":57}},"30":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"31":{"start":{"line":94,"column":8},"end":{"line":94,"column":28}},"32":{"start":{"line":98,"column":8},"end":{"line":98,"column":52}},"33":{"start":{"line":99,"column":8},"end":{"line":99,"column":28}},"34":{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},"35":{"start":{"line":104,"column":28},"end":{"line":104,"column":61}},"36":{"start":{"line":105,"column":12},"end":{"line":105,"column":93}},"37":{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},"38":{"start":{"line":111,"column":28},"end":{"line":111,"column":61}},"39":{"start":{"line":112,"column":23},"end":{"line":112,"column":57}},"40":{"start":{"line":113,"column":12},"end":{"line":113,"column":67}},"41":{"start":{"line":114,"column":12},"end":{"line":114,"column":64}},"42":{"start":{"line":119,"column":8},"end":{"line":121,"column":72}},"43":{"start":{"line":126,"column":26},"end":{"line":134,"column":1}},"44":{"start":{"line":136,"column":19},"end":{"line":141,"column":1}},"45":{"start":{"line":142,"column":17},"end":{"line":146,"column":1}},"46":{"start":{"line":149,"column":4},"end":{"line":151,"column":53}},"47":{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},"48":{"start":{"line":169,"column":8},"end":{"line":169,"column":32}},"49":{"start":{"line":171,"column":14},"end":{"line":171,"column":24}},"50":{"start":{"line":172,"column":15},"end":{"line":172,"column":49}},"51":{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},"52":{"start":{"line":174,"column":8},"end":{"line":174,"column":53}},"53":{"start":{"line":176,"column":21},"end":{"line":176,"column":44}},"54":{"start":{"line":177,"column":23},"end":{"line":177,"column":50}},"55":{"start":{"line":178,"column":19},"end":{"line":178,"column":66}},"56":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"57":{"start":{"line":180,"column":12},"end":{"line":180,"column":59}},"58":{"start":{"line":182,"column":12},"end":{"line":182,"column":85}},"59":{"start":{"line":193,"column":0},"end":{"line":204,"column":2}},"60":{"start":{"line":194,"column":17},"end":{"line":194,"column":44}},"61":{"start":{"line":195,"column":15},"end":{"line":195,"column":33}},"62":{"start":{"line":196,"column":4},"end":{"line":203,"column":7}},"63":{"start":{"line":197,"column":8},"end":{"line":201,"column":15}},"64":{"start":{"line":198,"column":31},"end":{"line":198,"column":61}},"65":{"start":{"line":199,"column":27},"end":{"line":199,"column":80}},"66":{"start":{"line":200,"column":12},"end":{"line":200,"column":42}},"67":{"start":{"line":202,"column":8},"end":{"line":202,"column":57}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":27},"end":{"line":48,"column":5}},"line":42},"1":{"name":"(anonymous_1)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":18},"end":{"line":78,"column":5}},"line":50},"2":{"name":"(anonymous_2)","decl":{"start":{"line":56,"column":20},"end":{"line":56,"column":21}},"loc":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"line":57},"3":{"name":"(anonymous_3)","decl":{"start":{"line":62,"column":21},"end":{"line":62,"column":22}},"loc":{"start":{"line":62,"column":39},"end":{"line":73,"column":13}},"line":62},"4":{"name":"(anonymous_4)","decl":{"start":{"line":75,"column":29},"end":{"line":75,"column":30}},"loc":{"start":{"line":75,"column":38},"end":{"line":77,"column":9}},"line":75},"5":{"name":"(anonymous_5)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":18},"end":{"line":83,"column":5}},"line":80},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":4},"end":{"line":85,"column":5}},"loc":{"start":{"line":85,"column":19},"end":{"line":89,"column":5}},"line":85},"7":{"name":"(anonymous_7)","decl":{"start":{"line":91,"column":4},"end":{"line":91,"column":5}},"loc":{"start":{"line":91,"column":15},"end":{"line":95,"column":5}},"line":91},"8":{"name":"(anonymous_8)","decl":{"start":{"line":97,"column":4},"end":{"line":97,"column":5}},"loc":{"start":{"line":97,"column":23},"end":{"line":100,"column":5}},"line":97},"9":{"name":"(anonymous_9)","decl":{"start":{"line":102,"column":4},"end":{"line":102,"column":5}},"loc":{"start":{"line":102,"column":19},"end":{"line":107,"column":5}},"line":102},"10":{"name":"(anonymous_10)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":5}},"loc":{"start":{"line":109,"column":10},"end":{"line":116,"column":5}},"line":109},"11":{"name":"(anonymous_11)","decl":{"start":{"line":118,"column":4},"end":{"line":118,"column":5}},"loc":{"start":{"line":118,"column":23},"end":{"line":122,"column":5}},"line":118},"12":{"name":"isSameDay","decl":{"start":{"line":148,"column":9},"end":{"line":148,"column":18}},"loc":{"start":{"line":148,"column":34},"end":{"line":152,"column":1}},"line":148},"13":{"name":"prettyPrintDateTime","decl":{"start":{"line":160,"column":9},"end":{"line":160,"column":28}},"loc":{"start":{"line":160,"column":41},"end":{"line":185,"column":1}},"line":160},"14":{"name":"(anonymous_14)","decl":{"start":{"line":193,"column":38},"end":{"line":193,"column":39}},"loc":{"start":{"line":193,"column":49},"end":{"line":204,"column":1}},"line":193},"15":{"name":"(anonymous_15)","decl":{"start":{"line":196,"column":43},"end":{"line":196,"column":44}},"loc":{"start":{"line":196,"column":59},"end":{"line":203,"column":5}},"line":196},"16":{"name":"(anonymous_16)","decl":{"start":{"line":197,"column":37},"end":{"line":197,"column":38}},"loc":{"start":{"line":197,"column":63},"end":{"line":201,"column":9}},"line":197},"17":{"name":"(anonymous_17)","decl":{"start":{"line":202,"column":42},"end":{"line":202,"column":43}},"loc":{"start":{"line":202,"column":53},"end":{"line":202,"column":55}},"line":202}},"branchMap":{"0":{"loc":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"type":"binary-expr","locations":[{"start":{"line":57,"column":16},"end":{"line":57,"column":59}},{"start":{"line":58,"column":20},"end":{"line":58,"column":50}},{"start":{"line":59,"column":20},"end":{"line":59,"column":55}},{"start":{"line":60,"column":21},"end":{"line":60,"column":57}},{"start":{"line":60,"column":61},"end":{"line":60,"column":100}}],"line":57},"1":{"loc":{"start":{"line":63,"column":33},"end":{"line":63,"column":88}},"type":"binary-expr","locations":[{"start":{"line":63,"column":33},"end":{"line":63,"column":68}},{"start":{"line":63,"column":72},"end":{"line":63,"column":88}}],"line":63},"2":{"loc":{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},"type":"if","locations":[{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},{"start":{},"end":{}}],"line":67},"3":{"loc":{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},{"start":{},"end":{}}],"line":103},"4":{"loc":{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},{"start":{},"end":{}}],"line":110},"5":{"loc":{"start":{"line":119,"column":16},"end":{"line":121,"column":70}},"type":"binary-expr","locations":[{"start":{"line":119,"column":17},"end":{"line":119,"column":49}},{"start":{"line":120,"column":17},"end":{"line":120,"column":51}},{"start":{"line":121,"column":16},"end":{"line":121,"column":70}}],"line":119},"6":{"loc":{"start":{"line":149,"column":11},"end":{"line":151,"column":52}},"type":"binary-expr","locations":[{"start":{"line":149,"column":11},"end":{"line":149,"column":47}},{"start":{"line":150,"column":8},"end":{"line":150,"column":46}},{"start":{"line":151,"column":8},"end":{"line":151,"column":52}}],"line":149},"7":{"loc":{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},{"start":{},"end":{}}],"line":168},"8":{"loc":{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},"type":"if","locations":[{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},{"start":{"line":175,"column":11},"end":{"line":184,"column":5}}],"line":173},"9":{"loc":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"type":"if","locations":[{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},{"start":{"line":181,"column":15},"end":{"line":183,"column":9}}],"line":179}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":4,"44":4,"45":4,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":4,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"b":{"0":[0,0,0,0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0,0],"7":[0,0],"8":[0,0],"9":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"b9921880890fc3b63982930ad1ae54b9804e1582"} +,"/home/runner/work/blockpy/blockpy/src/interface.js": {"path":"/home/runner/work/blockpy/blockpy/src/interface.js","statementMap":{"0":{"start":{"line":25,"column":41},"end":{"line":29,"column":1}},"1":{"start":{"line":38,"column":27},"end":{"line":38,"column":31}},"2":{"start":{"line":39,"column":4},"end":{"line":48,"column":7}},"3":{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},"4":{"start":{"line":41,"column":12},"end":{"line":41,"column":43}},"5":{"start":{"line":43,"column":8},"end":{"line":47,"column":16}},"6":{"start":{"line":44,"column":12},"end":{"line":46,"column":15}},"7":{"start":{"line":45,"column":16},"end":{"line":45,"column":50}},"8":{"start":{"line":50,"column":4},"end":{"line":73,"column":7}},"9":{"start":{"line":51,"column":8},"end":{"line":52,"column":69}},"10":{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},"11":{"start":{"line":55,"column":12},"end":{"line":65,"column":15}},"12":{"start":{"line":56,"column":30},"end":{"line":56,"column":105}},"13":{"start":{"line":57,"column":16},"end":{"line":58,"column":62}},"14":{"start":{"line":59,"column":16},"end":{"line":59,"column":31}},"15":{"start":{"line":61,"column":16},"end":{"line":62,"column":56}},"16":{"start":{"line":63,"column":16},"end":{"line":63,"column":47}},"17":{"start":{"line":64,"column":16},"end":{"line":64,"column":72}},"18":{"start":{"line":67,"column":12},"end":{"line":71,"column":15}},"19":{"start":{"line":68,"column":16},"end":{"line":69,"column":77}},"20":{"start":{"line":70,"column":16},"end":{"line":70,"column":48}},"21":{"start":{"line":79,"column":4},"end":{"line":233,"column":6}}},"fnMap":{"0":{"name":"makeExtraInterfaceSubscriptions","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":47}},"loc":{"start":{"line":36,"column":61},"end":{"line":74,"column":1}},"line":36},"1":{"name":"(anonymous_1)","decl":{"start":{"line":39,"column":44},"end":{"line":39,"column":45}},"loc":{"start":{"line":39,"column":50},"end":{"line":48,"column":5}},"line":39},"2":{"name":"(anonymous_2)","decl":{"start":{"line":43,"column":38},"end":{"line":43,"column":39}},"loc":{"start":{"line":43,"column":44},"end":{"line":47,"column":9}},"line":43},"3":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":86},"end":{"line":44,"column":87}},"loc":{"start":{"line":44,"column":100},"end":{"line":46,"column":13}},"line":44},"4":{"name":"(anonymous_4)","decl":{"start":{"line":50,"column":39},"end":{"line":50,"column":40}},"loc":{"start":{"line":50,"column":57},"end":{"line":73,"column":5}},"line":50},"5":{"name":"(anonymous_5)","decl":{"start":{"line":55,"column":80},"end":{"line":55,"column":81}},"loc":{"start":{"line":55,"column":87},"end":{"line":60,"column":13}},"line":55},"6":{"name":"(anonymous_6)","decl":{"start":{"line":60,"column":20},"end":{"line":60,"column":21}},"loc":{"start":{"line":60,"column":26},"end":{"line":65,"column":13}},"line":60},"7":{"name":"(anonymous_7)","decl":{"start":{"line":67,"column":43},"end":{"line":67,"column":44}},"loc":{"start":{"line":67,"column":49},"end":{"line":71,"column":13}},"line":67},"8":{"name":"makeInterface","decl":{"start":{"line":78,"column":16},"end":{"line":78,"column":29}},"loc":{"start":{"line":78,"column":36},"end":{"line":234,"column":1}},"line":78}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},"type":"if","locations":[{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},{"start":{},"end":{}}],"line":40},"1":{"loc":{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},{"start":{"line":66,"column":15},"end":{"line":72,"column":9}}],"line":53}},"s":{"0":4,"1":3,"2":3,"3":1,"4":0,"5":1,"6":1,"7":0,"8":3,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"f":{"0":3,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,1],"1":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2d3615dfd1d2baaabdbe9e9c36fa3e7c79810053"} +,"/home/runner/work/blockpy/blockpy/src/server.js": {"path":"/home/runner/work/blockpy/blockpy/src/server.js","statementMap":{"0":{"start":{"line":8,"column":25},"end":{"line":14,"column":1}},"1":{"start":{"line":25,"column":4},"end":{"line":25,"column":21}},"2":{"start":{"line":28,"column":4},"end":{"line":28,"column":46}},"3":{"start":{"line":31,"column":4},"end":{"line":31,"column":54}},"4":{"start":{"line":34,"column":4},"end":{"line":37,"column":6}},"5":{"start":{"line":38,"column":4},"end":{"line":41,"column":6}},"6":{"start":{"line":43,"column":4},"end":{"line":43,"column":28}},"7":{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":21}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":24}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":30}},"11":{"start":{"line":51,"column":4},"end":{"line":51,"column":30}},"12":{"start":{"line":52,"column":4},"end":{"line":52,"column":31}},"13":{"start":{"line":53,"column":4},"end":{"line":53,"column":23}},"14":{"start":{"line":55,"column":4},"end":{"line":55,"column":28}},"15":{"start":{"line":62,"column":0},"end":{"line":82,"column":2}},"16":{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},"17":{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},"18":{"start":{"line":65,"column":24},"end":{"line":65,"column":46}},"19":{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},"20":{"start":{"line":67,"column":30},"end":{"line":70,"column":18}},"21":{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},"22":{"start":{"line":72,"column":20},"end":{"line":72,"column":83}},"23":{"start":{"line":74,"column":20},"end":{"line":74,"column":80}},"24":{"start":{"line":76,"column":16},"end":{"line":76,"column":52}},"25":{"start":{"line":79,"column":12},"end":{"line":79,"column":48}},"26":{"start":{"line":88,"column":0},"end":{"line":112,"column":2}},"27":{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},"28":{"start":{"line":90,"column":19},"end":{"line":90,"column":65}},"29":{"start":{"line":91,"column":8},"end":{"line":92,"column":66}},"30":{"start":{"line":94,"column":4},"end":{"line":99,"column":7}},"31":{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},"32":{"start":{"line":96,"column":23},"end":{"line":96,"column":74}},"33":{"start":{"line":97,"column":12},"end":{"line":97,"column":80}},"34":{"start":{"line":100,"column":17},"end":{"line":100,"column":21}},"35":{"start":{"line":101,"column":4},"end":{"line":111,"column":7}},"36":{"start":{"line":102,"column":8},"end":{"line":110,"column":30}},"37":{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},"38":{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},"39":{"start":{"line":105,"column":31},"end":{"line":105,"column":71}},"40":{"start":{"line":106,"column":30},"end":{"line":106,"column":51}},"41":{"start":{"line":107,"column":20},"end":{"line":107,"column":75}},"42":{"start":{"line":114,"column":0},"end":{"line":118,"column":2}},"43":{"start":{"line":115,"column":4},"end":{"line":116,"column":94}},"44":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"45":{"start":{"line":117,"column":4},"end":{"line":117,"column":40}},"46":{"start":{"line":123,"column":0},"end":{"line":134,"column":2}},"47":{"start":{"line":124,"column":16},"end":{"line":124,"column":31}},"48":{"start":{"line":125,"column":4},"end":{"line":125,"column":68}},"49":{"start":{"line":126,"column":4},"end":{"line":126,"column":70}},"50":{"start":{"line":127,"column":4},"end":{"line":127,"column":72}},"51":{"start":{"line":128,"column":4},"end":{"line":128,"column":76}},"52":{"start":{"line":129,"column":4},"end":{"line":129,"column":83}},"53":{"start":{"line":130,"column":4},"end":{"line":130,"column":84}},"54":{"start":{"line":131,"column":4},"end":{"line":131,"column":98}},"55":{"start":{"line":132,"column":4},"end":{"line":132,"column":100}},"56":{"start":{"line":133,"column":4},"end":{"line":133,"column":104}},"57":{"start":{"line":136,"column":0},"end":{"line":145,"column":2}},"58":{"start":{"line":137,"column":4},"end":{"line":139,"column":6}},"59":{"start":{"line":138,"column":8},"end":{"line":138,"column":70}},"60":{"start":{"line":140,"column":4},"end":{"line":142,"column":6}},"61":{"start":{"line":141,"column":8},"end":{"line":141,"column":72}},"62":{"start":{"line":156,"column":0},"end":{"line":158,"column":2}},"63":{"start":{"line":160,"column":0},"end":{"line":172,"column":2}},"64":{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},"65":{"start":{"line":162,"column":8},"end":{"line":162,"column":29}},"66":{"start":{"line":164,"column":24},"end":{"line":164,"column":67}},"67":{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},"68":{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},"69":{"start":{"line":167,"column":12},"end":{"line":167,"column":41}},"70":{"start":{"line":169,"column":8},"end":{"line":169,"column":75}},"71":{"start":{"line":171,"column":4},"end":{"line":171,"column":27}},"72":{"start":{"line":178,"column":0},"end":{"line":199,"column":2}},"73":{"start":{"line":179,"column":21},"end":{"line":179,"column":47}},"74":{"start":{"line":180,"column":15},"end":{"line":180,"column":35}},"75":{"start":{"line":181,"column":21},"end":{"line":181,"column":47}},"76":{"start":{"line":182,"column":18},"end":{"line":182,"column":41}},"77":{"start":{"line":183,"column":26},"end":{"line":183,"column":55}},"78":{"start":{"line":184,"column":14},"end":{"line":184,"column":24}},"79":{"start":{"line":185,"column":23},"end":{"line":185,"column":36}},"80":{"start":{"line":186,"column":17},"end":{"line":197,"column":5}},"81":{"start":{"line":198,"column":4},"end":{"line":198,"column":18}},"82":{"start":{"line":207,"column":0},"end":{"line":212,"column":2}},"83":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"84":{"start":{"line":209,"column":8},"end":{"line":209,"column":49}},"85":{"start":{"line":210,"column":8},"end":{"line":210,"column":68}},"86":{"start":{"line":218,"column":0},"end":{"line":238,"column":2}},"87":{"start":{"line":219,"column":4},"end":{"line":219,"column":31}},"88":{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},"89":{"start":{"line":221,"column":8},"end":{"line":221,"column":65}},"90":{"start":{"line":222,"column":8},"end":{"line":222,"column":45}},"91":{"start":{"line":224,"column":4},"end":{"line":237,"column":5}},"92":{"start":{"line":226,"column":12},"end":{"line":226,"column":57}},"93":{"start":{"line":227,"column":12},"end":{"line":227,"column":18}},"94":{"start":{"line":229,"column":12},"end":{"line":229,"column":57}},"95":{"start":{"line":230,"column":12},"end":{"line":230,"column":18}},"96":{"start":{"line":232,"column":12},"end":{"line":232,"column":57}},"97":{"start":{"line":233,"column":12},"end":{"line":233,"column":18}},"98":{"start":{"line":235,"column":12},"end":{"line":235,"column":58}},"99":{"start":{"line":236,"column":12},"end":{"line":236,"column":18}},"100":{"start":{"line":243,"column":0},"end":{"line":248,"column":2}},"101":{"start":{"line":244,"column":4},"end":{"line":244,"column":31}},"102":{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},"103":{"start":{"line":246,"column":8},"end":{"line":246,"column":30}},"104":{"start":{"line":250,"column":0},"end":{"line":264,"column":2}},"105":{"start":{"line":252,"column":17},"end":{"line":252,"column":41}},"106":{"start":{"line":253,"column":14},"end":{"line":253,"column":40}},"107":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"108":{"start":{"line":255,"column":8},"end":{"line":255,"column":71}},"109":{"start":{"line":258,"column":14},"end":{"line":258,"column":34}},"110":{"start":{"line":259,"column":16},"end":{"line":259,"column":46}},"111":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"112":{"start":{"line":261,"column":8},"end":{"line":261,"column":36}},"113":{"start":{"line":262,"column":8},"end":{"line":262,"column":67}},"114":{"start":{"line":266,"column":0},"end":{"line":273,"column":2}},"115":{"start":{"line":267,"column":14},"end":{"line":267,"column":34}},"116":{"start":{"line":268,"column":16},"end":{"line":268,"column":46}},"117":{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},"118":{"start":{"line":270,"column":8},"end":{"line":270,"column":40}},"119":{"start":{"line":271,"column":8},"end":{"line":271,"column":67}},"120":{"start":{"line":276,"column":0},"end":{"line":308,"column":2}},"121":{"start":{"line":278,"column":22},"end":{"line":302,"column":5}},"122":{"start":{"line":280,"column":8},"end":{"line":280,"column":42}},"123":{"start":{"line":281,"column":8},"end":{"line":301,"column":15}},"124":{"start":{"line":283,"column":16},"end":{"line":283,"column":50}},"125":{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},"126":{"start":{"line":285,"column":20},"end":{"line":285,"column":64}},"127":{"start":{"line":287,"column":20},"end":{"line":287,"column":44}},"128":{"start":{"line":288,"column":20},"end":{"line":288,"column":83}},"129":{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},"130":{"start":{"line":291,"column":20},"end":{"line":291,"column":39}},"131":{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},"132":{"start":{"line":294,"column":20},"end":{"line":294,"column":46}},"133":{"start":{"line":299,"column":16},"end":{"line":299,"column":86}},"134":{"start":{"line":300,"column":16},"end":{"line":300,"column":83}},"135":{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},"136":{"start":{"line":304,"column":8},"end":{"line":304,"column":22}},"137":{"start":{"line":306,"column":8},"end":{"line":306,"column":39}},"138":{"start":{"line":321,"column":0},"end":{"line":369,"column":2}},"139":{"start":{"line":322,"column":16},"end":{"line":322,"column":35}},"140":{"start":{"line":323,"column":18},"end":{"line":362,"column":5}},"141":{"start":{"line":325,"column":8},"end":{"line":325,"column":54}},"142":{"start":{"line":326,"column":19},"end":{"line":326,"column":46}},"143":{"start":{"line":328,"column":8},"end":{"line":361,"column":32}},"144":{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},"145":{"start":{"line":331,"column":20},"end":{"line":331,"column":43}},"146":{"start":{"line":333,"column":37},"end":{"line":333,"column":64}},"147":{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},"148":{"start":{"line":335,"column":24},"end":{"line":335,"column":51}},"149":{"start":{"line":337,"column":20},"end":{"line":337,"column":64}},"150":{"start":{"line":340,"column":20},"end":{"line":340,"column":83}},"151":{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},"152":{"start":{"line":343,"column":41},"end":{"line":343,"column":68}},"153":{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},"154":{"start":{"line":345,"column":28},"end":{"line":345,"column":55}},"155":{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},"156":{"start":{"line":348,"column":28},"end":{"line":348,"column":54}},"157":{"start":{"line":354,"column":16},"end":{"line":354,"column":86}},"158":{"start":{"line":356,"column":33},"end":{"line":356,"column":60}},"159":{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},"160":{"start":{"line":358,"column":20},"end":{"line":358,"column":93}},"161":{"start":{"line":363,"column":4},"end":{"line":363,"column":37}},"162":{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},"163":{"start":{"line":365,"column":8},"end":{"line":365,"column":25}},"164":{"start":{"line":367,"column":8},"end":{"line":367,"column":56}},"165":{"start":{"line":371,"column":0},"end":{"line":400,"column":2}},"166":{"start":{"line":372,"column":4},"end":{"line":372,"column":31}},"167":{"start":{"line":373,"column":4},"end":{"line":399,"column":11}},"168":{"start":{"line":380,"column":12},"end":{"line":380,"column":31}},"169":{"start":{"line":381,"column":12},"end":{"line":381,"column":56}},"170":{"start":{"line":382,"column":12},"end":{"line":382,"column":30}},"171":{"start":{"line":383,"column":12},"end":{"line":383,"column":35}},"172":{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},"173":{"start":{"line":387,"column":16},"end":{"line":387,"column":35}},"174":{"start":{"line":388,"column":16},"end":{"line":388,"column":84}},"175":{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},"176":{"start":{"line":390,"column":20},"end":{"line":390,"column":56}},"177":{"start":{"line":393,"column":16},"end":{"line":397,"column":36}},"178":{"start":{"line":394,"column":20},"end":{"line":394,"column":39}},"179":{"start":{"line":395,"column":20},"end":{"line":395,"column":90}},"180":{"start":{"line":396,"column":20},"end":{"line":396,"column":102}},"181":{"start":{"line":403,"column":0},"end":{"line":424,"column":2}},"182":{"start":{"line":404,"column":16},"end":{"line":404,"column":31}},"183":{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},"184":{"start":{"line":406,"column":19},"end":{"line":406,"column":42}},"185":{"start":{"line":407,"column":8},"end":{"line":407,"column":46}},"186":{"start":{"line":408,"column":8},"end":{"line":420,"column":30}},"187":{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},"188":{"start":{"line":411,"column":35},"end":{"line":411,"column":75}},"189":{"start":{"line":413,"column":35},"end":{"line":413,"column":106}},"190":{"start":{"line":414,"column":35},"end":{"line":414,"column":107}},"191":{"start":{"line":418,"column":31},"end":{"line":418,"column":97}},"192":{"start":{"line":419,"column":31},"end":{"line":419,"column":73}},"193":{"start":{"line":422,"column":8},"end":{"line":422,"column":62}},"194":{"start":{"line":426,"column":0},"end":{"line":448,"column":2}},"195":{"start":{"line":427,"column":16},"end":{"line":427,"column":31}},"196":{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},"197":{"start":{"line":429,"column":19},"end":{"line":429,"column":42}},"198":{"start":{"line":430,"column":8},"end":{"line":430,"column":51}},"199":{"start":{"line":431,"column":8},"end":{"line":431,"column":55}},"200":{"start":{"line":432,"column":8},"end":{"line":432,"column":51}},"201":{"start":{"line":433,"column":8},"end":{"line":433,"column":45}},"202":{"start":{"line":434,"column":8},"end":{"line":434,"column":51}},"203":{"start":{"line":435,"column":8},"end":{"line":435,"column":56}},"204":{"start":{"line":436,"column":8},"end":{"line":436,"column":47}},"205":{"start":{"line":437,"column":8},"end":{"line":437,"column":57}},"206":{"start":{"line":439,"column":8},"end":{"line":444,"column":30}},"207":{"start":{"line":442,"column":31},"end":{"line":442,"column":96}},"208":{"start":{"line":443,"column":31},"end":{"line":443,"column":73}},"209":{"start":{"line":446,"column":8},"end":{"line":446,"column":108}},"210":{"start":{"line":450,"column":0},"end":{"line":460,"column":2}},"211":{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},"212":{"start":{"line":452,"column":20},"end":{"line":452,"column":35}},"213":{"start":{"line":453,"column":19},"end":{"line":453,"column":42}},"214":{"start":{"line":454,"column":8},"end":{"line":458,"column":30}},"215":{"start":{"line":456,"column":31},"end":{"line":456,"column":83}},"216":{"start":{"line":457,"column":31},"end":{"line":457,"column":73}},"217":{"start":{"line":462,"column":0},"end":{"line":472,"column":2}},"218":{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},"219":{"start":{"line":464,"column":20},"end":{"line":464,"column":35}},"220":{"start":{"line":465,"column":19},"end":{"line":465,"column":42}},"221":{"start":{"line":466,"column":8},"end":{"line":470,"column":30}},"222":{"start":{"line":468,"column":31},"end":{"line":468,"column":100}},"223":{"start":{"line":469,"column":31},"end":{"line":469,"column":73}},"224":{"start":{"line":474,"column":0},"end":{"line":499,"column":2}},"225":{"start":{"line":475,"column":16},"end":{"line":475,"column":31}},"226":{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},"227":{"start":{"line":477,"column":19},"end":{"line":477,"column":42}},"228":{"start":{"line":478,"column":8},"end":{"line":478,"column":38}},"229":{"start":{"line":479,"column":8},"end":{"line":479,"column":38}},"230":{"start":{"line":480,"column":8},"end":{"line":480,"column":36}},"231":{"start":{"line":481,"column":8},"end":{"line":481,"column":36}},"232":{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},"233":{"start":{"line":483,"column":12},"end":{"line":483,"column":34}},"234":{"start":{"line":485,"column":17},"end":{"line":485,"column":90}},"235":{"start":{"line":485,"column":55},"end":{"line":485,"column":72}},"236":{"start":{"line":486,"column":8},"end":{"line":495,"column":79}},"237":{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},"238":{"start":{"line":490,"column":42},"end":{"line":490,"column":102}},"239":{"start":{"line":492,"column":42},"end":{"line":492,"column":103}},"240":{"start":{"line":494,"column":38},"end":{"line":494,"column":80}},"241":{"start":{"line":497,"column":8},"end":{"line":497,"column":100}},"242":{"start":{"line":501,"column":0},"end":{"line":518,"column":2}},"243":{"start":{"line":502,"column":16},"end":{"line":502,"column":31}},"244":{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},"245":{"start":{"line":504,"column":19},"end":{"line":504,"column":42}},"246":{"start":{"line":505,"column":8},"end":{"line":505,"column":38}},"247":{"start":{"line":506,"column":8},"end":{"line":506,"column":38}},"248":{"start":{"line":507,"column":8},"end":{"line":507,"column":36}},"249":{"start":{"line":508,"column":17},"end":{"line":508,"column":90}},"250":{"start":{"line":508,"column":55},"end":{"line":508,"column":72}},"251":{"start":{"line":509,"column":8},"end":{"line":514,"column":97}},"252":{"start":{"line":512,"column":38},"end":{"line":512,"column":101}},"253":{"start":{"line":513,"column":38},"end":{"line":513,"column":80}},"254":{"start":{"line":516,"column":8},"end":{"line":516,"column":100}},"255":{"start":{"line":520,"column":0},"end":{"line":538,"column":2}},"256":{"start":{"line":521,"column":16},"end":{"line":521,"column":31}},"257":{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},"258":{"start":{"line":523,"column":19},"end":{"line":523,"column":42}},"259":{"start":{"line":524,"column":8},"end":{"line":524,"column":38}},"260":{"start":{"line":525,"column":8},"end":{"line":525,"column":38}},"261":{"start":{"line":526,"column":8},"end":{"line":526,"column":44}},"262":{"start":{"line":527,"column":8},"end":{"line":527,"column":44}},"263":{"start":{"line":528,"column":17},"end":{"line":528,"column":90}},"264":{"start":{"line":528,"column":55},"end":{"line":528,"column":72}},"265":{"start":{"line":529,"column":8},"end":{"line":534,"column":79}},"266":{"start":{"line":532,"column":38},"end":{"line":532,"column":99}},"267":{"start":{"line":533,"column":38},"end":{"line":533,"column":80}},"268":{"start":{"line":536,"column":8},"end":{"line":536,"column":100}},"269":{"start":{"line":540,"column":0},"end":{"line":559,"column":2}},"270":{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},"271":{"start":{"line":542,"column":8},"end":{"line":542,"column":56}},"272":{"start":{"line":543,"column":8},"end":{"line":543,"column":15}},"273":{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},"274":{"start":{"line":546,"column":19},"end":{"line":546,"column":42}},"275":{"start":{"line":547,"column":8},"end":{"line":547,"column":40}},"276":{"start":{"line":548,"column":8},"end":{"line":548,"column":36}},"277":{"start":{"line":549,"column":8},"end":{"line":549,"column":30}},"278":{"start":{"line":550,"column":8},"end":{"line":550,"column":34}},"279":{"start":{"line":551,"column":8},"end":{"line":551,"column":38}},"280":{"start":{"line":552,"column":8},"end":{"line":552,"column":55}},"281":{"start":{"line":554,"column":8},"end":{"line":555,"column":11}},"282":{"start":{"line":557,"column":8},"end":{"line":557,"column":56}},"283":{"start":{"line":561,"column":0},"end":{"line":576,"column":2}},"284":{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},"285":{"start":{"line":563,"column":8},"end":{"line":563,"column":57}},"286":{"start":{"line":564,"column":8},"end":{"line":564,"column":15}},"287":{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},"288":{"start":{"line":567,"column":19},"end":{"line":567,"column":42}},"289":{"start":{"line":568,"column":8},"end":{"line":568,"column":38}},"290":{"start":{"line":569,"column":8},"end":{"line":569,"column":30}},"291":{"start":{"line":570,"column":8},"end":{"line":570,"column":56}},"292":{"start":{"line":572,"column":8},"end":{"line":572,"column":69}},"293":{"start":{"line":574,"column":8},"end":{"line":574,"column":57}},"294":{"start":{"line":578,"column":0},"end":{"line":597,"column":2}},"295":{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},"296":{"start":{"line":580,"column":8},"end":{"line":580,"column":70}},"297":{"start":{"line":581,"column":8},"end":{"line":581,"column":15}},"298":{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},"299":{"start":{"line":584,"column":19},"end":{"line":584,"column":42}},"300":{"start":{"line":585,"column":8},"end":{"line":585,"column":35}},"301":{"start":{"line":586,"column":31},"end":{"line":590,"column":9}},"302":{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},"303":{"start":{"line":588,"column":16},"end":{"line":588,"column":71}},"304":{"start":{"line":591,"column":8},"end":{"line":595,"column":30}},"305":{"start":{"line":593,"column":31},"end":{"line":593,"column":94}},"306":{"start":{"line":594,"column":31},"end":{"line":594,"column":73}},"307":{"start":{"line":604,"column":0},"end":{"line":628,"column":2}},"308":{"start":{"line":605,"column":16},"end":{"line":605,"column":31}},"309":{"start":{"line":606,"column":17},"end":{"line":606,"column":21}},"310":{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},"311":{"start":{"line":608,"column":19},"end":{"line":608,"column":42}},"312":{"start":{"line":609,"column":8},"end":{"line":609,"column":36}},"313":{"start":{"line":610,"column":8},"end":{"line":610,"column":28}},"314":{"start":{"line":611,"column":8},"end":{"line":623,"column":30}},"315":{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},"316":{"start":{"line":614,"column":35},"end":{"line":614,"column":59}},"317":{"start":{"line":616,"column":35},"end":{"line":616,"column":67}},"318":{"start":{"line":617,"column":35},"end":{"line":617,"column":102}},"319":{"start":{"line":621,"column":31},"end":{"line":621,"column":85}},"320":{"start":{"line":622,"column":31},"end":{"line":622,"column":58}},"321":{"start":{"line":625,"column":8},"end":{"line":625,"column":51}},"322":{"start":{"line":626,"column":8},"end":{"line":626,"column":96}},"323":{"start":{"line":630,"column":0},"end":{"line":648,"column":2}},"324":{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},"325":{"start":{"line":632,"column":8},"end":{"line":632,"column":33}},"326":{"start":{"line":634,"column":16},"end":{"line":634,"column":31}},"327":{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},"328":{"start":{"line":636,"column":8},"end":{"line":636,"column":56}},"329":{"start":{"line":637,"column":8},"end":{"line":637,"column":15}},"330":{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},"331":{"start":{"line":640,"column":19},"end":{"line":640,"column":42}},"332":{"start":{"line":641,"column":8},"end":{"line":641,"column":36}},"333":{"start":{"line":642,"column":8},"end":{"line":642,"column":32}},"334":{"start":{"line":643,"column":8},"end":{"line":643,"column":55}},"335":{"start":{"line":644,"column":8},"end":{"line":644,"column":107}},"336":{"start":{"line":646,"column":8},"end":{"line":646,"column":63}},"337":{"start":{"line":650,"column":0},"end":{"line":654,"column":2}},"338":{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},"339":{"start":{"line":652,"column":8},"end":{"line":652,"column":49}},"340":{"start":{"line":656,"column":0},"end":{"line":686,"column":2}},"341":{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},"342":{"start":{"line":658,"column":8},"end":{"line":658,"column":64}},"343":{"start":{"line":659,"column":8},"end":{"line":659,"column":15}},"344":{"start":{"line":661,"column":19},"end":{"line":661,"column":66}},"345":{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},"346":{"start":{"line":663,"column":19},"end":{"line":663,"column":42}},"347":{"start":{"line":664,"column":8},"end":{"line":664,"column":30}},"348":{"start":{"line":665,"column":8},"end":{"line":665,"column":34}},"349":{"start":{"line":666,"column":8},"end":{"line":666,"column":49}},"350":{"start":{"line":667,"column":8},"end":{"line":667,"column":43}},"351":{"start":{"line":668,"column":8},"end":{"line":684,"column":11}},"352":{"start":{"line":669,"column":12},"end":{"line":669,"column":36}},"353":{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},"354":{"start":{"line":671,"column":16},"end":{"line":671,"column":29}},"355":{"start":{"line":673,"column":12},"end":{"line":683,"column":31}},"356":{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},"357":{"start":{"line":676,"column":36},"end":{"line":676,"column":90}},"358":{"start":{"line":678,"column":36},"end":{"line":678,"column":109}},"359":{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},"360":{"start":{"line":681,"column":36},"end":{"line":681,"column":68}},"361":{"start":{"line":688,"column":0},"end":{"line":694,"column":2}},"362":{"start":{"line":689,"column":16},"end":{"line":689,"column":31}},"363":{"start":{"line":690,"column":17},"end":{"line":690,"column":21}},"364":{"start":{"line":691,"column":15},"end":{"line":691,"column":38}},"365":{"start":{"line":692,"column":4},"end":{"line":692,"column":38}},"366":{"start":{"line":693,"column":4},"end":{"line":693,"column":60}}},"fnMap":{"0":{"name":"BlockPyServer","decl":{"start":{"line":24,"column":16},"end":{"line":24,"column":29}},"loc":{"start":{"line":24,"column":36},"end":{"line":56,"column":1}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":34},"end":{"line":62,"column":35}},"loc":{"start":{"line":62,"column":54},"end":{"line":82,"column":1}},"line":62},"2":{"name":"(anonymous_2)","decl":{"start":{"line":88,"column":38},"end":{"line":88,"column":39}},"loc":{"start":{"line":88,"column":50},"end":{"line":112,"column":1}},"line":88},"3":{"name":"(anonymous_3)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":47},"end":{"line":99,"column":5}},"line":94},"4":{"name":"(anonymous_4)","decl":{"start":{"line":101,"column":36},"end":{"line":101,"column":37}},"loc":{"start":{"line":101,"column":56},"end":{"line":111,"column":5}},"line":101},"5":{"name":"pushAnyQueued","decl":{"start":{"line":102,"column":18},"end":{"line":102,"column":31}},"loc":{"start":{"line":102,"column":42},"end":{"line":110,"column":9}},"line":102},"6":{"name":"(anonymous_6)","decl":{"start":{"line":114,"column":49},"end":{"line":114,"column":50}},"loc":{"start":{"line":114,"column":76},"end":{"line":118,"column":1}},"line":114},"7":{"name":"(anonymous_7)","decl":{"start":{"line":115,"column":20},"end":{"line":115,"column":21}},"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"line":116},"8":{"name":"(anonymous_8)","decl":{"start":{"line":123,"column":46},"end":{"line":123,"column":47}},"loc":{"start":{"line":123,"column":58},"end":{"line":134,"column":1}},"line":123},"9":{"name":"(anonymous_9)","decl":{"start":{"line":136,"column":42},"end":{"line":136,"column":43}},"loc":{"start":{"line":136,"column":53},"end":{"line":145,"column":1}},"line":136},"10":{"name":"(anonymous_10)","decl":{"start":{"line":137,"column":20},"end":{"line":137,"column":21}},"loc":{"start":{"line":137,"column":26},"end":{"line":139,"column":5}},"line":137},"11":{"name":"(anonymous_11)","decl":{"start":{"line":140,"column":21},"end":{"line":140,"column":22}},"loc":{"start":{"line":140,"column":27},"end":{"line":142,"column":5}},"line":140},"12":{"name":"(anonymous_12)","decl":{"start":{"line":156,"column":48},"end":{"line":156,"column":49}},"loc":{"start":{"line":156,"column":60},"end":{"line":158,"column":1}},"line":156},"13":{"name":"(anonymous_13)","decl":{"start":{"line":160,"column":42},"end":{"line":160,"column":43}},"loc":{"start":{"line":160,"column":68},"end":{"line":172,"column":1}},"line":160},"14":{"name":"(anonymous_14)","decl":{"start":{"line":178,"column":43},"end":{"line":178,"column":44}},"loc":{"start":{"line":178,"column":55},"end":{"line":199,"column":1}},"line":178},"15":{"name":"(anonymous_15)","decl":{"start":{"line":207,"column":36},"end":{"line":207,"column":37}},"loc":{"start":{"line":207,"column":73},"end":{"line":212,"column":1}},"line":207},"16":{"name":"(anonymous_16)","decl":{"start":{"line":218,"column":38},"end":{"line":218,"column":39}},"loc":{"start":{"line":218,"column":57},"end":{"line":238,"column":1}},"line":218},"17":{"name":"(anonymous_17)","decl":{"start":{"line":243,"column":38},"end":{"line":243,"column":39}},"loc":{"start":{"line":243,"column":50},"end":{"line":248,"column":1}},"line":243},"18":{"name":"(anonymous_18)","decl":{"start":{"line":250,"column":39},"end":{"line":250,"column":40}},"loc":{"start":{"line":250,"column":62},"end":{"line":264,"column":1}},"line":250},"19":{"name":"(anonymous_19)","decl":{"start":{"line":266,"column":39},"end":{"line":266,"column":40}},"loc":{"start":{"line":266,"column":62},"end":{"line":273,"column":1}},"line":266},"20":{"name":"(anonymous_20)","decl":{"start":{"line":276,"column":37},"end":{"line":276,"column":38}},"loc":{"start":{"line":276,"column":80},"end":{"line":308,"column":1}},"line":276},"21":{"name":"(anonymous_21)","decl":{"start":{"line":278,"column":22},"end":{"line":278,"column":23}},"loc":{"start":{"line":278,"column":28},"end":{"line":302,"column":5}},"line":278},"22":{"name":"(anonymous_22)","decl":{"start":{"line":282,"column":18},"end":{"line":282,"column":19}},"loc":{"start":{"line":282,"column":32},"end":{"line":296,"column":13}},"line":282},"23":{"name":"(anonymous_23)","decl":{"start":{"line":298,"column":18},"end":{"line":298,"column":19}},"loc":{"start":{"line":298,"column":41},"end":{"line":301,"column":13}},"line":298},"24":{"name":"(anonymous_24)","decl":{"start":{"line":321,"column":43},"end":{"line":321,"column":44}},"loc":{"start":{"line":321,"column":117},"end":{"line":369,"column":1}},"line":321},"25":{"name":"(anonymous_25)","decl":{"start":{"line":323,"column":18},"end":{"line":323,"column":19}},"loc":{"start":{"line":323,"column":24},"end":{"line":362,"column":5}},"line":323},"26":{"name":"(anonymous_26)","decl":{"start":{"line":329,"column":18},"end":{"line":329,"column":19}},"loc":{"start":{"line":329,"column":32},"end":{"line":352,"column":13}},"line":329},"27":{"name":"(anonymous_27)","decl":{"start":{"line":353,"column":18},"end":{"line":353,"column":19}},"loc":{"start":{"line":353,"column":41},"end":{"line":360,"column":13}},"line":353},"28":{"name":"(anonymous_28)","decl":{"start":{"line":371,"column":40},"end":{"line":371,"column":41}},"loc":{"start":{"line":371,"column":112},"end":{"line":400,"column":1}},"line":371},"29":{"name":"(anonymous_29)","decl":{"start":{"line":379,"column":14},"end":{"line":379,"column":15}},"loc":{"start":{"line":379,"column":28},"end":{"line":384,"column":9}},"line":379},"30":{"name":"(anonymous_30)","decl":{"start":{"line":385,"column":14},"end":{"line":385,"column":15}},"loc":{"start":{"line":385,"column":46},"end":{"line":399,"column":9}},"line":385},"31":{"name":"(anonymous_31)","decl":{"start":{"line":393,"column":27},"end":{"line":393,"column":28}},"loc":{"start":{"line":393,"column":33},"end":{"line":397,"column":17}},"line":393},"32":{"name":"(anonymous_32)","decl":{"start":{"line":403,"column":41},"end":{"line":403,"column":42}},"loc":{"start":{"line":403,"column":66},"end":{"line":424,"column":1}},"line":403},"33":{"name":"(anonymous_33)","decl":{"start":{"line":409,"column":27},"end":{"line":409,"column":28}},"loc":{"start":{"line":409,"column":41},"end":{"line":416,"column":28}},"line":409},"34":{"name":"(anonymous_34)","decl":{"start":{"line":417,"column":27},"end":{"line":417,"column":28}},"loc":{"start":{"line":417,"column":59},"end":{"line":420,"column":28}},"line":417},"35":{"name":"(anonymous_35)","decl":{"start":{"line":426,"column":41},"end":{"line":426,"column":42}},"loc":{"start":{"line":426,"column":53},"end":{"line":448,"column":1}},"line":426},"36":{"name":"(anonymous_36)","decl":{"start":{"line":441,"column":27},"end":{"line":441,"column":28}},"loc":{"start":{"line":441,"column":59},"end":{"line":444,"column":28}},"line":441},"37":{"name":"(anonymous_37)","decl":{"start":{"line":450,"column":38},"end":{"line":450,"column":39}},"loc":{"start":{"line":450,"column":58},"end":{"line":460,"column":1}},"line":450},"38":{"name":"(anonymous_38)","decl":{"start":{"line":455,"column":27},"end":{"line":455,"column":28}},"loc":{"start":{"line":455,"column":59},"end":{"line":458,"column":28}},"line":455},"39":{"name":"(anonymous_39)","decl":{"start":{"line":462,"column":44},"end":{"line":462,"column":45}},"loc":{"start":{"line":462,"column":64},"end":{"line":472,"column":1}},"line":462},"40":{"name":"(anonymous_40)","decl":{"start":{"line":467,"column":27},"end":{"line":467,"column":28}},"loc":{"start":{"line":467,"column":59},"end":{"line":470,"column":28}},"line":467},"41":{"name":"(anonymous_41)","decl":{"start":{"line":474,"column":37},"end":{"line":474,"column":38}},"loc":{"start":{"line":474,"column":120},"end":{"line":499,"column":1}},"line":474},"42":{"name":"(anonymous_42)","decl":{"start":{"line":485,"column":45},"end":{"line":485,"column":46}},"loc":{"start":{"line":485,"column":55},"end":{"line":485,"column":72}},"line":485},"43":{"name":"(anonymous_43)","decl":{"start":{"line":488,"column":34},"end":{"line":488,"column":35}},"loc":{"start":{"line":488,"column":66},"end":{"line":495,"column":35}},"line":488},"44":{"name":"(anonymous_44)","decl":{"start":{"line":501,"column":39},"end":{"line":501,"column":40}},"loc":{"start":{"line":501,"column":91},"end":{"line":518,"column":1}},"line":501},"45":{"name":"(anonymous_45)","decl":{"start":{"line":508,"column":45},"end":{"line":508,"column":46}},"loc":{"start":{"line":508,"column":55},"end":{"line":508,"column":72}},"line":508},"46":{"name":"(anonymous_46)","decl":{"start":{"line":511,"column":34},"end":{"line":511,"column":35}},"loc":{"start":{"line":511,"column":66},"end":{"line":514,"column":35}},"line":511},"47":{"name":"(anonymous_47)","decl":{"start":{"line":520,"column":37},"end":{"line":520,"column":38}},"loc":{"start":{"line":520,"column":107},"end":{"line":538,"column":1}},"line":520},"48":{"name":"(anonymous_48)","decl":{"start":{"line":528,"column":45},"end":{"line":528,"column":46}},"loc":{"start":{"line":528,"column":55},"end":{"line":528,"column":72}},"line":528},"49":{"name":"(anonymous_49)","decl":{"start":{"line":531,"column":34},"end":{"line":531,"column":35}},"loc":{"start":{"line":531,"column":66},"end":{"line":534,"column":35}},"line":531},"50":{"name":"(anonymous_50)","decl":{"start":{"line":540,"column":35},"end":{"line":540,"column":36}},"loc":{"start":{"line":540,"column":94},"end":{"line":559,"column":1}},"line":540},"51":{"name":"(anonymous_51)","decl":{"start":{"line":554,"column":45},"end":{"line":554,"column":46}},"loc":{"start":{"line":554,"column":51},"end":{"line":555,"column":9}},"line":554},"52":{"name":"(anonymous_52)","decl":{"start":{"line":561,"column":36},"end":{"line":561,"column":37}},"loc":{"start":{"line":561,"column":64},"end":{"line":576,"column":1}},"line":561},"53":{"name":"(anonymous_53)","decl":{"start":{"line":578,"column":49},"end":{"line":578,"column":50}},"loc":{"start":{"line":578,"column":69},"end":{"line":597,"column":1}},"line":578},"54":{"name":"(anonymous_54)","decl":{"start":{"line":586,"column":31},"end":{"line":586,"column":32}},"loc":{"start":{"line":586,"column":41},"end":{"line":590,"column":9}},"line":586},"55":{"name":"(anonymous_55)","decl":{"start":{"line":592,"column":27},"end":{"line":592,"column":28}},"loc":{"start":{"line":592,"column":59},"end":{"line":595,"column":28}},"line":592},"56":{"name":"(anonymous_56)","decl":{"start":{"line":604,"column":35},"end":{"line":604,"column":36}},"loc":{"start":{"line":604,"column":86},"end":{"line":628,"column":1}},"line":604},"57":{"name":"(anonymous_57)","decl":{"start":{"line":612,"column":27},"end":{"line":612,"column":28}},"loc":{"start":{"line":612,"column":47},"end":{"line":619,"column":28}},"line":612},"58":{"name":"(anonymous_58)","decl":{"start":{"line":620,"column":27},"end":{"line":620,"column":28}},"loc":{"start":{"line":620,"column":65},"end":{"line":623,"column":28}},"line":620},"59":{"name":"(anonymous_59)","decl":{"start":{"line":630,"column":35},"end":{"line":630,"column":36}},"loc":{"start":{"line":630,"column":72},"end":{"line":648,"column":1}},"line":630},"60":{"name":"(anonymous_60)","decl":{"start":{"line":650,"column":44},"end":{"line":650,"column":45}},"loc":{"start":{"line":650,"column":64},"end":{"line":654,"column":1}},"line":650},"61":{"name":"(anonymous_61)","decl":{"start":{"line":656,"column":43},"end":{"line":656,"column":44}},"loc":{"start":{"line":656,"column":98},"end":{"line":686,"column":1}},"line":656},"62":{"name":"(anonymous_62)","decl":{"start":{"line":668,"column":74},"end":{"line":668,"column":75}},"loc":{"start":{"line":668,"column":92},"end":{"line":684,"column":9}},"line":668},"63":{"name":"(anonymous_63)","decl":{"start":{"line":674,"column":28},"end":{"line":674,"column":29}},"loc":{"start":{"line":674,"column":42},"end":{"line":683,"column":29}},"line":674},"64":{"name":"(anonymous_64)","decl":{"start":{"line":688,"column":38},"end":{"line":688,"column":39}},"loc":{"start":{"line":688,"column":61},"end":{"line":694,"column":1}},"line":688}},"branchMap":{"0":{"loc":{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},{"start":{},"end":{}}],"line":63},"1":{"loc":{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},"type":"if","locations":[{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},{"start":{"line":78,"column":15},"end":{"line":80,"column":9}}],"line":64},"2":{"loc":{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},"type":"if","locations":[{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},{"start":{},"end":{}}],"line":66},"3":{"loc":{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},"type":"if","locations":[{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},{"start":{"line":73,"column":23},"end":{"line":75,"column":17}}],"line":71},"4":{"loc":{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},{"start":{},"end":{}}],"line":89},"5":{"loc":{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},"type":"if","locations":[{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},{"start":{},"end":{}}],"line":95},"6":{"loc":{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},"type":"if","locations":[{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},{"start":{},"end":{}}],"line":103},"7":{"loc":{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},"type":"if","locations":[{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},{"start":{},"end":{}}],"line":104},"8":{"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"type":"cond-expr","locations":[{"start":{"line":116,"column":45},"end":{"line":116,"column":78}},{"start":{"line":116,"column":81},"end":{"line":116,"column":86}}],"line":116},"9":{"loc":{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},"type":"if","locations":[{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},{"start":{},"end":{}}],"line":161},"10":{"loc":{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},{"start":{},"end":{}}],"line":165},"11":{"loc":{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},"type":"if","locations":[{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},{"start":{},"end":{}}],"line":166},"12":{"loc":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},{"start":{},"end":{}}],"line":208},"13":{"loc":{"start":{"line":210,"column":53},"end":{"line":210,"column":66}},"type":"binary-expr","locations":[{"start":{"line":210,"column":53},"end":{"line":210,"column":60}},{"start":{"line":210,"column":64},"end":{"line":210,"column":66}}],"line":210},"14":{"loc":{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},"type":"if","locations":[{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},{"start":{},"end":{}}],"line":220},"15":{"loc":{"start":{"line":224,"column":4},"end":{"line":237,"column":5}},"type":"switch","locations":[{"start":{"line":225,"column":8},"end":{"line":227,"column":18}},{"start":{"line":228,"column":8},"end":{"line":230,"column":18}},{"start":{"line":231,"column":8},"end":{"line":233,"column":18}},{"start":{"line":234,"column":8},"end":{"line":236,"column":18}}],"line":224},"16":{"loc":{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},"type":"if","locations":[{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},{"start":{},"end":{}}],"line":245},"17":{"loc":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"type":"if","locations":[{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},{"start":{},"end":{}}],"line":254},"18":{"loc":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"type":"if","locations":[{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},{"start":{},"end":{}}],"line":260},"19":{"loc":{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},"type":"if","locations":[{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},{"start":{},"end":{}}],"line":269},"20":{"loc":{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},"type":"if","locations":[{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},{"start":{"line":286,"column":23},"end":{"line":289,"column":17}}],"line":284},"21":{"loc":{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},"type":"if","locations":[{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},{"start":{},"end":{}}],"line":290},"22":{"loc":{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},"type":"if","locations":[{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},{"start":{},"end":{}}],"line":293},"23":{"loc":{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},"type":"if","locations":[{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},{"start":{"line":305,"column":11},"end":{"line":307,"column":5}}],"line":303},"24":{"loc":{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},"type":"if","locations":[{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},{"start":{"line":338,"column":23},"end":{"line":351,"column":17}}],"line":330},"25":{"loc":{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},"type":"if","locations":[{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},{"start":{},"end":{}}],"line":334},"26":{"loc":{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},"type":"if","locations":[{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},{"start":{},"end":{}}],"line":341},"27":{"loc":{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},"type":"if","locations":[{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},{"start":{},"end":{}}],"line":344},"28":{"loc":{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},"type":"if","locations":[{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},{"start":{},"end":{}}],"line":347},"29":{"loc":{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},"type":"if","locations":[{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},{"start":{},"end":{}}],"line":357},"30":{"loc":{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},"type":"if","locations":[{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},{"start":{"line":366,"column":11},"end":{"line":368,"column":5}}],"line":364},"31":{"loc":{"start":{"line":371,"column":94},"end":{"line":371,"column":110}},"type":"default-arg","locations":[{"start":{"line":371,"column":108},"end":{"line":371,"column":110}}],"line":371},"32":{"loc":{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},"type":"if","locations":[{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},{"start":{"line":392,"column":19},"end":{"line":398,"column":13}}],"line":386},"33":{"loc":{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},"type":"if","locations":[{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},{"start":{},"end":{}}],"line":389},"34":{"loc":{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},"type":"if","locations":[{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},{"start":{"line":421,"column":11},"end":{"line":423,"column":5}}],"line":405},"35":{"loc":{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},"type":"if","locations":[{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},{"start":{"line":412,"column":38},"end":{"line":415,"column":32}}],"line":410},"36":{"loc":{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},"type":"if","locations":[{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},{"start":{"line":445,"column":11},"end":{"line":447,"column":5}}],"line":428},"37":{"loc":{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},"type":"if","locations":[{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},{"start":{},"end":{}}],"line":451},"38":{"loc":{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},"type":"if","locations":[{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},{"start":{},"end":{}}],"line":463},"39":{"loc":{"start":{"line":474,"column":99},"end":{"line":474,"column":118}},"type":"default-arg","locations":[{"start":{"line":474,"column":113},"end":{"line":474,"column":118}}],"line":474},"40":{"loc":{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},"type":"if","locations":[{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},{"start":{"line":496,"column":11},"end":{"line":498,"column":5}}],"line":476},"41":{"loc":{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},"type":"if","locations":[{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},{"start":{},"end":{}}],"line":482},"42":{"loc":{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},"type":"if","locations":[{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},{"start":{"line":491,"column":45},"end":{"line":493,"column":39}}],"line":489},"43":{"loc":{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},"type":"if","locations":[{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},{"start":{"line":515,"column":11},"end":{"line":517,"column":5}}],"line":503},"44":{"loc":{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},"type":"if","locations":[{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},{"start":{"line":535,"column":11},"end":{"line":537,"column":5}}],"line":522},"45":{"loc":{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},"type":"if","locations":[{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},{"start":{},"end":{}}],"line":541},"46":{"loc":{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},"type":"if","locations":[{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},{"start":{"line":556,"column":11},"end":{"line":558,"column":5}}],"line":545},"47":{"loc":{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},"type":"if","locations":[{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},{"start":{},"end":{}}],"line":562},"48":{"loc":{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},"type":"if","locations":[{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},{"start":{"line":573,"column":11},"end":{"line":575,"column":5}}],"line":566},"49":{"loc":{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},"type":"if","locations":[{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},{"start":{},"end":{}}],"line":579},"50":{"loc":{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},"type":"if","locations":[{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},{"start":{},"end":{}}],"line":583},"51":{"loc":{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},"type":"if","locations":[{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},{"start":{},"end":{}}],"line":587},"52":{"loc":{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},"type":"if","locations":[{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},{"start":{"line":624,"column":11},"end":{"line":627,"column":5}}],"line":607},"53":{"loc":{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},"type":"if","locations":[{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},{"start":{"line":615,"column":38},"end":{"line":618,"column":32}}],"line":613},"54":{"loc":{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},"type":"if","locations":[{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},{"start":{},"end":{}}],"line":631},"55":{"loc":{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},"type":"if","locations":[{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},{"start":{},"end":{}}],"line":635},"56":{"loc":{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},"type":"if","locations":[{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},{"start":{"line":645,"column":11},"end":{"line":647,"column":5}}],"line":639},"57":{"loc":{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},"type":"if","locations":[{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},{"start":{},"end":{}}],"line":651},"58":{"loc":{"start":{"line":651,"column":8},"end":{"line":651,"column":46}},"type":"binary-expr","locations":[{"start":{"line":651,"column":8},"end":{"line":651,"column":25}},{"start":{"line":651,"column":29},"end":{"line":651,"column":46}}],"line":651},"59":{"loc":{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},"type":"if","locations":[{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},{"start":{},"end":{}}],"line":657},"60":{"loc":{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},"type":"if","locations":[{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},{"start":{},"end":{}}],"line":662},"61":{"loc":{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},"type":"if","locations":[{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},{"start":{},"end":{}}],"line":670},"62":{"loc":{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},"type":"if","locations":[{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},{"start":{"line":677,"column":39},"end":{"line":679,"column":33}}],"line":675},"63":{"loc":{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},"type":"if","locations":[{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},{"start":{},"end":{}}],"line":680},"64":{"loc":{"start":{"line":680,"column":36},"end":{"line":680,"column":74}},"type":"binary-expr","locations":[{"start":{"line":680,"column":36},"end":{"line":680,"column":51}},{"start":{"line":680,"column":55},"end":{"line":680,"column":62}},{"start":{"line":680,"column":66},"end":{"line":680,"column":74}}],"line":680}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":1,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":1,"43":0,"44":0,"45":0,"46":1,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":1,"58":0,"59":0,"60":0,"61":0,"62":1,"63":1,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":1,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":1,"83":0,"84":0,"85":0,"86":1,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":1,"101":0,"102":0,"103":0,"104":1,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":1,"115":0,"116":0,"117":0,"118":0,"119":0,"120":1,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":1,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":1,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":1,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":1,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":1,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":1,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":1,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":1,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":1,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":1,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":1,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":1,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":1,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":1,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":1,"338":0,"339":0,"340":1,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":1,"362":0,"363":0,"364":0,"365":0,"366":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6d379d24c4d4b581de45a90a3bdf297a4ea327f9"} +,"/home/runner/work/blockpy/blockpy/src/storage.js": {"path":"/home/runner/work/blockpy/blockpy/src/storage.js","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":15,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":37}},"2":{"start":{"line":4,"column":14},"end":{"line":4,"column":41}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":40}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":38}},"5":{"start":{"line":8,"column":4},"end":{"line":14,"column":6}},"6":{"start":{"line":10,"column":42},"end":{"line":10,"column":78}},"7":{"start":{"line":11,"column":37},"end":{"line":11,"column":98}},"8":{"start":{"line":12,"column":37},"end":{"line":12,"column":66}},"9":{"start":{"line":13,"column":35},"end":{"line":13,"column":58}},"10":{"start":{"line":29,"column":4},"end":{"line":29,"column":31}},"11":{"start":{"line":38,"column":0},"end":{"line":41,"column":2}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":70}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":76}},"14":{"start":{"line":48,"column":0},"end":{"line":51,"column":2}},"15":{"start":{"line":49,"column":4},"end":{"line":49,"column":66}},"16":{"start":{"line":50,"column":4},"end":{"line":50,"column":70}},"17":{"start":{"line":58,"column":0},"end":{"line":60,"column":2}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":70}},"19":{"start":{"line":68,"column":0},"end":{"line":70,"column":2}},"20":{"start":{"line":69,"column":4},"end":{"line":69,"column":84}},"21":{"start":{"line":80,"column":0},"end":{"line":87,"column":2}},"22":{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},"23":{"start":{"line":82,"column":8},"end":{"line":82,"column":29}},"24":{"start":{"line":84,"column":8},"end":{"line":84,"column":36}},"25":{"start":{"line":85,"column":8},"end":{"line":85,"column":28}},"26":{"start":{"line":94,"column":0},"end":{"line":96,"column":2}},"27":{"start":{"line":95,"column":4},"end":{"line":95,"column":79}},"28":{"start":{"line":106,"column":0},"end":{"line":109,"column":2}},"29":{"start":{"line":107,"column":22},"end":{"line":107,"column":84}},"30":{"start":{"line":108,"column":4},"end":{"line":108,"column":45}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"loc":{"start":{"line":10,"column":40},"end":{"line":10,"column":80}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":22},"end":{"line":11,"column":23}},"loc":{"start":{"line":11,"column":35},"end":{"line":11,"column":100}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":22},"end":{"line":12,"column":23}},"loc":{"start":{"line":12,"column":35},"end":{"line":12,"column":68}},"line":12},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":22},"end":{"line":13,"column":23}},"loc":{"start":{"line":13,"column":33},"end":{"line":13,"column":60}},"line":13},"4":{"name":"LocalStorageWrapper","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":35}},"loc":{"start":{"line":28,"column":47},"end":{"line":30,"column":1}},"line":28},"5":{"name":"(anonymous_5)","decl":{"start":{"line":38,"column":37},"end":{"line":38,"column":38}},"loc":{"start":{"line":38,"column":58},"end":{"line":41,"column":1}},"line":38},"6":{"name":"(anonymous_6)","decl":{"start":{"line":48,"column":39},"end":{"line":48,"column":40}},"loc":{"start":{"line":48,"column":53},"end":{"line":51,"column":1}},"line":48},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":36},"end":{"line":58,"column":37}},"loc":{"start":{"line":58,"column":50},"end":{"line":60,"column":1}},"line":58},"8":{"name":"(anonymous_8)","decl":{"start":{"line":68,"column":40},"end":{"line":68,"column":41}},"loc":{"start":{"line":68,"column":54},"end":{"line":70,"column":1}},"line":68},"9":{"name":"(anonymous_9)","decl":{"start":{"line":80,"column":43},"end":{"line":80,"column":44}},"loc":{"start":{"line":80,"column":71},"end":{"line":87,"column":1}},"line":80},"10":{"name":"(anonymous_10)","decl":{"start":{"line":94,"column":36},"end":{"line":94,"column":37}},"loc":{"start":{"line":94,"column":50},"end":{"line":96,"column":1}},"line":94},"11":{"name":"(anonymous_11)","decl":{"start":{"line":106,"column":39},"end":{"line":106,"column":40}},"loc":{"start":{"line":106,"column":66},"end":{"line":109,"column":1}},"line":106}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":44},"end":{"line":11,"column":97}},"type":"cond-expr","locations":[{"start":{"line":11,"column":76},"end":{"line":11,"column":90}},{"start":{"line":11,"column":93},"end":{"line":11,"column":97}}],"line":11},"1":{"loc":{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},{"start":{"line":83,"column":11},"end":{"line":86,"column":5}}],"line":81}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":6,"11":3,"12":2,"13":2,"14":3,"15":1,"16":1,"17":3,"18":1,"19":3,"20":0,"21":3,"22":1,"23":0,"24":1,"25":1,"26":3,"27":2,"28":3,"29":0,"30":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":6,"5":2,"6":1,"7":1,"8":0,"9":1,"10":2,"11":0},"b":{"0":[0,0],"1":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e8e8e1decac7103f6bd06f4290c25df4182674f7"} +,"/home/runner/work/blockpy/blockpy/src/toolbar.js": {"path":"/home/runner/work/blockpy/blockpy/src/toolbar.js","statementMap":{"0":{"start":{"line":11,"column":4},"end":{"line":11,"column":21}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":19}},"2":{"start":{"line":15,"column":4},"end":{"line":15,"column":19}},"3":{"start":{"line":16,"column":4},"end":{"line":16,"column":70}},"4":{"start":{"line":17,"column":4},"end":{"line":17,"column":82}},"5":{"start":{"line":20,"column":4},"end":{"line":20,"column":27}},"6":{"start":{"line":30,"column":0},"end":{"line":164,"column":2}},"7":{"start":{"line":31,"column":15},"end":{"line":31,"column":24}},"8":{"start":{"line":32,"column":4},"end":{"line":46,"column":7}},"9":{"start":{"line":34,"column":21},"end":{"line":34,"column":25}},"10":{"start":{"line":35,"column":8},"end":{"line":35,"column":41}},"11":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"12":{"start":{"line":40,"column":8},"end":{"line":40,"column":40}},"13":{"start":{"line":41,"column":8},"end":{"line":44,"column":37}},"14":{"start":{"line":47,"column":4},"end":{"line":50,"column":7}},"15":{"start":{"line":48,"column":8},"end":{"line":48,"column":58}},"16":{"start":{"line":49,"column":8},"end":{"line":49,"column":43}},"17":{"start":{"line":51,"column":4},"end":{"line":58,"column":7}},"18":{"start":{"line":52,"column":8},"end":{"line":52,"column":80}},"19":{"start":{"line":54,"column":8},"end":{"line":54,"column":59}},"20":{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},"21":{"start":{"line":56,"column":12},"end":{"line":56,"column":53}},"22":{"start":{"line":59,"column":4},"end":{"line":67,"column":7}},"23":{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},"24":{"start":{"line":61,"column":12},"end":{"line":61,"column":64}},"25":{"start":{"line":62,"column":12},"end":{"line":62,"column":49}},"26":{"start":{"line":64,"column":12},"end":{"line":64,"column":35}},"27":{"start":{"line":65,"column":12},"end":{"line":65,"column":25}},"28":{"start":{"line":72,"column":4},"end":{"line":80,"column":7}},"29":{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},"30":{"start":{"line":74,"column":12},"end":{"line":74,"column":48}},"31":{"start":{"line":75,"column":12},"end":{"line":75,"column":63}},"32":{"start":{"line":77,"column":12},"end":{"line":77,"column":35}},"33":{"start":{"line":78,"column":12},"end":{"line":78,"column":25}},"34":{"start":{"line":81,"column":4},"end":{"line":84,"column":7}},"35":{"start":{"line":82,"column":8},"end":{"line":82,"column":44}},"36":{"start":{"line":83,"column":8},"end":{"line":83,"column":60}},"37":{"start":{"line":85,"column":4},"end":{"line":88,"column":7}},"38":{"start":{"line":86,"column":8},"end":{"line":86,"column":45}},"39":{"start":{"line":87,"column":8},"end":{"line":87,"column":61}},"40":{"start":{"line":89,"column":27},"end":{"line":89,"column":96}},"41":{"start":{"line":90,"column":4},"end":{"line":96,"column":7}},"42":{"start":{"line":91,"column":8},"end":{"line":91,"column":66}},"43":{"start":{"line":92,"column":8},"end":{"line":94,"column":11}},"44":{"start":{"line":95,"column":8},"end":{"line":95,"column":64}},"45":{"start":{"line":97,"column":4},"end":{"line":100,"column":7}},"46":{"start":{"line":98,"column":8},"end":{"line":98,"column":45}},"47":{"start":{"line":99,"column":8},"end":{"line":99,"column":61}},"48":{"start":{"line":161,"column":4},"end":{"line":163,"column":7}},"49":{"start":{"line":162,"column":8},"end":{"line":162,"column":63}}},"fnMap":{"0":{"name":"BlockPyToolbar","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":23}},"loc":{"start":{"line":10,"column":35},"end":{"line":21,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":43},"end":{"line":30,"column":44}},"loc":{"start":{"line":30,"column":54},"end":{"line":164,"column":1}},"line":30},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":40},"end":{"line":32,"column":41}},"loc":{"start":{"line":32,"column":52},"end":{"line":46,"column":5}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":47,"column":34},"end":{"line":47,"column":35}},"loc":{"start":{"line":47,"column":45},"end":{"line":50,"column":5}},"line":47},"4":{"name":"(anonymous_4)","decl":{"start":{"line":51,"column":50},"end":{"line":51,"column":51}},"loc":{"start":{"line":51,"column":61},"end":{"line":58,"column":5}},"line":51},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":52},"end":{"line":59,"column":53}},"loc":{"start":{"line":59,"column":68},"end":{"line":67,"column":5}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":51},"end":{"line":72,"column":52}},"loc":{"start":{"line":72,"column":67},"end":{"line":80,"column":5}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":81,"column":51},"end":{"line":81,"column":52}},"loc":{"start":{"line":81,"column":62},"end":{"line":84,"column":5}},"line":81},"8":{"name":"(anonymous_8)","decl":{"start":{"line":85,"column":52},"end":{"line":85,"column":53}},"loc":{"start":{"line":85,"column":63},"end":{"line":88,"column":5}},"line":85},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":55},"end":{"line":90,"column":56}},"loc":{"start":{"line":90,"column":66},"end":{"line":96,"column":5}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":97,"column":52},"end":{"line":97,"column":53}},"loc":{"start":{"line":97,"column":63},"end":{"line":100,"column":5}},"line":97},"11":{"name":"(anonymous_11)","decl":{"start":{"line":161,"column":66},"end":{"line":161,"column":67}},"loc":{"start":{"line":161,"column":77},"end":{"line":163,"column":5}},"line":161}},"branchMap":{"0":{"loc":{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},{"start":{},"end":{}}],"line":55},"1":{"loc":{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},{"start":{"line":63,"column":15},"end":{"line":66,"column":9}}],"line":60},"2":{"loc":{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},{"start":{"line":76,"column":15},"end":{"line":79,"column":9}}],"line":73}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}} +,"/home/runner/work/blockpy/blockpy/src/trace.js": {"path":"/home/runner/work/blockpy/blockpy/src/trace.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":71,"column":1}},"1":{"start":{"line":73,"column":32},"end":{"line":173,"column":1}},"2":{"start":{"line":178,"column":8},"end":{"line":178,"column":25}},"3":{"start":{"line":179,"column":8},"end":{"line":179,"column":23}},"4":{"start":{"line":181,"column":8},"end":{"line":182,"column":93}},"5":{"start":{"line":194,"column":21},"end":{"line":194,"column":23}},"6":{"start":{"line":195,"column":22},"end":{"line":195,"column":24}},"7":{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},"8":{"start":{"line":204,"column":12},"end":{"line":221,"column":13}},"9":{"start":{"line":205,"column":28},"end":{"line":205,"column":47}},"10":{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},"11":{"start":{"line":207,"column":20},"end":{"line":208,"column":46}},"12":{"start":{"line":210,"column":20},"end":{"line":214,"column":21}},"13":{"start":{"line":211,"column":24},"end":{"line":211,"column":74}},"14":{"start":{"line":213,"column":24},"end":{"line":213,"column":98}},"15":{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},"16":{"start":{"line":216,"column":24},"end":{"line":216,"column":44}},"17":{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},"18":{"start":{"line":218,"column":24},"end":{"line":218,"column":58}},"19":{"start":{"line":223,"column":8},"end":{"line":223,"column":58}},"20":{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},"21":{"start":{"line":234,"column":12},"end":{"line":237,"column":14}},"22":{"start":{"line":239,"column":8},"end":{"line":246,"column":9}},"23":{"start":{"line":241,"column":16},"end":{"line":245,"column":18}},"24":{"start":{"line":247,"column":8},"end":{"line":338,"column":9}},"25":{"start":{"line":249,"column":16},"end":{"line":255,"column":18}},"26":{"start":{"line":256,"column":36},"end":{"line":256,"column":48}},"27":{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},"28":{"start":{"line":259,"column":20},"end":{"line":262,"column":22}},"29":{"start":{"line":264,"column":20},"end":{"line":267,"column":22}},"30":{"start":{"line":270,"column":16},"end":{"line":273,"column":18}},"31":{"start":{"line":275,"column":16},"end":{"line":278,"column":18}},"32":{"start":{"line":280,"column":16},"end":{"line":283,"column":18}},"33":{"start":{"line":285,"column":16},"end":{"line":288,"column":18}},"34":{"start":{"line":290,"column":16},"end":{"line":293,"column":18}},"35":{"start":{"line":295,"column":16},"end":{"line":298,"column":18}},"36":{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},"37":{"start":{"line":301,"column":20},"end":{"line":305,"column":22}},"38":{"start":{"line":307,"column":20},"end":{"line":311,"column":22}},"39":{"start":{"line":314,"column":16},"end":{"line":317,"column":18}},"40":{"start":{"line":319,"column":16},"end":{"line":322,"column":18}},"41":{"start":{"line":324,"column":16},"end":{"line":327,"column":18}},"42":{"start":{"line":329,"column":16},"end":{"line":332,"column":18}},"43":{"start":{"line":334,"column":16},"end":{"line":337,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":27},"end":{"line":185,"column":5}},"line":177},"1":{"name":"(anonymous_1)","decl":{"start":{"line":193,"column":4},"end":{"line":193,"column":5}},"loc":{"start":{"line":193,"column":28},"end":{"line":224,"column":5}},"line":193},"2":{"name":"(anonymous_2)","decl":{"start":{"line":232,"column":4},"end":{"line":232,"column":5}},"loc":{"start":{"line":232,"column":51},"end":{"line":339,"column":5}},"line":232}},"branchMap":{"0":{"loc":{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},"type":"if","locations":[{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},{"start":{},"end":{}}],"line":197},"1":{"loc":{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},"type":"if","locations":[{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},{"start":{},"end":{}}],"line":206},"2":{"loc":{"start":{"line":206,"column":20},"end":{"line":206,"column":88}},"type":"binary-expr","locations":[{"start":{"line":206,"column":20},"end":{"line":206,"column":65}},{"start":{"line":206,"column":69},"end":{"line":206,"column":88}}],"line":206},"3":{"loc":{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},"type":"if","locations":[{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},{"start":{"line":217,"column":27},"end":{"line":219,"column":21}}],"line":215},"4":{"loc":{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},"type":"if","locations":[{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},{"start":{},"end":{}}],"line":217},"5":{"loc":{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},"type":"if","locations":[{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},{"start":{},"end":{}}],"line":233},"6":{"loc":{"start":{"line":239,"column":8},"end":{"line":246,"column":9}},"type":"switch","locations":[{"start":{"line":240,"column":12},"end":{"line":245,"column":18}}],"line":239},"7":{"loc":{"start":{"line":247,"column":8},"end":{"line":338,"column":9}},"type":"switch","locations":[{"start":{"line":248,"column":12},"end":{"line":255,"column":18}},{"start":{"line":256,"column":12},"end":{"line":256,"column":48}},{"start":{"line":257,"column":12},"end":{"line":268,"column":17}},{"start":{"line":269,"column":12},"end":{"line":273,"column":18}},{"start":{"line":274,"column":12},"end":{"line":278,"column":18}},{"start":{"line":279,"column":12},"end":{"line":283,"column":18}},{"start":{"line":284,"column":12},"end":{"line":288,"column":18}},{"start":{"line":289,"column":12},"end":{"line":293,"column":18}},{"start":{"line":294,"column":12},"end":{"line":298,"column":18}},{"start":{"line":299,"column":12},"end":{"line":312,"column":17}},{"start":{"line":313,"column":12},"end":{"line":317,"column":18}},{"start":{"line":318,"column":12},"end":{"line":322,"column":18}},{"start":{"line":323,"column":12},"end":{"line":327,"column":18}},{"start":{"line":328,"column":12},"end":{"line":332,"column":18}},{"start":{"line":333,"column":12},"end":{"line":337,"column":18}}],"line":247},"8":{"loc":{"start":{"line":252,"column":25},"end":{"line":254,"column":44}},"type":"cond-expr","locations":[{"start":{"line":253,"column":28},"end":{"line":253,"column":82}},{"start":{"line":254,"column":28},"end":{"line":254,"column":44}}],"line":252},"9":{"loc":{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},"type":"if","locations":[{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},{"start":{"line":263,"column":23},"end":{"line":268,"column":17}}],"line":258},"10":{"loc":{"start":{"line":258,"column":20},"end":{"line":258,"column":54}},"type":"binary-expr","locations":[{"start":{"line":258,"column":20},"end":{"line":258,"column":30}},{"start":{"line":258,"column":34},"end":{"line":258,"column":54}}],"line":258},"11":{"loc":{"start":{"line":281,"column":28},"end":{"line":281,"column":71}},"type":"cond-expr","locations":[{"start":{"line":281,"column":53},"end":{"line":281,"column":62}},{"start":{"line":281,"column":64},"end":{"line":281,"column":71}}],"line":281},"12":{"loc":{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},"type":"if","locations":[{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},{"start":{"line":306,"column":23},"end":{"line":312,"column":17}}],"line":300},"13":{"loc":{"start":{"line":320,"column":28},"end":{"line":320,"column":65}},"type":"cond-expr","locations":[{"start":{"line":320,"column":46},"end":{"line":320,"column":55}},{"start":{"line":320,"column":58},"end":{"line":320,"column":65}}],"line":320},"14":{"loc":{"start":{"line":331,"column":30},"end":{"line":331,"column":53}},"type":"cond-expr","locations":[{"start":{"line":331,"column":38},"end":{"line":331,"column":44}},{"start":{"line":331,"column":46},"end":{"line":331,"column":53}}],"line":331},"15":{"loc":{"start":{"line":335,"column":28},"end":{"line":335,"column":79}},"type":"cond-expr","locations":[{"start":{"line":335,"column":58},"end":{"line":335,"column":63}},{"start":{"line":335,"column":66},"end":{"line":335,"column":79}}],"line":335},"16":{"loc":{"start":{"line":336,"column":29},"end":{"line":336,"column":74}},"type":"cond-expr","locations":[{"start":{"line":336,"column":54},"end":{"line":336,"column":59}},{"start":{"line":336,"column":62},"end":{"line":336,"column":74}}],"line":336}},"s":{"0":4,"1":4,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0],"7":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ca2c9681521c516133f345d3c4f5537733fb0704"} +,"/home/runner/work/blockpy/blockpy/src/utilities.js": {"path":"/home/runner/work/blockpy/blockpy/src/utilities.js","statementMap":{"0":{"start":{"line":12,"column":19},"end":{"line":12,"column":29}},"1":{"start":{"line":13,"column":23},"end":{"line":13,"column":36}},"2":{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},"3":{"start":{"line":16,"column":8},"end":{"line":16,"column":19}},"4":{"start":{"line":19,"column":4},"end":{"line":23,"column":11}},"5":{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},"6":{"start":{"line":20,"column":33},"end":{"line":20,"column":44}},"7":{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},"8":{"start":{"line":21,"column":33},"end":{"line":21,"column":118}},"9":{"start":{"line":22,"column":8},"end":{"line":22,"column":30}},"10":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"11":{"start":{"line":45,"column":12},"end":{"line":45,"column":26}},"12":{"start":{"line":46,"column":4},"end":{"line":50,"column":5}},"13":{"start":{"line":46,"column":14},"end":{"line":46,"column":15}},"14":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"15":{"start":{"line":47,"column":18},"end":{"line":47,"column":21}},"16":{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},"17":{"start":{"line":48,"column":31},"end":{"line":48,"column":48}},"18":{"start":{"line":52,"column":4},"end":{"line":52,"column":13}},"19":{"start":{"line":69,"column":20},"end":{"line":71,"column":6}},"20":{"start":{"line":70,"column":8},"end":{"line":70,"column":48}},"21":{"start":{"line":72,"column":4},"end":{"line":72,"column":51}},"22":{"start":{"line":82,"column":16},"end":{"line":82,"column":100}},"23":{"start":{"line":85,"column":16},"end":{"line":85,"column":31}},"24":{"start":{"line":86,"column":4},"end":{"line":89,"column":5}},"25":{"start":{"line":87,"column":8},"end":{"line":87,"column":44}},"26":{"start":{"line":88,"column":8},"end":{"line":88,"column":34}},"27":{"start":{"line":91,"column":4},"end":{"line":91,"column":17}},"28":{"start":{"line":101,"column":4},"end":{"line":101,"column":43}},"29":{"start":{"line":110,"column":4},"end":{"line":110,"column":49}},"30":{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},"31":{"start":{"line":120,"column":8},"end":{"line":120,"column":18}},"32":{"start":{"line":122,"column":4},"end":{"line":122,"column":50}},"33":{"start":{"line":133,"column":4},"end":{"line":133,"column":53}},"34":{"start":{"line":144,"column":4},"end":{"line":148,"column":33}},"35":{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},"36":{"start":{"line":155,"column":4},"end":{"line":175,"column":6}},"37":{"start":{"line":156,"column":22},"end":{"line":156,"column":39}},"38":{"start":{"line":157,"column":20},"end":{"line":157,"column":41}},"39":{"start":{"line":158,"column":21},"end":{"line":158,"column":39}},"40":{"start":{"line":159,"column":21},"end":{"line":159,"column":45}},"41":{"start":{"line":160,"column":16},"end":{"line":160,"column":17}},"42":{"start":{"line":160,"column":23},"end":{"line":160,"column":24}},"43":{"start":{"line":161,"column":31},"end":{"line":161,"column":51}},"44":{"start":{"line":162,"column":8},"end":{"line":174,"column":9}},"45":{"start":{"line":162,"column":21},"end":{"line":162,"column":22}},"46":{"start":{"line":164,"column":24},"end":{"line":164,"column":33}},"47":{"start":{"line":165,"column":29},"end":{"line":165,"column":59}},"48":{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},"49":{"start":{"line":167,"column":16},"end":{"line":167,"column":22}},"50":{"start":{"line":169,"column":16},"end":{"line":169,"column":59}},"51":{"start":{"line":171,"column":12},"end":{"line":172,"column":42}},"52":{"start":{"line":173,"column":12},"end":{"line":173,"column":55}},"53":{"start":{"line":183,"column":4},"end":{"line":190,"column":5}},"54":{"start":{"line":183,"column":17},"end":{"line":183,"column":18}},"55":{"start":{"line":184,"column":22},"end":{"line":184,"column":31}},"56":{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},"57":{"start":{"line":186,"column":12},"end":{"line":186,"column":32}},"58":{"start":{"line":187,"column":12},"end":{"line":187,"column":33}},"59":{"start":{"line":188,"column":12},"end":{"line":188,"column":16}},"60":{"start":{"line":195,"column":4},"end":{"line":199,"column":5}},"61":{"start":{"line":195,"column":17},"end":{"line":195,"column":18}},"62":{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},"63":{"start":{"line":197,"column":12},"end":{"line":197,"column":32}},"64":{"start":{"line":200,"column":4},"end":{"line":200,"column":21}},"65":{"start":{"line":214,"column":4},"end":{"line":221,"column":40}},"66":{"start":{"line":227,"column":4},"end":{"line":227,"column":54}},"67":{"start":{"line":230,"column":32},"end":{"line":230,"column":55}},"68":{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},"69":{"start":{"line":242,"column":8},"end":{"line":242,"column":20}},"70":{"start":{"line":244,"column":18},"end":{"line":244,"column":53}},"71":{"start":{"line":245,"column":4},"end":{"line":260,"column":5}},"72":{"start":{"line":245,"column":15},"end":{"line":245,"column":16}},"73":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"74":{"start":{"line":251,"column":23},"end":{"line":251,"column":33}},"75":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"76":{"start":{"line":253,"column":16},"end":{"line":253,"column":37}},"77":{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},"78":{"start":{"line":256,"column":16},"end":{"line":256,"column":41}},"79":{"start":{"line":258,"column":12},"end":{"line":258,"column":24}},"80":{"start":{"line":261,"column":4},"end":{"line":261,"column":16}},"81":{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},"82":{"start":{"line":279,"column":8},"end":{"line":279,"column":19}},"83":{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},"84":{"start":{"line":282,"column":8},"end":{"line":282,"column":17}},"85":{"start":{"line":283,"column":8},"end":{"line":291,"column":9}},"86":{"start":{"line":285,"column":25},"end":{"line":285,"column":31}},"87":{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},"88":{"start":{"line":287,"column":16},"end":{"line":287,"column":49}},"89":{"start":{"line":289,"column":16},"end":{"line":289,"column":33}},"90":{"start":{"line":292,"column":8},"end":{"line":292,"column":40}},"91":{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},"92":{"start":{"line":294,"column":8},"end":{"line":294,"column":37}},"93":{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},"94":{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},"95":{"start":{"line":298,"column":12},"end":{"line":298,"column":21}},"96":{"start":{"line":299,"column":12},"end":{"line":304,"column":13}},"97":{"start":{"line":301,"column":16},"end":{"line":301,"column":44}},"98":{"start":{"line":303,"column":16},"end":{"line":303,"column":49}},"99":{"start":{"line":306,"column":12},"end":{"line":306,"column":44}},"100":{"start":{"line":308,"column":12},"end":{"line":308,"column":23}},"101":{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},"102":{"start":{"line":311,"column":8},"end":{"line":311,"column":39}},"103":{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},"104":{"start":{"line":313,"column":8},"end":{"line":313,"column":37}},"105":{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},"106":{"start":{"line":315,"column":8},"end":{"line":315,"column":40}},"107":{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},"108":{"start":{"line":317,"column":8},"end":{"line":317,"column":44}},"109":{"start":{"line":323,"column":18},"end":{"line":323,"column":28}},"110":{"start":{"line":324,"column":12},"end":{"line":324,"column":43}},"111":{"start":{"line":325,"column":12},"end":{"line":325,"column":30}},"112":{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},"113":{"start":{"line":327,"column":17},"end":{"line":327,"column":29}},"114":{"start":{"line":329,"column":12},"end":{"line":329,"column":16}},"115":{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},"116":{"start":{"line":331,"column":8},"end":{"line":331,"column":17}},"117":{"start":{"line":333,"column":4},"end":{"line":333,"column":27}},"118":{"start":{"line":336,"column":21},"end":{"line":336,"column":36}},"119":{"start":{"line":337,"column":22},"end":{"line":337,"column":43}},"120":{"start":{"line":338,"column":21},"end":{"line":338,"column":35}},"121":{"start":{"line":339,"column":23},"end":{"line":339,"column":39}},"122":{"start":{"line":340,"column":31},"end":{"line":340,"column":64}},"123":{"start":{"line":342,"column":50},"end":{"line":342,"column":61}},"124":{"start":{"line":343,"column":66},"end":{"line":343,"column":74}},"125":{"start":{"line":344,"column":84},"end":{"line":344,"column":94}},"126":{"start":{"line":345,"column":40},"end":{"line":345,"column":46}},"127":{"start":{"line":346,"column":36},"end":{"line":346,"column":46}},"128":{"start":{"line":347,"column":30},"end":{"line":347,"column":35}}},"fnMap":{"0":{"name":"arrayMove","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":25}},"loc":{"start":{"line":11,"column":51},"end":{"line":24,"column":1}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":22},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":44},"end":{"line":23,"column":5}},"line":19},"2":{"name":"arrayContains","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":22}},"loc":{"start":{"line":32,"column":41},"end":{"line":34,"column":1}},"line":32},"3":{"name":"arrayUnique","decl":{"start":{"line":44,"column":9},"end":{"line":44,"column":20}},"loc":{"start":{"line":44,"column":28},"end":{"line":53,"column":1}},"line":44},"4":{"name":"expandArray","decl":{"start":{"line":68,"column":9},"end":{"line":68,"column":20}},"loc":{"start":{"line":68,"column":51},"end":{"line":73,"column":1}},"line":68},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":33},"end":{"line":69,"column":34}},"loc":{"start":{"line":69,"column":48},"end":{"line":71,"column":5}},"line":69},"6":{"name":"cloneNode","decl":{"start":{"line":80,"column":9},"end":{"line":80,"column":18}},"loc":{"start":{"line":80,"column":25},"end":{"line":92,"column":1}},"line":80},"7":{"name":"indent","decl":{"start":{"line":100,"column":16},"end":{"line":100,"column":22}},"loc":{"start":{"line":100,"column":28},"end":{"line":102,"column":1}},"line":100},"8":{"name":"slug","decl":{"start":{"line":109,"column":16},"end":{"line":109,"column":20}},"loc":{"start":{"line":109,"column":26},"end":{"line":111,"column":1}},"line":109},"9":{"name":"capitalize","decl":{"start":{"line":118,"column":16},"end":{"line":118,"column":26}},"loc":{"start":{"line":118,"column":30},"end":{"line":123,"column":1}},"line":118},"10":{"name":"randomInteger","decl":{"start":{"line":132,"column":9},"end":{"line":132,"column":22}},"loc":{"start":{"line":132,"column":32},"end":{"line":134,"column":1}},"line":132},"11":{"name":"encodeHTML","decl":{"start":{"line":143,"column":16},"end":{"line":143,"column":26}},"loc":{"start":{"line":143,"column":32},"end":{"line":149,"column":1}},"line":143},"12":{"name":"(anonymous_12)","decl":{"start":{"line":155,"column":45},"end":{"line":155,"column":46}},"loc":{"start":{"line":155,"column":56},"end":{"line":175,"column":5}},"line":155},"13":{"name":"moveElements","decl":{"start":{"line":182,"column":9},"end":{"line":182,"column":21}},"loc":{"start":{"line":182,"column":49},"end":{"line":191,"column":1}},"line":182},"14":{"name":"firstDefinedValue","decl":{"start":{"line":194,"column":16},"end":{"line":194,"column":33}},"loc":{"start":{"line":194,"column":36},"end":{"line":201,"column":1}},"line":194},"15":{"name":"isSkBuiltin","decl":{"start":{"line":213,"column":9},"end":{"line":213,"column":20}},"loc":{"start":{"line":213,"column":25},"end":{"line":224,"column":1}},"line":213},"16":{"name":"isAstNode","decl":{"start":{"line":226,"column":9},"end":{"line":226,"column":18}},"loc":{"start":{"line":226,"column":23},"end":{"line":228,"column":1}},"line":226},"17":{"name":"extractPart","decl":{"start":{"line":240,"column":16},"end":{"line":240,"column":27}},"loc":{"start":{"line":240,"column":42},"end":{"line":262,"column":1}},"line":240},"18":{"name":"mixedRemapToPy","decl":{"start":{"line":271,"column":9},"end":{"line":271,"column":23}},"loc":{"start":{"line":271,"column":28},"end":{"line":319,"column":1}},"line":271},"19":{"name":"getCurrentTime","decl":{"start":{"line":322,"column":16},"end":{"line":322,"column":30}},"loc":{"start":{"line":322,"column":33},"end":{"line":334,"column":1}},"line":322}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},"type":"if","locations":[{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},{"start":{},"end":{}}],"line":15},"1":{"loc":{"start":{"line":15,"column":8},"end":{"line":15,"column":71}},"type":"binary-expr","locations":[{"start":{"line":15,"column":8},"end":{"line":15,"column":29}},{"start":{"line":15,"column":33},"end":{"line":15,"column":50}},{"start":{"line":15,"column":54},"end":{"line":15,"column":71}}],"line":15},"2":{"loc":{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},"type":"if","locations":[{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},{"start":{},"end":{}}],"line":20},"3":{"loc":{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},"type":"if","locations":[{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},{"start":{},"end":{}}],"line":21},"4":{"loc":{"start":{"line":21,"column":40},"end":{"line":21,"column":117}},"type":"cond-expr","locations":[{"start":{"line":21,"column":62},"end":{"line":21,"column":88}},{"start":{"line":21,"column":91},"end":{"line":21,"column":117}}],"line":21},"5":{"loc":{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},"type":"if","locations":[{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},{"start":{},"end":{}}],"line":48},"6":{"loc":{"start":{"line":82,"column":16},"end":{"line":82,"column":100}},"type":"cond-expr","locations":[{"start":{"line":82,"column":37},"end":{"line":82,"column":76}},{"start":{"line":82,"column":79},"end":{"line":82,"column":100}}],"line":82},"7":{"loc":{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},{"start":{},"end":{}}],"line":119},"8":{"loc":{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},"type":"if","locations":[{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},{"start":{},"end":{}}],"line":154},"9":{"loc":{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},"type":"if","locations":[{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},{"start":{"line":168,"column":19},"end":{"line":170,"column":13}}],"line":166},"10":{"loc":{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},{"start":{},"end":{}}],"line":185},"11":{"loc":{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},"type":"if","locations":[{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},{"start":{},"end":{}}],"line":196},"12":{"loc":{"start":{"line":214,"column":11},"end":{"line":221,"column":39}},"type":"binary-expr","locations":[{"start":{"line":214,"column":12},"end":{"line":214,"column":42}},{"start":{"line":215,"column":9},"end":{"line":215,"column":39}},{"start":{"line":216,"column":9},"end":{"line":216,"column":40}},{"start":{"line":217,"column":9},"end":{"line":217,"column":39}},{"start":{"line":218,"column":9},"end":{"line":218,"column":39}},{"start":{"line":219,"column":9},"end":{"line":219,"column":41}},{"start":{"line":220,"column":9},"end":{"line":220,"column":38}},{"start":{"line":221,"column":9},"end":{"line":221,"column":38}}],"line":214},"13":{"loc":{"start":{"line":227,"column":11},"end":{"line":227,"column":53}},"type":"binary-expr","locations":[{"start":{"line":227,"column":11},"end":{"line":227,"column":32}},{"start":{"line":227,"column":36},"end":{"line":227,"column":53}}],"line":227},"14":{"loc":{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},"type":"if","locations":[{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},{"start":{},"end":{}}],"line":241},"15":{"loc":{"start":{"line":241,"column":8},"end":{"line":241,"column":39}},"type":"binary-expr","locations":[{"start":{"line":241,"column":8},"end":{"line":241,"column":21}},{"start":{"line":241,"column":25},"end":{"line":241,"column":39}}],"line":241},"16":{"loc":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":250},"17":{"loc":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"type":"if","locations":[{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},{"start":{},"end":{}}],"line":252},"18":{"loc":{"start":{"line":252,"column":16},"end":{"line":252,"column":40}},"type":"binary-expr","locations":[{"start":{"line":252,"column":16},"end":{"line":252,"column":20}},{"start":{"line":252,"column":24},"end":{"line":252,"column":40}}],"line":252},"19":{"loc":{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},"type":"if","locations":[{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},{"start":{},"end":{}}],"line":255},"20":{"loc":{"start":{"line":255,"column":16},"end":{"line":255,"column":73}},"type":"binary-expr","locations":[{"start":{"line":255,"column":16},"end":{"line":255,"column":38}},{"start":{"line":255,"column":42},"end":{"line":255,"column":46}},{"start":{"line":255,"column":50},"end":{"line":255,"column":73}}],"line":255},"21":{"loc":{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},{"start":{"line":280,"column":11},"end":{"line":318,"column":5}}],"line":277},"22":{"loc":{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},{"start":{"line":293,"column":11},"end":{"line":318,"column":5}}],"line":280},"23":{"loc":{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},"type":"if","locations":[{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},{"start":{"line":288,"column":17},"end":{"line":290,"column":13}}],"line":286},"24":{"loc":{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},{"start":{"line":295,"column":11},"end":{"line":318,"column":5}}],"line":293},"25":{"loc":{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},{"start":{"line":310,"column":11},"end":{"line":318,"column":5}}],"line":295},"26":{"loc":{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},"type":"if","locations":[{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},{"start":{"line":307,"column":13},"end":{"line":309,"column":9}}],"line":296},"27":{"loc":{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},{"start":{"line":312,"column":11},"end":{"line":318,"column":5}}],"line":310},"28":{"loc":{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},{"start":{"line":314,"column":11},"end":{"line":318,"column":5}}],"line":312},"29":{"loc":{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},{"start":{"line":316,"column":11},"end":{"line":318,"column":5}}],"line":314},"30":{"loc":{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},{"start":{},"end":{}}],"line":316},"31":{"loc":{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},"type":"if","locations":[{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},{"start":{},"end":{}}],"line":327},"32":{"loc":{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},"type":"if","locations":[{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},{"start":{},"end":{}}],"line":330}},"s":{"0":5,"1":5,"2":5,"3":2,"4":3,"5":11,"6":3,"7":8,"8":3,"9":5,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":6,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":6,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":6,"119":6,"120":6,"121":6,"122":6,"123":6,"124":6,"125":6,"126":6,"127":6,"128":6},"f":{"0":5,"1":11,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[2,3],"1":[5,4,4],"2":[3,8],"3":[3,5],"4":[2,1],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,6],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0,0,0,0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c501eb302de83cf53f9c8957623052461f5e5fbc"} +,"/home/runner/work/blockpy/blockpy/src/editor/abstract_editor.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/abstract_editor.js","statementMap":{"0":{"start":{"line":4,"column":21},"end":{"line":4,"column":37}},"1":{"start":{"line":5,"column":16},"end":{"line":5,"column":34}},"2":{"start":{"line":6,"column":4},"end":{"line":8,"column":6}},"3":{"start":{"line":7,"column":8},"end":{"line":7,"column":48}},"4":{"start":{"line":9,"column":4},"end":{"line":9,"column":40}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":36}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":28}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":58}},"8":{"start":{"line":19,"column":48},"end":{"line":19,"column":89}},"9":{"start":{"line":21,"column":4},"end":{"line":21,"column":26}},"10":{"start":{"line":22,"column":4},"end":{"line":22,"column":28}},"11":{"start":{"line":24,"column":15},"end":{"line":24,"column":53}},"12":{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},"13":{"start":{"line":26,"column":8},"end":{"line":26,"column":48}},"14":{"start":{"line":28,"column":36},"end":{"line":28,"column":70}},"15":{"start":{"line":29,"column":8},"end":{"line":29,"column":70}},"16":{"start":{"line":30,"column":8},"end":{"line":30,"column":46}},"17":{"start":{"line":31,"column":8},"end":{"line":31,"column":57}},"18":{"start":{"line":32,"column":8},"end":{"line":32,"column":38}},"19":{"start":{"line":33,"column":8},"end":{"line":33,"column":57}},"20":{"start":{"line":39,"column":8},"end":{"line":39,"column":25}},"21":{"start":{"line":40,"column":8},"end":{"line":40,"column":23}},"22":{"start":{"line":42,"column":8},"end":{"line":42,"column":53}},"23":{"start":{"line":43,"column":8},"end":{"line":43,"column":29}},"24":{"start":{"line":44,"column":8},"end":{"line":44,"column":25}},"25":{"start":{"line":48,"column":8},"end":{"line":48,"column":50}},"26":{"start":{"line":49,"column":8},"end":{"line":49,"column":54}},"27":{"start":{"line":50,"column":8},"end":{"line":50,"column":63}},"28":{"start":{"line":55,"column":8},"end":{"line":55,"column":54}},"29":{"start":{"line":56,"column":8},"end":{"line":56,"column":63}},"30":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"31":{"start":{"line":62,"column":12},"end":{"line":62,"column":69}},"32":{"start":{"line":69,"column":8},"end":{"line":72,"column":11}},"33":{"start":{"line":76,"column":8},"end":{"line":76,"column":36}},"34":{"start":{"line":77,"column":8},"end":{"line":77,"column":57}},"35":{"start":{"line":78,"column":8},"end":{"line":78,"column":32}},"36":{"start":{"line":88,"column":8},"end":{"line":88,"column":56}},"37":{"start":{"line":89,"column":8},"end":{"line":89,"column":25}},"38":{"start":{"line":90,"column":8},"end":{"line":90,"column":29}},"39":{"start":{"line":94,"column":23},"end":{"line":94,"column":44}},"40":{"start":{"line":95,"column":23},"end":{"line":95,"column":42}},"41":{"start":{"line":96,"column":8},"end":{"line":96,"column":35}},"42":{"start":{"line":100,"column":23},"end":{"line":100,"column":59}},"43":{"start":{"line":101,"column":8},"end":{"line":106,"column":10}}},"fnMap":{"0":{"name":"uploadFile","decl":{"start":{"line":3,"column":16},"end":{"line":3,"column":26}},"loc":{"start":{"line":3,"column":41},"end":{"line":12,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":25},"end":{"line":6,"column":26}},"loc":{"start":{"line":7,"column":8},"end":{"line":7,"column":48}},"line":7},"2":{"name":"sluggify","decl":{"start":{"line":14,"column":16},"end":{"line":14,"column":24}},"loc":{"start":{"line":14,"column":31},"end":{"line":16,"column":1}},"line":14},"3":{"name":"downloadFile","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"loc":{"start":{"line":18,"column":43},"end":{"line":35,"column":1}},"line":18},"4":{"name":"(anonymous_4)","decl":{"start":{"line":38,"column":4},"end":{"line":38,"column":5}},"loc":{"start":{"line":38,"column":27},"end":{"line":45,"column":5}},"line":38},"5":{"name":"(anonymous_5)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":5}},"loc":{"start":{"line":47,"column":17},"end":{"line":51,"column":5}},"line":47},"6":{"name":"(anonymous_6)","decl":{"start":{"line":53,"column":4},"end":{"line":53,"column":5}},"loc":{"start":{"line":53,"column":20},"end":{"line":57,"column":5}},"line":53},"7":{"name":"(anonymous_7)","decl":{"start":{"line":59,"column":4},"end":{"line":59,"column":5}},"loc":{"start":{"line":59,"column":24},"end":{"line":66,"column":5}},"line":59},"8":{"name":"(anonymous_8)","decl":{"start":{"line":68,"column":4},"end":{"line":68,"column":5}},"loc":{"start":{"line":68,"column":23},"end":{"line":73,"column":5}},"line":68},"9":{"name":"(anonymous_9)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":34},"end":{"line":79,"column":5}},"line":75},"10":{"name":"(anonymous_10)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":44},"end":{"line":91,"column":5}},"line":87},"11":{"name":"(anonymous_11)","decl":{"start":{"line":93,"column":4},"end":{"line":93,"column":5}},"loc":{"start":{"line":93,"column":22},"end":{"line":97,"column":5}},"line":93},"12":{"name":"(anonymous_12)","decl":{"start":{"line":99,"column":4},"end":{"line":99,"column":5}},"loc":{"start":{"line":99,"column":19},"end":{"line":107,"column":5}},"line":99}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},{"start":{"line":27,"column":10},"end":{"line":34,"column":5}}],"line":25},"1":{"loc":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},{"start":{},"end":{}}],"line":60}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,0],"1":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2bb34c18f0688dee371dddd7f94174e43348c527"} +,"/home/runner/work/blockpy/blockpy/src/editor/assignment_settings.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/assignment_settings.js","statementMap":{"0":{"start":{"line":4,"column":28},"end":{"line":43,"column":1}},"1":{"start":{"line":45,"column":27},"end":{"line":50,"column":1}},"2":{"start":{"line":53,"column":4},"end":{"line":57,"column":5}},"3":{"start":{"line":53,"column":15},"end":{"line":53,"column":16}},"4":{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},"5":{"start":{"line":55,"column":12},"end":{"line":55,"column":45}},"6":{"start":{"line":58,"column":4},"end":{"line":58,"column":47}},"7":{"start":{"line":62,"column":4},"end":{"line":67,"column":22}},"8":{"start":{"line":70,"column":52},"end":{"line":93,"column":19}},"9":{"start":{"line":72,"column":25},"end":{"line":72,"column":46}},"10":{"start":{"line":74,"column":25},"end":{"line":74,"column":112}},"11":{"start":{"line":74,"column":58},"end":{"line":74,"column":100}},"12":{"start":{"line":75,"column":8},"end":{"line":92,"column":10}},"13":{"start":{"line":95,"column":47},"end":{"line":306,"column":1}},"14":{"start":{"line":309,"column":19},"end":{"line":309,"column":21}},"15":{"start":{"line":310,"column":4},"end":{"line":317,"column":7}},"16":{"start":{"line":311,"column":25},"end":{"line":311,"column":35}},"17":{"start":{"line":311,"column":50},"end":{"line":311,"column":60}},"18":{"start":{"line":311,"column":77},"end":{"line":311,"column":87}},"19":{"start":{"line":312,"column":20},"end":{"line":312,"column":59}},"20":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"21":{"start":{"line":315,"column":12},"end":{"line":315,"column":41}},"22":{"start":{"line":318,"column":4},"end":{"line":318,"column":36}},"23":{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},"24":{"start":{"line":323,"column":8},"end":{"line":323,"column":40}},"25":{"start":{"line":324,"column":8},"end":{"line":331,"column":11}},"26":{"start":{"line":325,"column":29},"end":{"line":325,"column":39}},"27":{"start":{"line":325,"column":54},"end":{"line":325,"column":64}},"28":{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},"29":{"start":{"line":327,"column":16},"end":{"line":327,"column":76}},"30":{"start":{"line":329,"column":16},"end":{"line":329,"column":66}},"31":{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},"32":{"start":{"line":334,"column":12},"end":{"line":334,"column":58}},"33":{"start":{"line":340,"column":19},"end":{"line":340,"column":21}},"34":{"start":{"line":341,"column":4},"end":{"line":353,"column":7}},"35":{"start":{"line":342,"column":25},"end":{"line":342,"column":35}},"36":{"start":{"line":342,"column":50},"end":{"line":342,"column":60}},"37":{"start":{"line":342,"column":77},"end":{"line":342,"column":87}},"38":{"start":{"line":343,"column":24},"end":{"line":343,"column":34}},"39":{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},"40":{"start":{"line":345,"column":12},"end":{"line":345,"column":63}},"41":{"start":{"line":347,"column":30},"end":{"line":347,"column":78}},"42":{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},"43":{"start":{"line":349,"column":16},"end":{"line":349,"column":67}},"44":{"start":{"line":351,"column":12},"end":{"line":351,"column":62}},"45":{"start":{"line":355,"column":4},"end":{"line":355,"column":20}},"46":{"start":{"line":360,"column":8},"end":{"line":360,"column":25}},"47":{"start":{"line":361,"column":8},"end":{"line":361,"column":27}},"48":{"start":{"line":365,"column":8},"end":{"line":365,"column":44}},"49":{"start":{"line":366,"column":8},"end":{"line":366,"column":27}},"50":{"start":{"line":371,"column":8},"end":{"line":371,"column":60}},"51":{"start":{"line":377,"column":8},"end":{"line":377,"column":33}},"52":{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},"53":{"start":{"line":379,"column":12},"end":{"line":379,"column":30}},"54":{"start":{"line":382,"column":12},"end":{"line":382,"column":31}},"55":{"start":{"line":387,"column":8},"end":{"line":387,"column":33}},"56":{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},"57":{"start":{"line":389,"column":12},"end":{"line":389,"column":30}},"58":{"start":{"line":392,"column":12},"end":{"line":392,"column":31}},"59":{"start":{"line":401,"column":8},"end":{"line":401,"column":43}},"60":{"start":{"line":405,"column":34},"end":{"line":410,"column":1}}},"fnMap":{"0":{"name":"getDocumentation","decl":{"start":{"line":52,"column":9},"end":{"line":52,"column":25}},"loc":{"start":{"line":52,"column":32},"end":{"line":59,"column":1}},"line":52},"1":{"name":"makeStartViewTab","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":25}},"loc":{"start":{"line":61,"column":44},"end":{"line":68,"column":1}},"line":61},"2":{"name":"(anonymous_2)","decl":{"start":{"line":72,"column":12},"end":{"line":72,"column":13}},"loc":{"start":{"line":72,"column":25},"end":{"line":72,"column":46}},"line":72},"3":{"name":"(anonymous_3)","decl":{"start":{"line":73,"column":9},"end":{"line":73,"column":10}},"loc":{"start":{"line":73,"column":22},"end":{"line":93,"column":5}},"line":73},"4":{"name":"(anonymous_4)","decl":{"start":{"line":74,"column":51},"end":{"line":74,"column":52}},"loc":{"start":{"line":74,"column":58},"end":{"line":74,"column":100}},"line":74},"5":{"name":"saveAssignmentSettings","decl":{"start":{"line":308,"column":16},"end":{"line":308,"column":38}},"loc":{"start":{"line":308,"column":46},"end":{"line":319,"column":1}},"line":308},"6":{"name":"(anonymous_6)","decl":{"start":{"line":310,"column":32},"end":{"line":310,"column":33}},"loc":{"start":{"line":310,"column":43},"end":{"line":317,"column":5}},"line":310},"7":{"name":"loadAssignmentSettings","decl":{"start":{"line":321,"column":16},"end":{"line":321,"column":38}},"loc":{"start":{"line":321,"column":56},"end":{"line":337,"column":1}},"line":321},"8":{"name":"(anonymous_8)","decl":{"start":{"line":324,"column":36},"end":{"line":324,"column":37}},"loc":{"start":{"line":324,"column":47},"end":{"line":331,"column":9}},"line":324},"9":{"name":"makeAssignmentSettingsModel","decl":{"start":{"line":339,"column":16},"end":{"line":339,"column":43}},"loc":{"start":{"line":339,"column":59},"end":{"line":356,"column":1}},"line":339},"10":{"name":"(anonymous_10)","decl":{"start":{"line":341,"column":32},"end":{"line":341,"column":33}},"loc":{"start":{"line":341,"column":43},"end":{"line":353,"column":5}},"line":341},"11":{"name":"(anonymous_11)","decl":{"start":{"line":359,"column":4},"end":{"line":359,"column":5}},"loc":{"start":{"line":359,"column":27},"end":{"line":362,"column":5}},"line":359},"12":{"name":"(anonymous_12)","decl":{"start":{"line":364,"column":4},"end":{"line":364,"column":5}},"loc":{"start":{"line":364,"column":34},"end":{"line":374,"column":5}},"line":364},"13":{"name":"(anonymous_13)","decl":{"start":{"line":376,"column":4},"end":{"line":376,"column":5}},"loc":{"start":{"line":376,"column":30},"end":{"line":384,"column":5}},"line":376},"14":{"name":"(anonymous_14)","decl":{"start":{"line":386,"column":4},"end":{"line":386,"column":5}},"loc":{"start":{"line":386,"column":24},"end":{"line":394,"column":5}},"line":386},"15":{"name":"(anonymous_15)","decl":{"start":{"line":396,"column":4},"end":{"line":396,"column":5}},"loc":{"start":{"line":396,"column":44},"end":{"line":402,"column":5}},"line":396}},"branchMap":{"0":{"loc":{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},{"start":{},"end":{}}],"line":54},"1":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{},"end":{}}],"line":314},"2":{"loc":{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},"type":"if","locations":[{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},{"start":{},"end":{}}],"line":322},"3":{"loc":{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},"type":"if","locations":[{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},{"start":{"line":328,"column":19},"end":{"line":330,"column":13}}],"line":326},"4":{"loc":{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},"type":"if","locations":[{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},{"start":{},"end":{}}],"line":333},"5":{"loc":{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},"type":"if","locations":[{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},{"start":{"line":346,"column":15},"end":{"line":352,"column":9}}],"line":344},"6":{"loc":{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},"type":"if","locations":[{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},{"start":{},"end":{}}],"line":348},"7":{"loc":{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},{"start":{},"end":{}}],"line":378},"8":{"loc":{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},"type":"if","locations":[{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},{"start":{},"end":{}}],"line":388}},"s":{"0":4,"1":4,"2":28,"3":28,"4":228,"5":28,"6":0,"7":12,"8":4,"9":140,"10":112,"11":268,"12":112,"13":4,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":4},"f":{"0":28,"1":12,"2":140,"3":112,"4":268,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[28,200],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"23d28c661eb902d518b7d53edefcbdfbc1fab63b"} +,"/home/runner/work/blockpy/blockpy/src/editor/default_header.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/default_header.js","statementMap":{"0":{"start":{"line":3,"column":30},"end":{"line":36,"column":1}}},"fnMap":{},"branchMap":{},"s":{"0":4},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4245a8851290ef3f486cd931c67e8088c272e7f2"} +,"/home/runner/work/blockpy/blockpy/src/editor/images.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/images.js","statementMap":{"0":{"start":{"line":4,"column":33},"end":{"line":111,"column":1}},"1":{"start":{"line":115,"column":8},"end":{"line":115,"column":25}},"2":{"start":{"line":117,"column":8},"end":{"line":117,"column":87}},"3":{"start":{"line":118,"column":8},"end":{"line":118,"column":95}},"4":{"start":{"line":119,"column":8},"end":{"line":119,"column":89}},"5":{"start":{"line":121,"column":8},"end":{"line":123,"column":11}},"6":{"start":{"line":122,"column":12},"end":{"line":122,"column":67}},"7":{"start":{"line":127,"column":8},"end":{"line":127,"column":44}},"8":{"start":{"line":129,"column":28},"end":{"line":129,"column":67}},"9":{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},"10":{"start":{"line":131,"column":12},"end":{"line":131,"column":32}},"11":{"start":{"line":134,"column":8},"end":{"line":134,"column":92}},"12":{"start":{"line":175,"column":8},"end":{"line":192,"column":11}},"13":{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},"14":{"start":{"line":177,"column":16},"end":{"line":177,"column":70}},"15":{"start":{"line":178,"column":16},"end":{"line":178,"column":80}},"16":{"start":{"line":190,"column":16},"end":{"line":190,"column":91}},"17":{"start":{"line":209,"column":8},"end":{"line":220,"column":9}},"18":{"start":{"line":211,"column":16},"end":{"line":211,"column":55}},"19":{"start":{"line":213,"column":16},"end":{"line":213,"column":55}},"20":{"start":{"line":215,"column":16},"end":{"line":215,"column":51}},"21":{"start":{"line":217,"column":16},"end":{"line":217,"column":49}},"22":{"start":{"line":219,"column":16},"end":{"line":219,"column":28}},"23":{"start":{"line":224,"column":8},"end":{"line":236,"column":10}},"24":{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},"25":{"start":{"line":231,"column":20},"end":{"line":231,"column":40}},"26":{"start":{"line":233,"column":20},"end":{"line":233,"column":87}},"27":{"start":{"line":240,"column":32},"end":{"line":240,"column":40}},"28":{"start":{"line":241,"column":28},"end":{"line":241,"column":77}},"29":{"start":{"line":242,"column":8},"end":{"line":255,"column":10}},"30":{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},"31":{"start":{"line":249,"column":20},"end":{"line":249,"column":40}},"32":{"start":{"line":251,"column":20},"end":{"line":251,"column":86}},"33":{"start":{"line":258,"column":32},"end":{"line":258,"column":40}},"34":{"start":{"line":259,"column":28},"end":{"line":259,"column":77}},"35":{"start":{"line":260,"column":28},"end":{"line":260,"column":85}},"36":{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},"37":{"start":{"line":262,"column":12},"end":{"line":274,"column":14}},"38":{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},"39":{"start":{"line":269,"column":24},"end":{"line":269,"column":44}},"40":{"start":{"line":271,"column":24},"end":{"line":271,"column":90}},"41":{"start":{"line":280,"column":8},"end":{"line":280,"column":43}},"42":{"start":{"line":281,"column":8},"end":{"line":281,"column":43}},"43":{"start":{"line":288,"column":27},"end":{"line":293,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":27},"end":{"line":124,"column":5}},"line":114},"1":{"name":"(anonymous_1)","decl":{"start":{"line":121,"column":46},"end":{"line":121,"column":47}},"loc":{"start":{"line":121,"column":57},"end":{"line":123,"column":9}},"line":121},"2":{"name":"(anonymous_2)","decl":{"start":{"line":126,"column":4},"end":{"line":126,"column":5}},"loc":{"start":{"line":126,"column":34},"end":{"line":172,"column":5}},"line":126},"3":{"name":"(anonymous_3)","decl":{"start":{"line":174,"column":4},"end":{"line":174,"column":5}},"loc":{"start":{"line":174,"column":19},"end":{"line":193,"column":5}},"line":174},"4":{"name":"(anonymous_4)","decl":{"start":{"line":175,"column":54},"end":{"line":175,"column":55}},"loc":{"start":{"line":175,"column":68},"end":{"line":192,"column":9}},"line":175},"5":{"name":"(anonymous_5)","decl":{"start":{"line":195,"column":4},"end":{"line":195,"column":5}},"loc":{"start":{"line":195,"column":30},"end":{"line":197,"column":5}},"line":195},"6":{"name":"(anonymous_6)","decl":{"start":{"line":199,"column":4},"end":{"line":199,"column":5}},"loc":{"start":{"line":199,"column":24},"end":{"line":206,"column":5}},"line":199},"7":{"name":"(anonymous_7)","decl":{"start":{"line":208,"column":4},"end":{"line":208,"column":5}},"loc":{"start":{"line":208,"column":37},"end":{"line":221,"column":5}},"line":208},"8":{"name":"(anonymous_8)","decl":{"start":{"line":223,"column":4},"end":{"line":223,"column":5}},"loc":{"start":{"line":223,"column":22},"end":{"line":237,"column":5}},"line":223},"9":{"name":"(anonymous_9)","decl":{"start":{"line":229,"column":12},"end":{"line":229,"column":13}},"loc":{"start":{"line":229,"column":26},"end":{"line":235,"column":13}},"line":229},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":4},"end":{"line":239,"column":5}},"loc":{"start":{"line":239,"column":25},"end":{"line":256,"column":5}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":247,"column":12},"end":{"line":247,"column":13}},"loc":{"start":{"line":247,"column":26},"end":{"line":253,"column":13}},"line":247},"12":{"name":"(anonymous_12)","decl":{"start":{"line":257,"column":4},"end":{"line":257,"column":5}},"loc":{"start":{"line":257,"column":25},"end":{"line":276,"column":5}},"line":257},"13":{"name":"(anonymous_13)","decl":{"start":{"line":267,"column":16},"end":{"line":267,"column":17}},"loc":{"start":{"line":267,"column":30},"end":{"line":273,"column":17}},"line":267},"14":{"name":"(anonymous_14)","decl":{"start":{"line":278,"column":4},"end":{"line":278,"column":5}},"loc":{"start":{"line":278,"column":44},"end":{"line":285,"column":5}},"line":278}},"branchMap":{"0":{"loc":{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},"type":"if","locations":[{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},{"start":{},"end":{}}],"line":130},"1":{"loc":{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},"type":"if","locations":[{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},{"start":{"line":189,"column":19},"end":{"line":191,"column":13}}],"line":176},"2":{"loc":{"start":{"line":209,"column":8},"end":{"line":220,"column":9}},"type":"switch","locations":[{"start":{"line":210,"column":12},"end":{"line":211,"column":55}},{"start":{"line":212,"column":12},"end":{"line":213,"column":55}},{"start":{"line":214,"column":12},"end":{"line":215,"column":51}},{"start":{"line":216,"column":12},"end":{"line":217,"column":49}},{"start":{"line":218,"column":12},"end":{"line":219,"column":28}}],"line":209},"3":{"loc":{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},"type":"if","locations":[{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},{"start":{"line":232,"column":23},"end":{"line":234,"column":17}}],"line":230},"4":{"loc":{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},"type":"if","locations":[{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},{"start":{"line":250,"column":23},"end":{"line":252,"column":17}}],"line":248},"5":{"loc":{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},"type":"if","locations":[{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},{"start":{},"end":{}}],"line":261},"6":{"loc":{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},"type":"if","locations":[{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},{"start":{"line":270,"column":27},"end":{"line":272,"column":21}}],"line":268}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0,0,0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"05e1b67c09dfdc317795f36231ba3b7c2fab9709"} +,"/home/runner/work/blockpy/blockpy/src/editor/json.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/json.js","statementMap":{"0":{"start":{"line":4,"column":32},"end":{"line":9,"column":1}},"1":{"start":{"line":13,"column":8},"end":{"line":13,"column":25}},"2":{"start":{"line":14,"column":8},"end":{"line":36,"column":11}},"3":{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},"4":{"start":{"line":27,"column":24},"end":{"line":27,"column":58}},"5":{"start":{"line":29,"column":24},"end":{"line":29,"column":48}},"6":{"start":{"line":33,"column":20},"end":{"line":33,"column":76}},"7":{"start":{"line":37,"column":8},"end":{"line":37,"column":27}},"8":{"start":{"line":41,"column":8},"end":{"line":41,"column":44}},"9":{"start":{"line":42,"column":8},"end":{"line":42,"column":27}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":46}},"11":{"start":{"line":45,"column":8},"end":{"line":45,"column":92}},"12":{"start":{"line":47,"column":8},"end":{"line":47,"column":60}},"13":{"start":{"line":48,"column":8},"end":{"line":48,"column":59}},"14":{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},"15":{"start":{"line":51,"column":12},"end":{"line":51,"column":73}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":116}},"17":{"start":{"line":59,"column":8},"end":{"line":59,"column":33}},"18":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"19":{"start":{"line":61,"column":12},"end":{"line":61,"column":30}},"20":{"start":{"line":62,"column":12},"end":{"line":62,"column":50}},"21":{"start":{"line":63,"column":12},"end":{"line":63,"column":38}},"22":{"start":{"line":64,"column":12},"end":{"line":64,"column":31}},"23":{"start":{"line":69,"column":8},"end":{"line":69,"column":33}},"24":{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},"25":{"start":{"line":71,"column":12},"end":{"line":71,"column":30}},"26":{"start":{"line":72,"column":12},"end":{"line":72,"column":57}},"27":{"start":{"line":73,"column":12},"end":{"line":73,"column":31}},"28":{"start":{"line":79,"column":8},"end":{"line":79,"column":43}},"29":{"start":{"line":80,"column":8},"end":{"line":80,"column":60}},"30":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"31":{"start":{"line":82,"column":8},"end":{"line":82,"column":43}},"32":{"start":{"line":86,"column":26},"end":{"line":91,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":27},"end":{"line":38,"column":5}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":23},"end":{"line":25,"column":24}},"loc":{"start":{"line":25,"column":37},"end":{"line":31,"column":17}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":23},"end":{"line":32,"column":24}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":17}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":34},"end":{"line":56,"column":5}},"line":40},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":30},"end":{"line":66,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":68,"column":4},"end":{"line":68,"column":5}},"loc":{"start":{"line":68,"column":24},"end":{"line":75,"column":5}},"line":68},"6":{"name":"(anonymous_6)","decl":{"start":{"line":77,"column":4},"end":{"line":77,"column":5}},"loc":{"start":{"line":77,"column":44},"end":{"line":83,"column":5}},"line":77}},"branchMap":{"0":{"loc":{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},"type":"if","locations":[{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},{"start":{"line":28,"column":27},"end":{"line":30,"column":21}}],"line":26},"1":{"loc":{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},{"start":{},"end":{}}],"line":49},"2":{"loc":{"start":{"line":54,"column":46},"end":{"line":54,"column":114}},"type":"binary-expr","locations":[{"start":{"line":54,"column":46},"end":{"line":54,"column":73}},{"start":{"line":54,"column":77},"end":{"line":54,"column":114}}],"line":54},"3":{"loc":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},{"start":{},"end":{}}],"line":60},"4":{"loc":{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},{"start":{},"end":{}}],"line":70}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c4269f9e7b35fa5faa85be9786bb3095a8838fb8"} +,"/home/runner/work/blockpy/blockpy/src/editor/markdown.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/markdown.js","statementMap":{"0":{"start":{"line":4,"column":36},"end":{"line":7,"column":1}},"1":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"2":{"start":{"line":13,"column":8},"end":{"line":25,"column":11}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":27}},"4":{"start":{"line":30,"column":8},"end":{"line":30,"column":44}},"5":{"start":{"line":31,"column":8},"end":{"line":31,"column":27}},"6":{"start":{"line":32,"column":8},"end":{"line":32,"column":46}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":92}},"8":{"start":{"line":36,"column":8},"end":{"line":36,"column":60}},"9":{"start":{"line":37,"column":8},"end":{"line":37,"column":63}},"10":{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},"11":{"start":{"line":40,"column":12},"end":{"line":40,"column":81}},"12":{"start":{"line":45,"column":8},"end":{"line":45,"column":33}},"13":{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},"14":{"start":{"line":47,"column":12},"end":{"line":47,"column":30}},"15":{"start":{"line":48,"column":12},"end":{"line":48,"column":40}},"16":{"start":{"line":49,"column":12},"end":{"line":49,"column":42}},"17":{"start":{"line":50,"column":12},"end":{"line":50,"column":31}},"18":{"start":{"line":55,"column":8},"end":{"line":55,"column":33}},"19":{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},"20":{"start":{"line":57,"column":12},"end":{"line":57,"column":30}},"21":{"start":{"line":58,"column":12},"end":{"line":58,"column":47}},"22":{"start":{"line":59,"column":12},"end":{"line":59,"column":31}},"23":{"start":{"line":65,"column":8},"end":{"line":65,"column":43}},"24":{"start":{"line":66,"column":8},"end":{"line":66,"column":64}},"25":{"start":{"line":67,"column":8},"end":{"line":67,"column":43}},"26":{"start":{"line":71,"column":30},"end":{"line":76,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":27},"end":{"line":27,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":29,"column":4},"end":{"line":29,"column":5}},"loc":{"start":{"line":29,"column":34},"end":{"line":42,"column":5}},"line":29},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":30},"end":{"line":52,"column":5}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":54,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":54,"column":24},"end":{"line":61,"column":5}},"line":54},"4":{"name":"(anonymous_4)","decl":{"start":{"line":63,"column":4},"end":{"line":63,"column":5}},"loc":{"start":{"line":63,"column":44},"end":{"line":68,"column":5}},"line":63}},"branchMap":{"0":{"loc":{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},{"start":{},"end":{}}],"line":38},"1":{"loc":{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},{"start":{},"end":{}}],"line":46},"2":{"loc":{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},{"start":{},"end":{}}],"line":56}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9ff6db90e0dc988759c4c48aff38334d278f6e84"} +,"/home/runner/work/blockpy/blockpy/src/editor/python.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/python.js","statementMap":{"0":{"start":{"line":15,"column":26},"end":{"line":19,"column":1}},"1":{"start":{"line":22,"column":4},"end":{"line":27,"column":22}},"2":{"start":{"line":30,"column":34},"end":{"line":157,"column":1}},"3":{"start":{"line":162,"column":16},"end":{"line":162,"column":32}},"4":{"start":{"line":163,"column":19},"end":{"line":171,"column":5}},"5":{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},"6":{"start":{"line":165,"column":12},"end":{"line":166,"column":48}},"7":{"start":{"line":168,"column":12},"end":{"line":169,"column":41}},"8":{"start":{"line":172,"column":21},"end":{"line":179,"column":5}},"9":{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},"10":{"start":{"line":174,"column":12},"end":{"line":174,"column":42}},"11":{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},"12":{"start":{"line":177,"column":12},"end":{"line":177,"column":54}},"13":{"start":{"line":180,"column":4},"end":{"line":180,"column":67}},"14":{"start":{"line":185,"column":8},"end":{"line":185,"column":61}},"15":{"start":{"line":186,"column":8},"end":{"line":186,"column":74}},"16":{"start":{"line":187,"column":8},"end":{"line":214,"column":11}},"17":{"start":{"line":195,"column":16},"end":{"line":195,"column":30}},"18":{"start":{"line":199,"column":16},"end":{"line":207,"column":19}},"19":{"start":{"line":200,"column":41},"end":{"line":200,"column":67}},"20":{"start":{"line":201,"column":20},"end":{"line":204,"column":23}},"21":{"start":{"line":202,"column":24},"end":{"line":202,"column":67}},"22":{"start":{"line":211,"column":16},"end":{"line":211,"column":37}},"23":{"start":{"line":217,"column":8},"end":{"line":217,"column":27}},"24":{"start":{"line":218,"column":8},"end":{"line":218,"column":30}},"25":{"start":{"line":219,"column":8},"end":{"line":219,"column":33}},"26":{"start":{"line":220,"column":8},"end":{"line":220,"column":42}},"27":{"start":{"line":221,"column":8},"end":{"line":221,"column":46}},"28":{"start":{"line":222,"column":8},"end":{"line":222,"column":42}},"29":{"start":{"line":223,"column":8},"end":{"line":223,"column":66}},"30":{"start":{"line":225,"column":8},"end":{"line":225,"column":46}},"31":{"start":{"line":229,"column":8},"end":{"line":235,"column":10}},"32":{"start":{"line":230,"column":12},"end":{"line":234,"column":15}},"33":{"start":{"line":233,"column":32},"end":{"line":233,"column":77}},"34":{"start":{"line":239,"column":26},"end":{"line":239,"column":39}},"35":{"start":{"line":240,"column":8},"end":{"line":240,"column":44}},"36":{"start":{"line":241,"column":8},"end":{"line":241,"column":27}},"37":{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},"38":{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},"39":{"start":{"line":245,"column":16},"end":{"line":245,"column":74}},"40":{"start":{"line":247,"column":12},"end":{"line":247,"column":66}},"41":{"start":{"line":249,"column":12},"end":{"line":249,"column":67}},"42":{"start":{"line":252,"column":8},"end":{"line":252,"column":46}},"43":{"start":{"line":255,"column":8},"end":{"line":255,"column":92}},"44":{"start":{"line":258,"column":8},"end":{"line":258,"column":62}},"45":{"start":{"line":259,"column":8},"end":{"line":259,"column":58}},"46":{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},"47":{"start":{"line":262,"column":12},"end":{"line":262,"column":44}},"48":{"start":{"line":262,"column":38},"end":{"line":262,"column":43}},"49":{"start":{"line":264,"column":12},"end":{"line":264,"column":78}},"50":{"start":{"line":266,"column":12},"end":{"line":268,"column":15}},"51":{"start":{"line":267,"column":16},"end":{"line":267,"column":79}},"52":{"start":{"line":269,"column":12},"end":{"line":271,"column":14}},"53":{"start":{"line":270,"column":16},"end":{"line":270,"column":75}},"54":{"start":{"line":273,"column":12},"end":{"line":276,"column":15}},"55":{"start":{"line":274,"column":16},"end":{"line":274,"column":68}},"56":{"start":{"line":275,"column":16},"end":{"line":275,"column":73}},"57":{"start":{"line":284,"column":8},"end":{"line":284,"column":47}},"58":{"start":{"line":284,"column":25},"end":{"line":284,"column":42}},"59":{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},"60":{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},"61":{"start":{"line":290,"column":16},"end":{"line":290,"column":49}},"62":{"start":{"line":293,"column":16},"end":{"line":293,"column":33}},"63":{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},"64":{"start":{"line":297,"column":12},"end":{"line":297,"column":78}},"65":{"start":{"line":298,"column":12},"end":{"line":298,"column":19}},"66":{"start":{"line":300,"column":8},"end":{"line":300,"column":33}},"67":{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},"68":{"start":{"line":302,"column":12},"end":{"line":302,"column":30}},"69":{"start":{"line":303,"column":12},"end":{"line":303,"column":41}},"70":{"start":{"line":305,"column":12},"end":{"line":305,"column":31}},"71":{"start":{"line":310,"column":8},"end":{"line":310,"column":40}},"72":{"start":{"line":312,"column":8},"end":{"line":312,"column":33}},"73":{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},"74":{"start":{"line":314,"column":12},"end":{"line":314,"column":30}},"75":{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},"76":{"start":{"line":316,"column":16},"end":{"line":316,"column":52}},"77":{"start":{"line":318,"column":12},"end":{"line":318,"column":31}},"78":{"start":{"line":324,"column":8},"end":{"line":324,"column":27}},"79":{"start":{"line":325,"column":8},"end":{"line":325,"column":43}},"80":{"start":{"line":326,"column":8},"end":{"line":326,"column":61}},"81":{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},"82":{"start":{"line":328,"column":12},"end":{"line":328,"column":67}},"83":{"start":{"line":330,"column":8},"end":{"line":330,"column":38}},"84":{"start":{"line":331,"column":8},"end":{"line":331,"column":43}},"85":{"start":{"line":335,"column":8},"end":{"line":335,"column":40}},"86":{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},"87":{"start":{"line":337,"column":12},"end":{"line":337,"column":49}},"88":{"start":{"line":338,"column":12},"end":{"line":338,"column":46}},"89":{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},"90":{"start":{"line":341,"column":12},"end":{"line":341,"column":53}},"91":{"start":{"line":342,"column":12},"end":{"line":342,"column":50}},"92":{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},"93":{"start":{"line":345,"column":12},"end":{"line":345,"column":49}},"94":{"start":{"line":346,"column":12},"end":{"line":346,"column":46}},"95":{"start":{"line":351,"column":8},"end":{"line":351,"column":62}},"96":{"start":{"line":352,"column":8},"end":{"line":354,"column":11}},"97":{"start":{"line":353,"column":12},"end":{"line":353,"column":34}},"98":{"start":{"line":355,"column":8},"end":{"line":361,"column":11}},"99":{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},"100":{"start":{"line":357,"column":16},"end":{"line":357,"column":51}},"101":{"start":{"line":359,"column":16},"end":{"line":359,"column":70}},"102":{"start":{"line":362,"column":8},"end":{"line":362,"column":93}},"103":{"start":{"line":363,"column":8},"end":{"line":365,"column":11}},"104":{"start":{"line":364,"column":12},"end":{"line":364,"column":44}},"105":{"start":{"line":368,"column":8},"end":{"line":368,"column":30}},"106":{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},"107":{"start":{"line":370,"column":12},"end":{"line":370,"column":34}},"108":{"start":{"line":372,"column":8},"end":{"line":380,"column":11}},"109":{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},"110":{"start":{"line":374,"column":16},"end":{"line":374,"column":38}},"111":{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},"112":{"start":{"line":376,"column":16},"end":{"line":376,"column":62}},"113":{"start":{"line":377,"column":16},"end":{"line":377,"column":56}},"114":{"start":{"line":378,"column":16},"end":{"line":378,"column":38}},"115":{"start":{"line":384,"column":8},"end":{"line":384,"column":64}},"116":{"start":{"line":385,"column":8},"end":{"line":385,"column":54}},"117":{"start":{"line":386,"column":8},"end":{"line":386,"column":43}},"118":{"start":{"line":387,"column":8},"end":{"line":387,"column":48}},"119":{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},"120":{"start":{"line":392,"column":32},"end":{"line":392,"column":91}},"121":{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},"122":{"start":{"line":394,"column":16},"end":{"line":394,"column":34}},"123":{"start":{"line":396,"column":16},"end":{"line":401,"column":17}},"124":{"start":{"line":397,"column":20},"end":{"line":397,"column":65}},"125":{"start":{"line":399,"column":20},"end":{"line":399,"column":37}},"126":{"start":{"line":400,"column":20},"end":{"line":400,"column":40}},"127":{"start":{"line":404,"column":8},"end":{"line":404,"column":48}},"128":{"start":{"line":406,"column":8},"end":{"line":412,"column":9}},"129":{"start":{"line":407,"column":12},"end":{"line":407,"column":48}},"130":{"start":{"line":409,"column":12},"end":{"line":409,"column":29}},"131":{"start":{"line":410,"column":12},"end":{"line":410,"column":52}},"132":{"start":{"line":411,"column":12},"end":{"line":411,"column":48}},"133":{"start":{"line":416,"column":8},"end":{"line":418,"column":11}},"134":{"start":{"line":417,"column":12},"end":{"line":417,"column":57}},"135":{"start":{"line":419,"column":8},"end":{"line":421,"column":11}},"136":{"start":{"line":420,"column":12},"end":{"line":420,"column":57}},"137":{"start":{"line":422,"column":8},"end":{"line":424,"column":11}},"138":{"start":{"line":428,"column":20},"end":{"line":428,"column":35}},"139":{"start":{"line":429,"column":8},"end":{"line":431,"column":10}},"140":{"start":{"line":435,"column":8},"end":{"line":435,"column":35}},"141":{"start":{"line":436,"column":8},"end":{"line":436,"column":40}},"142":{"start":{"line":440,"column":23},"end":{"line":440,"column":44}},"143":{"start":{"line":441,"column":19},"end":{"line":441,"column":38}},"144":{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},"145":{"start":{"line":443,"column":12},"end":{"line":443,"column":46}},"146":{"start":{"line":445,"column":8},"end":{"line":445,"column":91}},"147":{"start":{"line":446,"column":8},"end":{"line":446,"column":31}},"148":{"start":{"line":447,"column":8},"end":{"line":447,"column":42}},"149":{"start":{"line":452,"column":21},"end":{"line":452,"column":41}},"150":{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},"151":{"start":{"line":454,"column":12},"end":{"line":454,"column":70}},"152":{"start":{"line":456,"column":8},"end":{"line":456,"column":42}},"153":{"start":{"line":457,"column":8},"end":{"line":457,"column":89}},"154":{"start":{"line":458,"column":8},"end":{"line":458,"column":22}},"155":{"start":{"line":463,"column":28},"end":{"line":468,"column":1}}},"fnMap":{"0":{"name":"makeTab","decl":{"start":{"line":21,"column":9},"end":{"line":21,"column":16}},"loc":{"start":{"line":21,"column":35},"end":{"line":28,"column":1}},"line":21},"1":{"name":"convertIpynbToPython","decl":{"start":{"line":161,"column":9},"end":{"line":161,"column":29}},"loc":{"start":{"line":161,"column":36},"end":{"line":181,"column":1}},"line":161},"2":{"name":"(anonymous_2)","decl":{"start":{"line":163,"column":19},"end":{"line":163,"column":20}},"loc":{"start":{"line":163,"column":34},"end":{"line":171,"column":5}},"line":163},"3":{"name":"(anonymous_3)","decl":{"start":{"line":172,"column":21},"end":{"line":172,"column":22}},"loc":{"start":{"line":172,"column":36},"end":{"line":179,"column":5}},"line":172},"4":{"name":"(anonymous_4)","decl":{"start":{"line":184,"column":4},"end":{"line":184,"column":5}},"loc":{"start":{"line":184,"column":27},"end":{"line":226,"column":5}},"line":184},"5":{"name":"(anonymous_5)","decl":{"start":{"line":194,"column":31},"end":{"line":194,"column":32}},"loc":{"start":{"line":194,"column":43},"end":{"line":196,"column":13}},"line":194},"6":{"name":"(anonymous_6)","decl":{"start":{"line":197,"column":29},"end":{"line":197,"column":30}},"loc":{"start":{"line":197,"column":39},"end":{"line":208,"column":13}},"line":197},"7":{"name":"(anonymous_7)","decl":{"start":{"line":199,"column":35},"end":{"line":199,"column":36}},"loc":{"start":{"line":199,"column":56},"end":{"line":207,"column":17}},"line":199},"8":{"name":"(anonymous_8)","decl":{"start":{"line":201,"column":99},"end":{"line":201,"column":100}},"loc":{"start":{"line":201,"column":113},"end":{"line":204,"column":21}},"line":201},"9":{"name":"(anonymous_9)","decl":{"start":{"line":209,"column":30},"end":{"line":209,"column":31}},"loc":{"start":{"line":209,"column":42},"end":{"line":212,"column":13}},"line":209},"10":{"name":"(anonymous_10)","decl":{"start":{"line":228,"column":4},"end":{"line":228,"column":5}},"loc":{"start":{"line":228,"column":28},"end":{"line":236,"column":5}},"line":228},"11":{"name":"(anonymous_11)","decl":{"start":{"line":229,"column":61},"end":{"line":229,"column":62}},"loc":{"start":{"line":229,"column":74},"end":{"line":235,"column":9}},"line":229},"12":{"name":"(anonymous_12)","decl":{"start":{"line":233,"column":26},"end":{"line":233,"column":27}},"loc":{"start":{"line":233,"column":32},"end":{"line":233,"column":77}},"line":233},"13":{"name":"(anonymous_13)","decl":{"start":{"line":238,"column":4},"end":{"line":238,"column":5}},"loc":{"start":{"line":238,"column":34},"end":{"line":285,"column":5}},"line":238},"14":{"name":"(anonymous_14)","decl":{"start":{"line":262,"column":32},"end":{"line":262,"column":33}},"loc":{"start":{"line":262,"column":38},"end":{"line":262,"column":43}},"line":262},"15":{"name":"(anonymous_15)","decl":{"start":{"line":266,"column":97},"end":{"line":266,"column":98}},"loc":{"start":{"line":266,"column":107},"end":{"line":268,"column":13}},"line":266},"16":{"name":"(anonymous_16)","decl":{"start":{"line":269,"column":105},"end":{"line":269,"column":106}},"loc":{"start":{"line":270,"column":16},"end":{"line":270,"column":75}},"line":270},"17":{"name":"(anonymous_17)","decl":{"start":{"line":273,"column":92},"end":{"line":273,"column":93}},"loc":{"start":{"line":273,"column":103},"end":{"line":276,"column":13}},"line":273},"18":{"name":"(anonymous_18)","decl":{"start":{"line":284,"column":19},"end":{"line":284,"column":20}},"loc":{"start":{"line":284,"column":25},"end":{"line":284,"column":42}},"line":284},"19":{"name":"(anonymous_19)","decl":{"start":{"line":287,"column":4},"end":{"line":287,"column":5}},"loc":{"start":{"line":287,"column":30},"end":{"line":307,"column":5}},"line":287},"20":{"name":"(anonymous_20)","decl":{"start":{"line":309,"column":4},"end":{"line":309,"column":5}},"loc":{"start":{"line":309,"column":24},"end":{"line":320,"column":5}},"line":309},"21":{"name":"(anonymous_21)","decl":{"start":{"line":322,"column":4},"end":{"line":322,"column":5}},"loc":{"start":{"line":322,"column":44},"end":{"line":332,"column":5}},"line":322},"22":{"name":"(anonymous_22)","decl":{"start":{"line":334,"column":4},"end":{"line":334,"column":5}},"loc":{"start":{"line":334,"column":29},"end":{"line":348,"column":5}},"line":334},"23":{"name":"(anonymous_23)","decl":{"start":{"line":350,"column":4},"end":{"line":350,"column":5}},"loc":{"start":{"line":350,"column":24},"end":{"line":381,"column":5}},"line":350},"24":{"name":"(anonymous_24)","decl":{"start":{"line":352,"column":53},"end":{"line":352,"column":54}},"loc":{"start":{"line":352,"column":61},"end":{"line":354,"column":9}},"line":352},"25":{"name":"(anonymous_25)","decl":{"start":{"line":355,"column":67},"end":{"line":355,"column":68}},"loc":{"start":{"line":355,"column":78},"end":{"line":361,"column":9}},"line":355},"26":{"name":"(anonymous_26)","decl":{"start":{"line":363,"column":67},"end":{"line":363,"column":68}},"loc":{"start":{"line":363,"column":80},"end":{"line":365,"column":9}},"line":363},"27":{"name":"(anonymous_27)","decl":{"start":{"line":372,"column":49},"end":{"line":372,"column":50}},"loc":{"start":{"line":372,"column":67},"end":{"line":380,"column":9}},"line":372},"28":{"name":"(anonymous_28)","decl":{"start":{"line":383,"column":4},"end":{"line":383,"column":5}},"loc":{"start":{"line":383,"column":21},"end":{"line":388,"column":5}},"line":383},"29":{"name":"(anonymous_29)","decl":{"start":{"line":390,"column":4},"end":{"line":390,"column":5}},"loc":{"start":{"line":390,"column":27},"end":{"line":413,"column":5}},"line":390},"30":{"name":"(anonymous_30)","decl":{"start":{"line":415,"column":4},"end":{"line":415,"column":5}},"loc":{"start":{"line":415,"column":37},"end":{"line":425,"column":5}},"line":415},"31":{"name":"(anonymous_31)","decl":{"start":{"line":416,"column":53},"end":{"line":416,"column":54}},"loc":{"start":{"line":416,"column":66},"end":{"line":418,"column":9}},"line":416},"32":{"name":"(anonymous_32)","decl":{"start":{"line":419,"column":66},"end":{"line":419,"column":67}},"loc":{"start":{"line":419,"column":79},"end":{"line":421,"column":9}},"line":419},"33":{"name":"(anonymous_33)","decl":{"start":{"line":422,"column":55},"end":{"line":422,"column":56}},"loc":{"start":{"line":422,"column":68},"end":{"line":424,"column":9}},"line":422},"34":{"name":"(anonymous_34)","decl":{"start":{"line":427,"column":4},"end":{"line":427,"column":5}},"loc":{"start":{"line":427,"column":26},"end":{"line":432,"column":5}},"line":427},"35":{"name":"(anonymous_35)","decl":{"start":{"line":434,"column":4},"end":{"line":434,"column":5}},"loc":{"start":{"line":434,"column":28},"end":{"line":437,"column":5}},"line":434},"36":{"name":"(anonymous_36)","decl":{"start":{"line":439,"column":4},"end":{"line":439,"column":5}},"loc":{"start":{"line":439,"column":22},"end":{"line":449,"column":5}},"line":439},"37":{"name":"(anonymous_37)","decl":{"start":{"line":451,"column":4},"end":{"line":451,"column":5}},"loc":{"start":{"line":451,"column":19},"end":{"line":459,"column":5}},"line":451}},"branchMap":{"0":{"loc":{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},{"start":{"line":167,"column":15},"end":{"line":170,"column":9}}],"line":164},"1":{"loc":{"start":{"line":165,"column":19},"end":{"line":166,"column":47}},"type":"binary-expr","locations":[{"start":{"line":165,"column":19},"end":{"line":165,"column":41}},{"start":{"line":166,"column":16},"end":{"line":166,"column":47}}],"line":165},"2":{"loc":{"start":{"line":168,"column":19},"end":{"line":169,"column":40}},"type":"binary-expr","locations":[{"start":{"line":168,"column":19},"end":{"line":168,"column":48}},{"start":{"line":169,"column":16},"end":{"line":169,"column":40}}],"line":168},"3":{"loc":{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},{"start":{"line":175,"column":15},"end":{"line":178,"column":9}}],"line":173},"4":{"loc":{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},{"start":{},"end":{}}],"line":175},"5":{"loc":{"start":{"line":175,"column":19},"end":{"line":176,"column":36}},"type":"binary-expr","locations":[{"start":{"line":175,"column":19},"end":{"line":175,"column":48}},{"start":{"line":176,"column":12},"end":{"line":176,"column":36}}],"line":175},"6":{"loc":{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},"type":"if","locations":[{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},{"start":{"line":248,"column":15},"end":{"line":250,"column":9}}],"line":243},"7":{"loc":{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},"type":"if","locations":[{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},{"start":{},"end":{}}],"line":244},"8":{"loc":{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},"type":"if","locations":[{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},{"start":{"line":263,"column":15},"end":{"line":277,"column":9}}],"line":261},"9":{"loc":{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},"type":"if","locations":[{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},{"start":{"line":295,"column":15},"end":{"line":299,"column":9}}],"line":288},"10":{"loc":{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},"type":"if","locations":[{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},{"start":{"line":291,"column":19},"end":{"line":294,"column":13}}],"line":289},"11":{"loc":{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},"type":"if","locations":[{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},{"start":{},"end":{}}],"line":295},"12":{"loc":{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},"type":"if","locations":[{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},{"start":{},"end":{}}],"line":301},"13":{"loc":{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},"type":"if","locations":[{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},{"start":{},"end":{}}],"line":313},"14":{"loc":{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},"type":"if","locations":[{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},{"start":{},"end":{}}],"line":315},"15":{"loc":{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},"type":"if","locations":[{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},{"start":{},"end":{}}],"line":327},"16":{"loc":{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},"type":"if","locations":[{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},{"start":{},"end":{}}],"line":336},"17":{"loc":{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},"type":"if","locations":[{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},{"start":{},"end":{}}],"line":340},"18":{"loc":{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},"type":"if","locations":[{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},{"start":{},"end":{}}],"line":344},"19":{"loc":{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},"type":"if","locations":[{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},{"start":{"line":358,"column":19},"end":{"line":360,"column":13}}],"line":356},"20":{"loc":{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},"type":"if","locations":[{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},{"start":{},"end":{}}],"line":369},"21":{"loc":{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},"type":"if","locations":[{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},{"start":{"line":375,"column":19},"end":{"line":379,"column":13}}],"line":373},"22":{"loc":{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},"type":"if","locations":[{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},{"start":{},"end":{}}],"line":375},"23":{"loc":{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},"type":"if","locations":[{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},{"start":{},"end":{}}],"line":391},"24":{"loc":{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},"type":"if","locations":[{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},{"start":{"line":395,"column":19},"end":{"line":402,"column":13}}],"line":393},"25":{"loc":{"start":{"line":429,"column":15},"end":{"line":431,"column":9}},"type":"binary-expr","locations":[{"start":{"line":429,"column":15},"end":{"line":429,"column":42}},{"start":{"line":430,"column":12},"end":{"line":430,"column":51}},{"start":{"line":430,"column":55},"end":{"line":430,"column":82}}],"line":429},"26":{"loc":{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},"type":"if","locations":[{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},{"start":{},"end":{}}],"line":442},"27":{"loc":{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},"type":"if","locations":[{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},{"start":{},"end":{}}],"line":453},"28":{"loc":{"start":{"line":453,"column":12},"end":{"line":453,"column":66}},"type":"binary-expr","locations":[{"start":{"line":453,"column":12},"end":{"line":453,"column":36}},{"start":{"line":453,"column":40},"end":{"line":453,"column":66}}],"line":453}},"s":{"0":4,"1":12,"2":4,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":4},"f":{"0":12,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"26514c5d948bdd4cb0adf987870d8182ca8018d4"} +,"/home/runner/work/blockpy/blockpy/src/editor/quiz.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/quiz.js","statementMap":{"0":{"start":{"line":3,"column":32},"end":{"line":7,"column":1}},"1":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}},"2":{"start":{"line":12,"column":8},"end":{"line":33,"column":11}},"3":{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},"4":{"start":{"line":24,"column":24},"end":{"line":24,"column":58}},"5":{"start":{"line":26,"column":24},"end":{"line":26,"column":48}},"6":{"start":{"line":30,"column":20},"end":{"line":30,"column":76}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":27}},"8":{"start":{"line":38,"column":8},"end":{"line":38,"column":44}},"9":{"start":{"line":39,"column":8},"end":{"line":39,"column":27}},"10":{"start":{"line":40,"column":8},"end":{"line":40,"column":46}},"11":{"start":{"line":42,"column":8},"end":{"line":42,"column":92}},"12":{"start":{"line":44,"column":8},"end":{"line":44,"column":60}},"13":{"start":{"line":45,"column":8},"end":{"line":45,"column":59}},"14":{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},"15":{"start":{"line":48,"column":12},"end":{"line":48,"column":73}},"16":{"start":{"line":51,"column":8},"end":{"line":51,"column":116}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":33}},"18":{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},"19":{"start":{"line":57,"column":12},"end":{"line":57,"column":30}},"20":{"start":{"line":58,"column":12},"end":{"line":58,"column":50}},"21":{"start":{"line":59,"column":12},"end":{"line":59,"column":38}},"22":{"start":{"line":60,"column":12},"end":{"line":60,"column":31}},"23":{"start":{"line":65,"column":8},"end":{"line":65,"column":33}},"24":{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},"25":{"start":{"line":67,"column":12},"end":{"line":67,"column":30}},"26":{"start":{"line":68,"column":12},"end":{"line":68,"column":57}},"27":{"start":{"line":69,"column":12},"end":{"line":69,"column":31}},"28":{"start":{"line":75,"column":8},"end":{"line":75,"column":43}},"29":{"start":{"line":76,"column":8},"end":{"line":76,"column":60}},"30":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"31":{"start":{"line":78,"column":8},"end":{"line":78,"column":43}},"32":{"start":{"line":82,"column":26},"end":{"line":87,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":5}},"loc":{"start":{"line":10,"column":27},"end":{"line":35,"column":5}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":23},"end":{"line":22,"column":24}},"loc":{"start":{"line":22,"column":37},"end":{"line":28,"column":17}},"line":22},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":23},"end":{"line":29,"column":24}},"loc":{"start":{"line":29,"column":37},"end":{"line":31,"column":17}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":4},"end":{"line":37,"column":5}},"loc":{"start":{"line":37,"column":34},"end":{"line":52,"column":5}},"line":37},"4":{"name":"(anonymous_4)","decl":{"start":{"line":54,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":54,"column":30},"end":{"line":62,"column":5}},"line":54},"5":{"name":"(anonymous_5)","decl":{"start":{"line":64,"column":4},"end":{"line":64,"column":5}},"loc":{"start":{"line":64,"column":24},"end":{"line":71,"column":5}},"line":64},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":44},"end":{"line":79,"column":5}},"line":73}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},"type":"if","locations":[{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},{"start":{"line":25,"column":27},"end":{"line":27,"column":21}}],"line":23},"1":{"loc":{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},{"start":{},"end":{}}],"line":46},"2":{"loc":{"start":{"line":51,"column":46},"end":{"line":51,"column":114}},"type":"binary-expr","locations":[{"start":{"line":51,"column":46},"end":{"line":51,"column":73}},{"start":{"line":51,"column":77},"end":{"line":51,"column":114}}],"line":51},"3":{"loc":{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},{"start":{},"end":{}}],"line":56},"4":{"loc":{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},{"start":{},"end":{}}],"line":66}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"28dda06bdedf727286c4beccb0f007b030f27155"} +,"/home/runner/work/blockpy/blockpy/src/editor/sample_submissions.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/sample_submissions.js","statementMap":{"0":{"start":{"line":8,"column":34},"end":{"line":14,"column":1}},"1":{"start":{"line":18,"column":8},"end":{"line":18,"column":25}},"2":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}},"3":{"start":{"line":20,"column":8},"end":{"line":20,"column":25}},"4":{"start":{"line":24,"column":8},"end":{"line":25,"column":71}},"5":{"start":{"line":29,"column":8},"end":{"line":29,"column":71}},"6":{"start":{"line":33,"column":8},"end":{"line":37,"column":10}},"7":{"start":{"line":41,"column":39},"end":{"line":55,"column":1}},"8":{"start":{"line":57,"column":0},"end":{"line":93,"column":2}},"9":{"start":{"line":61,"column":8},"end":{"line":61,"column":28}},"10":{"start":{"line":62,"column":17},"end":{"line":83,"column":10}},"11":{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},"12":{"start":{"line":74,"column":24},"end":{"line":74,"column":58}},"13":{"start":{"line":76,"column":24},"end":{"line":76,"column":48}},"14":{"start":{"line":80,"column":20},"end":{"line":80,"column":76}},"15":{"start":{"line":84,"column":8},"end":{"line":84,"column":36}},"16":{"start":{"line":85,"column":8},"end":{"line":85,"column":18}},"17":{"start":{"line":91,"column":8},"end":{"line":91,"column":30}},"18":{"start":{"line":97,"column":8},"end":{"line":97,"column":25}},"19":{"start":{"line":98,"column":8},"end":{"line":98,"column":23}},"20":{"start":{"line":99,"column":8},"end":{"line":99,"column":30}},"21":{"start":{"line":100,"column":8},"end":{"line":100,"column":27}},"22":{"start":{"line":108,"column":8},"end":{"line":108,"column":42}},"23":{"start":{"line":112,"column":8},"end":{"line":112,"column":44}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":27}},"25":{"start":{"line":114,"column":8},"end":{"line":114,"column":46}},"26":{"start":{"line":116,"column":8},"end":{"line":116,"column":92}},"27":{"start":{"line":118,"column":8},"end":{"line":118,"column":60}},"28":{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},"29":{"start":{"line":122,"column":12},"end":{"line":122,"column":34}},"30":{"start":{"line":123,"column":12},"end":{"line":123,"column":54}},"31":{"start":{"line":124,"column":12},"end":{"line":124,"column":103}},"32":{"start":{"line":124,"column":67},"end":{"line":124,"column":100}},"33":{"start":{"line":125,"column":12},"end":{"line":125,"column":81}},"34":{"start":{"line":125,"column":56},"end":{"line":125,"column":79}},"35":{"start":{"line":126,"column":12},"end":{"line":126,"column":35}},"36":{"start":{"line":128,"column":12},"end":{"line":128,"column":102}},"37":{"start":{"line":128,"column":29},"end":{"line":128,"column":97}},"38":{"start":{"line":128,"column":73},"end":{"line":128,"column":96}},"39":{"start":{"line":135,"column":8},"end":{"line":135,"column":33}},"40":{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},"41":{"start":{"line":137,"column":12},"end":{"line":137,"column":30}},"42":{"start":{"line":138,"column":12},"end":{"line":138,"column":42}},"43":{"start":{"line":141,"column":12},"end":{"line":141,"column":31}},"44":{"start":{"line":146,"column":8},"end":{"line":146,"column":33}},"45":{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},"46":{"start":{"line":148,"column":12},"end":{"line":148,"column":30}},"47":{"start":{"line":149,"column":12},"end":{"line":149,"column":72}},"48":{"start":{"line":149,"column":56},"end":{"line":149,"column":69}},"49":{"start":{"line":150,"column":12},"end":{"line":150,"column":31}},"50":{"start":{"line":156,"column":8},"end":{"line":156,"column":43}},"51":{"start":{"line":157,"column":8},"end":{"line":157,"column":30}},"52":{"start":{"line":160,"column":8},"end":{"line":160,"column":43}},"53":{"start":{"line":164,"column":33},"end":{"line":169,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":36},"end":{"line":21,"column":5}},"line":17},"1":{"name":"(anonymous_1)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":24},"end":{"line":26,"column":5}},"line":23},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":29},"end":{"line":30,"column":5}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":4},"end":{"line":32,"column":5}},"loc":{"start":{"line":32,"column":16},"end":{"line":38,"column":5}},"line":32},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":10},"end":{"line":58,"column":11}},"loc":{"start":{"line":58,"column":83},"end":{"line":86,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":72,"column":23},"end":{"line":72,"column":24}},"loc":{"start":{"line":72,"column":37},"end":{"line":78,"column":17}},"line":72},"6":{"name":"(anonymous_6)","decl":{"start":{"line":79,"column":23},"end":{"line":79,"column":24}},"loc":{"start":{"line":79,"column":37},"end":{"line":81,"column":17}},"line":79},"7":{"name":"(anonymous_7)","decl":{"start":{"line":87,"column":12},"end":{"line":87,"column":13}},"loc":{"start":{"line":87,"column":85},"end":{"line":92,"column":5}},"line":87},"8":{"name":"(anonymous_8)","decl":{"start":{"line":96,"column":4},"end":{"line":96,"column":5}},"loc":{"start":{"line":96,"column":27},"end":{"line":101,"column":5}},"line":96},"9":{"name":"(anonymous_9)","decl":{"start":{"line":103,"column":4},"end":{"line":103,"column":5}},"loc":{"start":{"line":103,"column":43},"end":{"line":105,"column":5}},"line":103},"10":{"name":"(anonymous_10)","decl":{"start":{"line":107,"column":4},"end":{"line":107,"column":5}},"loc":{"start":{"line":107,"column":21},"end":{"line":109,"column":5}},"line":107},"11":{"name":"(anonymous_11)","decl":{"start":{"line":111,"column":4},"end":{"line":111,"column":5}},"loc":{"start":{"line":111,"column":34},"end":{"line":132,"column":5}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":124,"column":57},"end":{"line":124,"column":58}},"loc":{"start":{"line":124,"column":67},"end":{"line":124,"column":100}},"line":124},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":45},"end":{"line":125,"column":46}},"loc":{"start":{"line":125,"column":56},"end":{"line":125,"column":79}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":128,"column":23},"end":{"line":128,"column":24}},"loc":{"start":{"line":128,"column":29},"end":{"line":128,"column":97}},"line":128},"15":{"name":"(anonymous_15)","decl":{"start":{"line":128,"column":62},"end":{"line":128,"column":63}},"loc":{"start":{"line":128,"column":73},"end":{"line":128,"column":96}},"line":128},"16":{"name":"(anonymous_16)","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":5}},"loc":{"start":{"line":134,"column":30},"end":{"line":143,"column":5}},"line":134},"17":{"name":"(anonymous_17)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":24},"end":{"line":152,"column":5}},"line":145},"18":{"name":"(anonymous_18)","decl":{"start":{"line":149,"column":50},"end":{"line":149,"column":51}},"loc":{"start":{"line":149,"column":56},"end":{"line":149,"column":69}},"line":149},"19":{"name":"(anonymous_19)","decl":{"start":{"line":154,"column":4},"end":{"line":154,"column":5}},"loc":{"start":{"line":154,"column":44},"end":{"line":161,"column":5}},"line":154}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":48},"end":{"line":24,"column":58}},"type":"binary-expr","locations":[{"start":{"line":24,"column":48},"end":{"line":24,"column":53}},{"start":{"line":24,"column":57},"end":{"line":24,"column":58}}],"line":24},"1":{"loc":{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},"type":"if","locations":[{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},{"start":{"line":75,"column":27},"end":{"line":77,"column":21}}],"line":73},"2":{"loc":{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},"type":"if","locations":[{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},{"start":{},"end":{}}],"line":121},"3":{"loc":{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},"type":"if","locations":[{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},{"start":{},"end":{}}],"line":136},"4":{"loc":{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},{"start":{},"end":{}}],"line":147}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":4,"8":4,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a3752f04a092b528f1eaeb040295bb74cd381027"} +,"/home/runner/work/blockpy/blockpy/src/editor/tags.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/tags.js","statementMap":{"0":{"start":{"line":3,"column":32},"end":{"line":19,"column":1}},"1":{"start":{"line":23,"column":8},"end":{"line":23,"column":54}},"2":{"start":{"line":27,"column":26},"end":{"line":32,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":4},"end":{"line":22,"column":5}},"loc":{"start":{"line":22,"column":27},"end":{"line":24,"column":5}},"line":22}},"branchMap":{},"s":{"0":4,"1":0,"2":4},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c5fe0eba4267e26b9a6f784531d84cdf80cf6544"} +,"/home/runner/work/blockpy/blockpy/src/editor/text.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/text.js","statementMap":{"0":{"start":{"line":4,"column":32},"end":{"line":9,"column":1}},"1":{"start":{"line":13,"column":8},"end":{"line":13,"column":25}},"2":{"start":{"line":14,"column":8},"end":{"line":35,"column":11}},"3":{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},"4":{"start":{"line":26,"column":24},"end":{"line":26,"column":58}},"5":{"start":{"line":28,"column":24},"end":{"line":28,"column":48}},"6":{"start":{"line":32,"column":20},"end":{"line":32,"column":76}},"7":{"start":{"line":36,"column":8},"end":{"line":36,"column":27}},"8":{"start":{"line":40,"column":8},"end":{"line":40,"column":44}},"9":{"start":{"line":41,"column":8},"end":{"line":41,"column":27}},"10":{"start":{"line":42,"column":8},"end":{"line":42,"column":46}},"11":{"start":{"line":44,"column":8},"end":{"line":44,"column":92}},"12":{"start":{"line":46,"column":8},"end":{"line":46,"column":60}},"13":{"start":{"line":47,"column":8},"end":{"line":47,"column":59}},"14":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"15":{"start":{"line":50,"column":12},"end":{"line":50,"column":73}},"16":{"start":{"line":53,"column":8},"end":{"line":53,"column":116}},"17":{"start":{"line":57,"column":8},"end":{"line":57,"column":33}},"18":{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},"19":{"start":{"line":59,"column":12},"end":{"line":59,"column":30}},"20":{"start":{"line":60,"column":12},"end":{"line":60,"column":50}},"21":{"start":{"line":61,"column":12},"end":{"line":61,"column":38}},"22":{"start":{"line":62,"column":12},"end":{"line":62,"column":31}},"23":{"start":{"line":67,"column":8},"end":{"line":67,"column":33}},"24":{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},"25":{"start":{"line":69,"column":12},"end":{"line":69,"column":30}},"26":{"start":{"line":70,"column":12},"end":{"line":70,"column":57}},"27":{"start":{"line":71,"column":12},"end":{"line":71,"column":31}},"28":{"start":{"line":77,"column":8},"end":{"line":77,"column":43}},"29":{"start":{"line":78,"column":8},"end":{"line":78,"column":60}},"30":{"start":{"line":79,"column":8},"end":{"line":79,"column":53}},"31":{"start":{"line":80,"column":8},"end":{"line":80,"column":43}},"32":{"start":{"line":84,"column":26},"end":{"line":89,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":27},"end":{"line":37,"column":5}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":23},"end":{"line":24,"column":24}},"loc":{"start":{"line":24,"column":37},"end":{"line":30,"column":17}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":23},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":37},"end":{"line":33,"column":17}},"line":31},"3":{"name":"(anonymous_3)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":34},"end":{"line":54,"column":5}},"line":39},"4":{"name":"(anonymous_4)","decl":{"start":{"line":56,"column":4},"end":{"line":56,"column":5}},"loc":{"start":{"line":56,"column":30},"end":{"line":64,"column":5}},"line":56},"5":{"name":"(anonymous_5)","decl":{"start":{"line":66,"column":4},"end":{"line":66,"column":5}},"loc":{"start":{"line":66,"column":24},"end":{"line":73,"column":5}},"line":66},"6":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":44},"end":{"line":81,"column":5}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},"type":"if","locations":[{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},{"start":{"line":27,"column":27},"end":{"line":29,"column":21}}],"line":25},"1":{"loc":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},{"start":{},"end":{}}],"line":48},"2":{"loc":{"start":{"line":53,"column":46},"end":{"line":53,"column":114}},"type":"binary-expr","locations":[{"start":{"line":53,"column":46},"end":{"line":53,"column":73}},{"start":{"line":53,"column":77},"end":{"line":53,"column":114}}],"line":53},"3":{"loc":{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},{"start":{},"end":{}}],"line":58},"4":{"loc":{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},{"start":{},"end":{}}],"line":68}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4c2cc8aff905d09aa5b1402de94f39d90a279230"} +,"/home/runner/work/blockpy/blockpy/src/editor/toolbox.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/toolbox.js","statementMap":{"0":{"start":{"line":3,"column":35},"end":{"line":15,"column":1}},"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":25}},"2":{"start":{"line":20,"column":8},"end":{"line":42,"column":11}},"3":{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},"4":{"start":{"line":33,"column":24},"end":{"line":33,"column":58}},"5":{"start":{"line":35,"column":24},"end":{"line":35,"column":48}},"6":{"start":{"line":39,"column":20},"end":{"line":39,"column":76}},"7":{"start":{"line":43,"column":8},"end":{"line":43,"column":27}},"8":{"start":{"line":47,"column":8},"end":{"line":47,"column":44}},"9":{"start":{"line":48,"column":8},"end":{"line":48,"column":27}},"10":{"start":{"line":49,"column":8},"end":{"line":49,"column":46}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":92}},"12":{"start":{"line":53,"column":8},"end":{"line":53,"column":60}},"13":{"start":{"line":54,"column":8},"end":{"line":54,"column":81}},"14":{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},"15":{"start":{"line":58,"column":12},"end":{"line":58,"column":73}},"16":{"start":{"line":61,"column":8},"end":{"line":61,"column":116}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":33}},"18":{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},"19":{"start":{"line":68,"column":12},"end":{"line":68,"column":30}},"20":{"start":{"line":69,"column":12},"end":{"line":69,"column":50}},"21":{"start":{"line":70,"column":12},"end":{"line":70,"column":38}},"22":{"start":{"line":71,"column":12},"end":{"line":71,"column":31}},"23":{"start":{"line":76,"column":8},"end":{"line":76,"column":33}},"24":{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},"25":{"start":{"line":78,"column":12},"end":{"line":78,"column":30}},"26":{"start":{"line":79,"column":12},"end":{"line":79,"column":57}},"27":{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},"28":{"start":{"line":81,"column":16},"end":{"line":81,"column":74}},"29":{"start":{"line":83,"column":12},"end":{"line":83,"column":31}},"30":{"start":{"line":89,"column":8},"end":{"line":89,"column":43}},"31":{"start":{"line":90,"column":8},"end":{"line":90,"column":85}},"32":{"start":{"line":92,"column":8},"end":{"line":92,"column":53}},"33":{"start":{"line":93,"column":8},"end":{"line":93,"column":43}},"34":{"start":{"line":97,"column":29},"end":{"line":102,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":18,"column":4},"end":{"line":18,"column":5}},"loc":{"start":{"line":18,"column":27},"end":{"line":44,"column":5}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":23},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":37},"end":{"line":37,"column":17}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":38,"column":23},"end":{"line":38,"column":24}},"loc":{"start":{"line":38,"column":37},"end":{"line":40,"column":17}},"line":38},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":4},"end":{"line":46,"column":5}},"loc":{"start":{"line":46,"column":34},"end":{"line":63,"column":5}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":30},"end":{"line":73,"column":5}},"line":65},"5":{"name":"(anonymous_5)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":24},"end":{"line":85,"column":5}},"line":75},"6":{"name":"(anonymous_6)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":44},"end":{"line":94,"column":5}},"line":87}},"branchMap":{"0":{"loc":{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},"type":"if","locations":[{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},{"start":{"line":34,"column":27},"end":{"line":36,"column":21}}],"line":32},"1":{"loc":{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},{"start":{},"end":{}}],"line":56},"2":{"loc":{"start":{"line":61,"column":46},"end":{"line":61,"column":114}},"type":"binary-expr","locations":[{"start":{"line":61,"column":46},"end":{"line":61,"column":73}},{"start":{"line":61,"column":77},"end":{"line":61,"column":114}}],"line":61},"3":{"loc":{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},{"start":{},"end":{}}],"line":67},"4":{"loc":{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},"type":"if","locations":[{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},{"start":{},"end":{}}],"line":77},"5":{"loc":{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},"type":"if","locations":[{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},{"start":{},"end":{}}],"line":80}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d445728d2888c4a7298df697d6131daa766bc6f5"} +,"/home/runner/work/blockpy/blockpy/src/engine/configurations.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/configurations.js","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":1,"column":79}},"1":{"start":{"line":10,"column":8},"end":{"line":10,"column":25}},"2":{"start":{"line":11,"column":8},"end":{"line":11,"column":29}},"3":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"4":{"start":{"line":13,"column":8},"end":{"line":13,"column":36}},"5":{"start":{"line":18,"column":8},"end":{"line":18,"column":29}},"6":{"start":{"line":19,"column":8},"end":{"line":19,"column":64}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":50}},"8":{"start":{"line":21,"column":8},"end":{"line":21,"column":28}},"9":{"start":{"line":22,"column":8},"end":{"line":22,"column":46}},"10":{"start":{"line":24,"column":8},"end":{"line":24,"column":48}},"11":{"start":{"line":26,"column":8},"end":{"line":26,"column":58}},"12":{"start":{"line":28,"column":8},"end":{"line":28,"column":82}},"13":{"start":{"line":28,"column":49},"end":{"line":28,"column":81}},"14":{"start":{"line":30,"column":8},"end":{"line":43,"column":10}},"15":{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},"16":{"start":{"line":32,"column":16},"end":{"line":32,"column":28}},"17":{"start":{"line":34,"column":32},"end":{"line":34,"column":75}},"18":{"start":{"line":35,"column":24},"end":{"line":35,"column":64}},"19":{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},"20":{"start":{"line":37,"column":16},"end":{"line":37,"column":66}},"21":{"start":{"line":38,"column":16},"end":{"line":38,"column":37}},"22":{"start":{"line":39,"column":16},"end":{"line":40,"column":92}},"23":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"24":{"start":{"line":42,"column":12},"end":{"line":42,"column":25}},"25":{"start":{"line":45,"column":8},"end":{"line":45,"column":51}},"26":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"27":{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},"28":{"start":{"line":51,"column":12},"end":{"line":51,"column":181}},"29":{"start":{"line":53,"column":12},"end":{"line":53,"column":105}},"30":{"start":{"line":58,"column":8},"end":{"line":77,"column":10}},"31":{"start":{"line":74,"column":34},"end":{"line":74,"column":101}},"32":{"start":{"line":81,"column":22},"end":{"line":81,"column":75}},"33":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"34":{"start":{"line":83,"column":12},"end":{"line":83,"column":72}},"35":{"start":{"line":85,"column":8},"end":{"line":85,"column":21}},"36":{"start":{"line":97,"column":8},"end":{"line":97,"column":46}},"37":{"start":{"line":103,"column":26},"end":{"line":103,"column":87}},"38":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"39":{"start":{"line":105,"column":12},"end":{"line":105,"column":117}},"40":{"start":{"line":107,"column":8},"end":{"line":107,"column":55}},"41":{"start":{"line":108,"column":8},"end":{"line":117,"column":9}},"42":{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},"43":{"start":{"line":110,"column":16},"end":{"line":115,"column":17}},"44":{"start":{"line":110,"column":27},"end":{"line":110,"column":28}},"45":{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},"46":{"start":{"line":112,"column":39},"end":{"line":112,"column":89}},"47":{"start":{"line":113,"column":24},"end":{"line":113,"column":42}},"48":{"start":{"line":119,"column":8},"end":{"line":119,"column":112}},"49":{"start":{"line":124,"column":8},"end":{"line":124,"column":46}},"50":{"start":{"line":129,"column":8},"end":{"line":129,"column":46}},"51":{"start":{"line":134,"column":8},"end":{"line":134,"column":50}},"52":{"start":{"line":138,"column":8},"end":{"line":138,"column":46}},"53":{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},"54":{"start":{"line":144,"column":12},"end":{"line":144,"column":48}},"55":{"start":{"line":146,"column":8},"end":{"line":146,"column":48}},"56":{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},"57":{"start":{"line":151,"column":12},"end":{"line":151,"column":40}},"58":{"start":{"line":153,"column":12},"end":{"line":153,"column":22}},"59":{"start":{"line":159,"column":8},"end":{"line":159,"column":19}},"60":{"start":{"line":171,"column":8},"end":{"line":171,"column":21}},"61":{"start":{"line":175,"column":8},"end":{"line":175,"column":54}},"62":{"start":{"line":179,"column":8},"end":{"line":179,"column":54}},"63":{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},"64":{"start":{"line":185,"column":12},"end":{"line":185,"column":62}},"65":{"start":{"line":186,"column":12},"end":{"line":186,"column":59}},"66":{"start":{"line":197,"column":27},"end":{"line":197,"column":68}},"67":{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},"68":{"start":{"line":199,"column":12},"end":{"line":199,"column":36}},"69":{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},"70":{"start":{"line":202,"column":12},"end":{"line":202,"column":50}},"71":{"start":{"line":204,"column":19},"end":{"line":204,"column":21}},"72":{"start":{"line":206,"column":8},"end":{"line":208,"column":9}},"73":{"start":{"line":206,"column":19},"end":{"line":206,"column":20}},"74":{"start":{"line":207,"column":12},"end":{"line":207,"column":41}},"75":{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},"76":{"start":{"line":210,"column":12},"end":{"line":210,"column":39}},"77":{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},"78":{"start":{"line":213,"column":12},"end":{"line":213,"column":41}},"79":{"start":{"line":216,"column":8},"end":{"line":216,"column":52}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":22},"end":{"line":14,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":4},"end":{"line":16,"column":5}},"loc":{"start":{"line":16,"column":16},"end":{"line":47,"column":5}},"line":16},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":25},"end":{"line":28,"column":26}},"loc":{"start":{"line":28,"column":49},"end":{"line":28,"column":81}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":28},"end":{"line":30,"column":29}},"loc":{"start":{"line":30,"column":55},"end":{"line":43,"column":9}},"line":30},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":39},"end":{"line":39,"column":40}},"loc":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"line":40},"5":{"name":"(anonymous_5)","decl":{"start":{"line":49,"column":4},"end":{"line":49,"column":5}},"loc":{"start":{"line":49,"column":34},"end":{"line":55,"column":5}},"line":49},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":23},"end":{"line":78,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":74,"column":24},"end":{"line":74,"column":25}},"loc":{"start":{"line":74,"column":34},"end":{"line":74,"column":101}},"line":74},"8":{"name":"(anonymous_8)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":33},"end":{"line":86,"column":5}},"line":80},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":4},"end":{"line":96,"column":5}},"loc":{"start":{"line":96,"column":25},"end":{"line":99,"column":5}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":32},"end":{"line":121,"column":5}},"line":101},"11":{"name":"(anonymous_11)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":15},"end":{"line":126,"column":5}},"line":123},"12":{"name":"(anonymous_12)","decl":{"start":{"line":128,"column":4},"end":{"line":128,"column":5}},"loc":{"start":{"line":128,"column":16},"end":{"line":131,"column":5}},"line":128},"13":{"name":"(anonymous_13)","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":5}},"loc":{"start":{"line":133,"column":17},"end":{"line":135,"column":5}},"line":133},"14":{"name":"(anonymous_14)","decl":{"start":{"line":137,"column":4},"end":{"line":137,"column":5}},"loc":{"start":{"line":137,"column":12},"end":{"line":140,"column":5}},"line":137},"15":{"name":"(anonymous_15)","decl":{"start":{"line":142,"column":4},"end":{"line":142,"column":5}},"loc":{"start":{"line":142,"column":17},"end":{"line":147,"column":5}},"line":142},"16":{"name":"(anonymous_16)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":5}},"loc":{"start":{"line":149,"column":31},"end":{"line":155,"column":5}},"line":149},"17":{"name":"(anonymous_17)","decl":{"start":{"line":157,"column":4},"end":{"line":157,"column":5}},"loc":{"start":{"line":157,"column":23},"end":{"line":160,"column":5}},"line":157},"18":{"name":"(anonymous_18)","decl":{"start":{"line":162,"column":4},"end":{"line":162,"column":5}},"loc":{"start":{"line":162,"column":11},"end":{"line":164,"column":5}},"line":162},"19":{"name":"(anonymous_19)","decl":{"start":{"line":166,"column":4},"end":{"line":166,"column":5}},"loc":{"start":{"line":166,"column":15},"end":{"line":168,"column":5}},"line":166},"20":{"name":"(anonymous_20)","decl":{"start":{"line":170,"column":4},"end":{"line":170,"column":5}},"loc":{"start":{"line":170,"column":26},"end":{"line":172,"column":5}},"line":170},"21":{"name":"(anonymous_21)","decl":{"start":{"line":174,"column":4},"end":{"line":174,"column":5}},"loc":{"start":{"line":174,"column":20},"end":{"line":176,"column":5}},"line":174},"22":{"name":"(anonymous_22)","decl":{"start":{"line":178,"column":4},"end":{"line":178,"column":5}},"loc":{"start":{"line":178,"column":19},"end":{"line":180,"column":5}},"line":178},"23":{"name":"(anonymous_23)","decl":{"start":{"line":182,"column":4},"end":{"line":182,"column":5}},"loc":{"start":{"line":182,"column":20},"end":{"line":188,"column":5}},"line":182},"24":{"name":"(anonymous_24)","decl":{"start":{"line":190,"column":4},"end":{"line":190,"column":5}},"loc":{"start":{"line":190,"column":22},"end":{"line":192,"column":5}},"line":190},"25":{"name":"(anonymous_25)","decl":{"start":{"line":194,"column":4},"end":{"line":194,"column":5}},"loc":{"start":{"line":194,"column":46},"end":{"line":217,"column":5}},"line":194}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},"type":"if","locations":[{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},{"start":{},"end":{}}],"line":31},"1":{"loc":{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},"type":"if","locations":[{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},{"start":{},"end":{}}],"line":36},"2":{"loc":{"start":{"line":36,"column":16},"end":{"line":36,"column":42}},"type":"binary-expr","locations":[{"start":{"line":36,"column":16},"end":{"line":36,"column":30}},{"start":{"line":36,"column":34},"end":{"line":36,"column":42}}],"line":36},"3":{"loc":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"type":"cond-expr","locations":[{"start":{"line":40,"column":75},"end":{"line":40,"column":83}},{"start":{"line":40,"column":86},"end":{"line":40,"column":91}}],"line":40},"4":{"loc":{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},{"start":{"line":52,"column":15},"end":{"line":54,"column":9}}],"line":50},"5":{"loc":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"type":"if","locations":[{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},{"start":{},"end":{}}],"line":82},"6":{"loc":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},{"start":{},"end":{}}],"line":104},"7":{"loc":{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},{"start":{},"end":{}}],"line":109},"8":{"loc":{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},"type":"if","locations":[{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},{"start":{},"end":{}}],"line":111},"9":{"loc":{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},"type":"if","locations":[{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},{"start":{},"end":{}}],"line":143},"10":{"loc":{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},"type":"if","locations":[{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},{"start":{"line":152,"column":15},"end":{"line":154,"column":9}}],"line":150},"11":{"loc":{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},"type":"if","locations":[{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},{"start":{},"end":{}}],"line":184},"12":{"loc":{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},"type":"if","locations":[{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},{"start":{},"end":{}}],"line":198},"13":{"loc":{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},"type":"if","locations":[{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},{"start":{},"end":{}}],"line":201},"14":{"loc":{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},"type":"if","locations":[{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},{"start":{},"end":{}}],"line":209},"15":{"loc":{"start":{"line":209,"column":12},"end":{"line":209,"column":39}},"type":"binary-expr","locations":[{"start":{"line":209,"column":12},"end":{"line":209,"column":18}},{"start":{"line":209,"column":22},"end":{"line":209,"column":39}}],"line":209},"16":{"loc":{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},"type":"if","locations":[{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},{"start":{},"end":{}}],"line":212},"17":{"loc":{"start":{"line":212,"column":12},"end":{"line":212,"column":39}},"type":"binary-expr","locations":[{"start":{"line":212,"column":12},"end":{"line":212,"column":18}},{"start":{"line":212,"column":22},"end":{"line":212,"column":39}}],"line":212}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"0c7873dff107bbf054533d5b71c35e18891ecc38"} +,"/home/runner/work/blockpy/blockpy/src/engine/eval.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/eval.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":65}},"1":{"start":{"line":9,"column":8},"end":{"line":9,"column":33}},"2":{"start":{"line":10,"column":8},"end":{"line":10,"column":34}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":39}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":29}},"5":{"start":{"line":14,"column":8},"end":{"line":14,"column":26}},"6":{"start":{"line":16,"column":8},"end":{"line":16,"column":32}},"7":{"start":{"line":17,"column":8},"end":{"line":17,"column":65}},"8":{"start":{"line":19,"column":8},"end":{"line":19,"column":88}},"9":{"start":{"line":20,"column":8},"end":{"line":20,"column":90}},"10":{"start":{"line":22,"column":8},"end":{"line":22,"column":20}},"11":{"start":{"line":26,"column":8},"end":{"line":26,"column":36}},"12":{"start":{"line":27,"column":8},"end":{"line":27,"column":94}},"13":{"start":{"line":28,"column":8},"end":{"line":28,"column":62}},"14":{"start":{"line":29,"column":8},"end":{"line":29,"column":62}},"15":{"start":{"line":30,"column":8},"end":{"line":30,"column":24}},"16":{"start":{"line":31,"column":21},"end":{"line":31,"column":54}},"17":{"start":{"line":32,"column":23},"end":{"line":32,"column":36}},"18":{"start":{"line":33,"column":8},"end":{"line":33,"column":59}},"19":{"start":{"line":34,"column":8},"end":{"line":34,"column":84}},"20":{"start":{"line":35,"column":8},"end":{"line":50,"column":11}},"21":{"start":{"line":37,"column":12},"end":{"line":37,"column":28}},"22":{"start":{"line":38,"column":12},"end":{"line":48,"column":14}},"23":{"start":{"line":41,"column":68},"end":{"line":41,"column":74}},"24":{"start":{"line":42,"column":75},"end":{"line":42,"column":89}},"25":{"start":{"line":42,"column":100},"end":{"line":42,"column":106}},"26":{"start":{"line":49,"column":12},"end":{"line":49,"column":22}},"27":{"start":{"line":54,"column":8},"end":{"line":54,"column":43}},"28":{"start":{"line":55,"column":8},"end":{"line":55,"column":63}},"29":{"start":{"line":56,"column":21},"end":{"line":56,"column":54}},"30":{"start":{"line":57,"column":8},"end":{"line":57,"column":103}},"31":{"start":{"line":58,"column":8},"end":{"line":66,"column":11}},"32":{"start":{"line":59,"column":12},"end":{"line":64,"column":14}},"33":{"start":{"line":65,"column":12},"end":{"line":65,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":4},"end":{"line":6,"column":5}},"loc":{"start":{"line":6,"column":22},"end":{"line":23,"column":5}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":4},"end":{"line":25,"column":5}},"loc":{"start":{"line":25,"column":20},"end":{"line":51,"column":5}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":27},"end":{"line":35,"column":28}},"loc":{"start":{"line":35,"column":48},"end":{"line":50,"column":9}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":41,"column":63},"end":{"line":41,"column":64}},"loc":{"start":{"line":41,"column":68},"end":{"line":41,"column":74}},"line":41},"4":{"name":"(anonymous_4)","decl":{"start":{"line":42,"column":70},"end":{"line":42,"column":71}},"loc":{"start":{"line":42,"column":75},"end":{"line":42,"column":89}},"line":42},"5":{"name":"(anonymous_5)","decl":{"start":{"line":42,"column":95},"end":{"line":42,"column":96}},"loc":{"start":{"line":42,"column":100},"end":{"line":42,"column":106}},"line":42},"6":{"name":"(anonymous_6)","decl":{"start":{"line":53,"column":4},"end":{"line":53,"column":5}},"loc":{"start":{"line":53,"column":19},"end":{"line":67,"column":5}},"line":53},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":27},"end":{"line":58,"column":28}},"loc":{"start":{"line":58,"column":48},"end":{"line":66,"column":9}},"line":58}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e6fd53185f8ac43a88fed6a28f06dc7799d2174f"} +,"/home/runner/work/blockpy/blockpy/src/engine/instructor.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/instructor.js","statementMap":{"0":{"start":{"line":7,"column":28},"end":{"line":7,"column":83}},"1":{"start":{"line":8,"column":29},"end":{"line":8,"column":45}},"2":{"start":{"line":12,"column":8},"end":{"line":12,"column":26}},"3":{"start":{"line":14,"column":8},"end":{"line":15,"column":83}},"4":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"5":{"start":{"line":16,"column":8},"end":{"line":16,"column":46}},"6":{"start":{"line":18,"column":8},"end":{"line":18,"column":39}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":50}},"8":{"start":{"line":22,"column":8},"end":{"line":22,"column":28}},"9":{"start":{"line":26,"column":8},"end":{"line":26,"column":44}},"10":{"start":{"line":27,"column":8},"end":{"line":27,"column":29}},"11":{"start":{"line":29,"column":8},"end":{"line":29,"column":83}},"12":{"start":{"line":30,"column":8},"end":{"line":30,"column":76}},"13":{"start":{"line":33,"column":8},"end":{"line":33,"column":81}},"14":{"start":{"line":34,"column":8},"end":{"line":34,"column":72}},"15":{"start":{"line":36,"column":8},"end":{"line":36,"column":74}},"16":{"start":{"line":38,"column":8},"end":{"line":38,"column":61}},"17":{"start":{"line":40,"column":8},"end":{"line":40,"column":74}},"18":{"start":{"line":41,"column":8},"end":{"line":41,"column":20}},"19":{"start":{"line":45,"column":8},"end":{"line":45,"column":27}},"20":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"21":{"start":{"line":50,"column":25},"end":{"line":50,"column":72}},"22":{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},"23":{"start":{"line":53,"column":12},"end":{"line":59,"column":13}},"24":{"start":{"line":54,"column":33},"end":{"line":54,"column":61}},"25":{"start":{"line":58,"column":16},"end":{"line":58,"column":48}},"26":{"start":{"line":61,"column":8},"end":{"line":61,"column":26}},"27":{"start":{"line":65,"column":22},"end":{"line":67,"column":9}},"28":{"start":{"line":69,"column":8},"end":{"line":73,"column":11}},"29":{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},"30":{"start":{"line":71,"column":16},"end":{"line":71,"column":75}},"31":{"start":{"line":75,"column":8},"end":{"line":77,"column":11}},"32":{"start":{"line":76,"column":12},"end":{"line":76,"column":53}},"33":{"start":{"line":78,"column":8},"end":{"line":78,"column":21}},"34":{"start":{"line":83,"column":12},"end":{"line":83,"column":50}},"35":{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},"36":{"start":{"line":85,"column":16},"end":{"line":85,"column":49}},"37":{"start":{"line":87,"column":12},"end":{"line":87,"column":28}},"38":{"start":{"line":89,"column":8},"end":{"line":94,"column":10}},"39":{"start":{"line":92,"column":77},"end":{"line":92,"column":116}},"40":{"start":{"line":93,"column":67},"end":{"line":93,"column":89}},"41":{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},"42":{"start":{"line":99,"column":12},"end":{"line":99,"column":234}},"43":{"start":{"line":101,"column":12},"end":{"line":101,"column":171}},"44":{"start":{"line":106,"column":20},"end":{"line":106,"column":82}},"45":{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},"46":{"start":{"line":108,"column":12},"end":{"line":108,"column":70}},"47":{"start":{"line":110,"column":12},"end":{"line":110,"column":36}},"48":{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},"49":{"start":{"line":117,"column":12},"end":{"line":117,"column":70}},"50":{"start":{"line":119,"column":12},"end":{"line":119,"column":53}},"51":{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},"52":{"start":{"line":125,"column":12},"end":{"line":125,"column":53}},"53":{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},"54":{"start":{"line":127,"column":12},"end":{"line":127,"column":54}},"55":{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},"56":{"start":{"line":129,"column":12},"end":{"line":129,"column":61}},"57":{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},"58":{"start":{"line":131,"column":12},"end":{"line":131,"column":32}},"59":{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},"60":{"start":{"line":133,"column":12},"end":{"line":133,"column":77}},"61":{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},"62":{"start":{"line":135,"column":12},"end":{"line":135,"column":54}},"63":{"start":{"line":137,"column":24},"end":{"line":137,"column":86}},"64":{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},"65":{"start":{"line":139,"column":16},"end":{"line":139,"column":81}},"66":{"start":{"line":141,"column":16},"end":{"line":141,"column":40}},"67":{"start":{"line":148,"column":8},"end":{"line":148,"column":102}},"68":{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},"69":{"start":{"line":150,"column":29},"end":{"line":150,"column":67}},"70":{"start":{"line":151,"column":28},"end":{"line":151,"column":73}},"71":{"start":{"line":152,"column":12},"end":{"line":152,"column":63}},"72":{"start":{"line":153,"column":12},"end":{"line":153,"column":29}},"73":{"start":{"line":155,"column":12},"end":{"line":155,"column":30}},"74":{"start":{"line":163,"column":27},"end":{"line":163,"column":68}},"75":{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},"76":{"start":{"line":166,"column":12},"end":{"line":166,"column":60}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":16},"end":{"line":42,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":31},"end":{"line":14,"column":32}},"loc":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":17},"end":{"line":47,"column":5}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":49,"column":4},"end":{"line":49,"column":5}},"loc":{"start":{"line":49,"column":34},"end":{"line":62,"column":5}},"line":49},"4":{"name":"(anonymous_4)","decl":{"start":{"line":64,"column":4},"end":{"line":64,"column":5}},"loc":{"start":{"line":64,"column":25},"end":{"line":79,"column":5}},"line":64},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":66},"end":{"line":69,"column":67}},"loc":{"start":{"line":69,"column":74},"end":{"line":73,"column":9}},"line":69},"6":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":56},"end":{"line":75,"column":57}},"loc":{"start":{"line":75,"column":64},"end":{"line":77,"column":9}},"line":75},"7":{"name":"(anonymous_7)","decl":{"start":{"line":81,"column":4},"end":{"line":81,"column":5}},"loc":{"start":{"line":81,"column":22},"end":{"line":95,"column":5}},"line":81},"8":{"name":"clean","decl":{"start":{"line":82,"column":17},"end":{"line":82,"column":22}},"loc":{"start":{"line":82,"column":33},"end":{"line":88,"column":9}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":92,"column":69},"end":{"line":92,"column":70}},"loc":{"start":{"line":92,"column":77},"end":{"line":92,"column":116}},"line":92},"10":{"name":"(anonymous_10)","decl":{"start":{"line":93,"column":59},"end":{"line":93,"column":60}},"loc":{"start":{"line":93,"column":67},"end":{"line":93,"column":89}},"line":93},"11":{"name":"(anonymous_11)","decl":{"start":{"line":97,"column":4},"end":{"line":97,"column":5}},"loc":{"start":{"line":97,"column":34},"end":{"line":103,"column":5}},"line":97},"12":{"name":"(anonymous_12)","decl":{"start":{"line":105,"column":4},"end":{"line":105,"column":5}},"loc":{"start":{"line":105,"column":23},"end":{"line":112,"column":5}},"line":105},"13":{"name":"(anonymous_13)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":32},"end":{"line":121,"column":5}},"line":114},"14":{"name":"(anonymous_14)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":25},"end":{"line":144,"column":5}},"line":123},"15":{"name":"(anonymous_15)","decl":{"start":{"line":146,"column":4},"end":{"line":146,"column":5}},"loc":{"start":{"line":146,"column":25},"end":{"line":160,"column":5}},"line":146},"16":{"name":"(anonymous_16)","decl":{"start":{"line":162,"column":4},"end":{"line":162,"column":5}},"loc":{"start":{"line":162,"column":46},"end":{"line":168,"column":5}},"line":162}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"type":"cond-expr","locations":[{"start":{"line":15,"column":67},"end":{"line":15,"column":75}},{"start":{"line":15,"column":78},"end":{"line":15,"column":82}}],"line":15},"1":{"loc":{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},{"start":{},"end":{}}],"line":52},"2":{"loc":{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},{"start":{},"end":{}}],"line":70},"3":{"loc":{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},"type":"if","locations":[{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},{"start":{},"end":{}}],"line":84},"4":{"loc":{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},"type":"if","locations":[{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},{"start":{"line":100,"column":15},"end":{"line":102,"column":9}}],"line":98},"5":{"loc":{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},"type":"if","locations":[{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},{"start":{"line":109,"column":15},"end":{"line":111,"column":9}}],"line":107},"6":{"loc":{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},{"start":{"line":118,"column":15},"end":{"line":120,"column":9}}],"line":116},"7":{"loc":{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},{"start":{"line":126,"column":15},"end":{"line":143,"column":9}}],"line":124},"8":{"loc":{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},{"start":{"line":128,"column":15},"end":{"line":143,"column":9}}],"line":126},"9":{"loc":{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},{"start":{"line":130,"column":15},"end":{"line":143,"column":9}}],"line":128},"10":{"loc":{"start":{"line":129,"column":19},"end":{"line":129,"column":60}},"type":"binary-expr","locations":[{"start":{"line":129,"column":19},"end":{"line":129,"column":54}},{"start":{"line":129,"column":58},"end":{"line":129,"column":60}}],"line":129},"11":{"loc":{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},{"start":{"line":132,"column":15},"end":{"line":143,"column":9}}],"line":130},"12":{"loc":{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},{"start":{"line":134,"column":15},"end":{"line":143,"column":9}}],"line":132},"13":{"loc":{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},{"start":{"line":136,"column":15},"end":{"line":143,"column":9}}],"line":134},"14":{"loc":{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},"type":"if","locations":[{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},{"start":{"line":140,"column":19},"end":{"line":142,"column":13}}],"line":138},"15":{"loc":{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},"type":"if","locations":[{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},{"start":{"line":154,"column":15},"end":{"line":156,"column":9}}],"line":149},"16":{"loc":{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},"type":"if","locations":[{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},{"start":{},"end":{}}],"line":165},"17":{"loc":{"start":{"line":165,"column":12},"end":{"line":165,"column":63}},"type":"binary-expr","locations":[{"start":{"line":165,"column":12},"end":{"line":165,"column":32}},{"start":{"line":165,"column":36},"end":{"line":165,"column":63}}],"line":165}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"19e580ee86d867ce64c5f82114902fc2b15f0ceb"} +,"/home/runner/work/blockpy/blockpy/src/engine/on_change.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_change.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":6,"column":8},"end":{"line":6,"column":39}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":58}},"3":{"start":{"line":9,"column":8},"end":{"line":9,"column":62}},"4":{"start":{"line":11,"column":8},"end":{"line":11,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":12,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"640bef0a889f1fcbad3697fdc54695f9e61749cd"} +,"/home/runner/work/blockpy/blockpy/src/engine/on_eval.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_eval.js","statementMap":{"0":{"start":{"line":9,"column":36},"end":{"line":76,"column":1}},"1":{"start":{"line":10,"column":19},"end":{"line":10,"column":46}},"2":{"start":{"line":12,"column":4},"end":{"line":75,"column":2}},"3":{"start":{"line":80,"column":8},"end":{"line":80,"column":26}},"4":{"start":{"line":81,"column":8},"end":{"line":81,"column":46}},"5":{"start":{"line":82,"column":8},"end":{"line":82,"column":62}},"6":{"start":{"line":84,"column":26},"end":{"line":84,"column":75}},"7":{"start":{"line":86,"column":21},"end":{"line":86,"column":54}},"8":{"start":{"line":88,"column":27},"end":{"line":88,"column":52}},"9":{"start":{"line":89,"column":8},"end":{"line":89,"column":100}},"10":{"start":{"line":90,"column":8},"end":{"line":90,"column":31}},"11":{"start":{"line":91,"column":29},"end":{"line":91,"column":38}},"12":{"start":{"line":92,"column":21},"end":{"line":92,"column":74}},"13":{"start":{"line":93,"column":8},"end":{"line":93,"column":97}},"14":{"start":{"line":94,"column":8},"end":{"line":94,"column":43}},"15":{"start":{"line":95,"column":25},"end":{"line":95,"column":67}},"16":{"start":{"line":96,"column":8},"end":{"line":102,"column":10}},"17":{"start":{"line":103,"column":8},"end":{"line":103,"column":35}},"18":{"start":{"line":105,"column":8},"end":{"line":105,"column":26}},"19":{"start":{"line":108,"column":8},"end":{"line":108,"column":66}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":20}},"21":{"start":{"line":114,"column":8},"end":{"line":114,"column":38}},"22":{"start":{"line":116,"column":8},"end":{"line":116,"column":66}},"23":{"start":{"line":117,"column":8},"end":{"line":117,"column":72}},"24":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"25":{"start":{"line":119,"column":22},"end":{"line":119,"column":42}},"26":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"27":{"start":{"line":121,"column":8},"end":{"line":121,"column":63}},"28":{"start":{"line":122,"column":8},"end":{"line":122,"column":74}},"29":{"start":{"line":123,"column":22},"end":{"line":123,"column":55}},"30":{"start":{"line":124,"column":8},"end":{"line":124,"column":92}},"31":{"start":{"line":126,"column":20},"end":{"line":126,"column":51}},"32":{"start":{"line":127,"column":8},"end":{"line":127,"column":52}},"33":{"start":{"line":128,"column":23},"end":{"line":128,"column":57}},"34":{"start":{"line":129,"column":8},"end":{"line":129,"column":68}},"35":{"start":{"line":131,"column":19},"end":{"line":131,"column":49}},"36":{"start":{"line":133,"column":8},"end":{"line":133,"column":82}},"37":{"start":{"line":134,"column":8},"end":{"line":134,"column":62}},"38":{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},"39":{"start":{"line":142,"column":12},"end":{"line":145,"column":13}},"40":{"start":{"line":143,"column":16},"end":{"line":143,"column":62}},"41":{"start":{"line":150,"column":8},"end":{"line":150,"column":45}},"42":{"start":{"line":151,"column":21},"end":{"line":151,"column":54}},"43":{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},"44":{"start":{"line":153,"column":12},"end":{"line":153,"column":51}},"45":{"start":{"line":154,"column":12},"end":{"line":154,"column":66}},"46":{"start":{"line":156,"column":12},"end":{"line":156,"column":67}},"47":{"start":{"line":158,"column":12},"end":{"line":158,"column":85}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":36},"end":{"line":9,"column":37}},"loc":{"start":{"line":9,"column":90},"end":{"line":76,"column":1}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":79,"column":4},"end":{"line":79,"column":5}},"loc":{"start":{"line":79,"column":16},"end":{"line":111,"column":5}},"line":79},"2":{"name":"(anonymous_2)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":5}},"loc":{"start":{"line":113,"column":20},"end":{"line":147,"column":5}},"line":113},"3":{"name":"(anonymous_3)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":5}},"loc":{"start":{"line":149,"column":19},"end":{"line":164,"column":5}},"line":149}},"branchMap":{"0":{"loc":{"start":{"line":82,"column":20},"end":{"line":82,"column":61}},"type":"binary-expr","locations":[{"start":{"line":82,"column":20},"end":{"line":82,"column":55}},{"start":{"line":82,"column":59},"end":{"line":82,"column":61}}],"line":82},"1":{"loc":{"start":{"line":89,"column":37},"end":{"line":89,"column":99}},"type":"binary-expr","locations":[{"start":{"line":89,"column":37},"end":{"line":89,"column":89}},{"start":{"line":89,"column":93},"end":{"line":89,"column":99}}],"line":89},"2":{"loc":{"start":{"line":92,"column":21},"end":{"line":92,"column":74}},"type":"binary-expr","locations":[{"start":{"line":92,"column":21},"end":{"line":92,"column":44}},{"start":{"line":92,"column":48},"end":{"line":92,"column":74}}],"line":92},"3":{"loc":{"start":{"line":124,"column":43},"end":{"line":124,"column":90}},"type":"binary-expr","locations":[{"start":{"line":124,"column":43},"end":{"line":124,"column":50}},{"start":{"line":124,"column":54},"end":{"line":124,"column":90}}],"line":124},"4":{"loc":{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},"type":"if","locations":[{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},{"start":{},"end":{}}],"line":141},"5":{"loc":{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},{"start":{"line":155,"column":15},"end":{"line":162,"column":9}}],"line":152}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d1077028bcc00b4ae50b03ce5971eeb7324d4a6a"} +,"/home/runner/work/blockpy/blockpy/src/engine/on_run.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_run.js","statementMap":{"0":{"start":{"line":6,"column":18},"end":{"line":6,"column":59}},"1":{"start":{"line":7,"column":19},"end":{"line":7,"column":49}},"2":{"start":{"line":8,"column":18},"end":{"line":8,"column":46}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":40}},"4":{"start":{"line":12,"column":33},"end":{"line":12,"column":71}},"5":{"start":{"line":13,"column":30},"end":{"line":13,"column":35}},"6":{"start":{"line":17,"column":36},"end":{"line":98,"column":1}},"7":{"start":{"line":18,"column":19},"end":{"line":18,"column":47}},"8":{"start":{"line":19,"column":20},"end":{"line":19,"column":43}},"9":{"start":{"line":23,"column":4},"end":{"line":97,"column":2}},"10":{"start":{"line":102,"column":8},"end":{"line":102,"column":26}},"11":{"start":{"line":103,"column":8},"end":{"line":103,"column":45}},"12":{"start":{"line":104,"column":8},"end":{"line":104,"column":55}},"13":{"start":{"line":106,"column":26},"end":{"line":106,"column":75}},"14":{"start":{"line":108,"column":8},"end":{"line":108,"column":48}},"15":{"start":{"line":110,"column":21},"end":{"line":110,"column":54}},"16":{"start":{"line":112,"column":27},"end":{"line":112,"column":52}},"17":{"start":{"line":113,"column":8},"end":{"line":113,"column":31}},"18":{"start":{"line":114,"column":29},"end":{"line":114,"column":38}},"19":{"start":{"line":115,"column":21},"end":{"line":115,"column":74}},"20":{"start":{"line":116,"column":8},"end":{"line":116,"column":97}},"21":{"start":{"line":117,"column":25},"end":{"line":117,"column":67}},"22":{"start":{"line":119,"column":8},"end":{"line":125,"column":10}},"23":{"start":{"line":134,"column":8},"end":{"line":134,"column":35}},"24":{"start":{"line":136,"column":8},"end":{"line":136,"column":33}},"25":{"start":{"line":138,"column":8},"end":{"line":138,"column":20}},"26":{"start":{"line":145,"column":8},"end":{"line":145,"column":66}},"27":{"start":{"line":146,"column":8},"end":{"line":146,"column":72}},"28":{"start":{"line":147,"column":8},"end":{"line":147,"column":24}},"29":{"start":{"line":148,"column":22},"end":{"line":148,"column":41}},"30":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"31":{"start":{"line":150,"column":8},"end":{"line":150,"column":74}},"32":{"start":{"line":151,"column":22},"end":{"line":151,"column":55}},"33":{"start":{"line":152,"column":8},"end":{"line":152,"column":92}},"34":{"start":{"line":154,"column":20},"end":{"line":154,"column":51}},"35":{"start":{"line":155,"column":8},"end":{"line":155,"column":48}},"36":{"start":{"line":156,"column":23},"end":{"line":156,"column":57}},"37":{"start":{"line":157,"column":8},"end":{"line":157,"column":42}},"38":{"start":{"line":158,"column":8},"end":{"line":158,"column":48}},"39":{"start":{"line":160,"column":19},"end":{"line":160,"column":49}},"40":{"start":{"line":162,"column":8},"end":{"line":162,"column":82}},"41":{"start":{"line":163,"column":8},"end":{"line":163,"column":62}},"42":{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},"43":{"start":{"line":171,"column":12},"end":{"line":174,"column":13}},"44":{"start":{"line":172,"column":16},"end":{"line":172,"column":62}},"45":{"start":{"line":179,"column":8},"end":{"line":179,"column":46}},"46":{"start":{"line":180,"column":21},"end":{"line":180,"column":54}},"47":{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},"48":{"start":{"line":182,"column":12},"end":{"line":182,"column":51}},"49":{"start":{"line":183,"column":12},"end":{"line":183,"column":66}},"50":{"start":{"line":185,"column":12},"end":{"line":185,"column":67}},"51":{"start":{"line":187,"column":12},"end":{"line":187,"column":85}}},"fnMap":{"0":{"name":"findActualInstructorOffset","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":42}},"loc":{"start":{"line":5,"column":59},"end":{"line":10,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":36},"end":{"line":17,"column":37}},"loc":{"start":{"line":17,"column":91},"end":{"line":98,"column":1}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":16},"end":{"line":139,"column":5}},"line":101},"3":{"name":"(anonymous_3)","decl":{"start":{"line":141,"column":4},"end":{"line":141,"column":5}},"loc":{"start":{"line":141,"column":20},"end":{"line":176,"column":5}},"line":141},"4":{"name":"(anonymous_4)","decl":{"start":{"line":178,"column":4},"end":{"line":178,"column":5}},"loc":{"start":{"line":178,"column":19},"end":{"line":193,"column":5}},"line":178}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":11},"end":{"line":9,"column":39}},"type":"cond-expr","locations":[{"start":{"line":9,"column":20},"end":{"line":9,"column":34}},{"start":{"line":9,"column":38},"end":{"line":9,"column":39}}],"line":9},"1":{"loc":{"start":{"line":19,"column":20},"end":{"line":19,"column":43}},"type":"cond-expr","locations":[{"start":{"line":19,"column":28},"end":{"line":19,"column":34}},{"start":{"line":19,"column":36},"end":{"line":19,"column":43}}],"line":19},"2":{"loc":{"start":{"line":115,"column":21},"end":{"line":115,"column":74}},"type":"binary-expr","locations":[{"start":{"line":115,"column":21},"end":{"line":115,"column":44}},{"start":{"line":115,"column":48},"end":{"line":115,"column":74}}],"line":115},"3":{"loc":{"start":{"line":152,"column":43},"end":{"line":152,"column":90}},"type":"binary-expr","locations":[{"start":{"line":152,"column":43},"end":{"line":152,"column":50}},{"start":{"line":152,"column":54},"end":{"line":152,"column":90}}],"line":152},"4":{"loc":{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},"type":"if","locations":[{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},{"start":{},"end":{}}],"line":170},"5":{"loc":{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},"type":"if","locations":[{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},{"start":{"line":184,"column":15},"end":{"line":191,"column":9}}],"line":181}},"s":{"0":0,"1":0,"2":0,"3":0,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"97a454929d49cc8293ce9f587ea3503372792ea3"} +,"/home/runner/work/blockpy/blockpy/src/engine/on_sample.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_sample.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":6,"column":8},"end":{"line":6,"column":36}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":55}},"3":{"start":{"line":9,"column":8},"end":{"line":9,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":10,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"0d68c232ad5d23f4558f8762cebf004d92aa5207"} +,"/home/runner/work/blockpy/blockpy/src/engine/run.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/run.js","statementMap":{"0":{"start":{"line":6,"column":8},"end":{"line":6,"column":65}},"1":{"start":{"line":7,"column":8},"end":{"line":7,"column":33}},"2":{"start":{"line":8,"column":8},"end":{"line":8,"column":62}},"3":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"4":{"start":{"line":10,"column":12},"end":{"line":10,"column":27}},"5":{"start":{"line":13,"column":8},"end":{"line":13,"column":99}},"6":{"start":{"line":14,"column":8},"end":{"line":14,"column":81}},"7":{"start":{"line":16,"column":8},"end":{"line":16,"column":26}},"8":{"start":{"line":18,"column":8},"end":{"line":18,"column":23}},"9":{"start":{"line":19,"column":8},"end":{"line":19,"column":27}},"10":{"start":{"line":21,"column":8},"end":{"line":24,"column":10}},"11":{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},"12":{"start":{"line":27,"column":12},"end":{"line":27,"column":47}},"13":{"start":{"line":29,"column":27},"end":{"line":29,"column":66}},"14":{"start":{"line":30,"column":20},"end":{"line":30,"column":41}},"15":{"start":{"line":31,"column":21},"end":{"line":31,"column":58}},"16":{"start":{"line":32,"column":8},"end":{"line":32,"column":113}},"17":{"start":{"line":33,"column":8},"end":{"line":33,"column":115}},"18":{"start":{"line":35,"column":8},"end":{"line":35,"column":33}},"19":{"start":{"line":37,"column":8},"end":{"line":37,"column":26}},"20":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"21":{"start":{"line":43,"column":8},"end":{"line":43,"column":35}},"22":{"start":{"line":44,"column":22},"end":{"line":47,"column":9}},"23":{"start":{"line":46,"column":70},"end":{"line":46,"column":82}},"24":{"start":{"line":48,"column":8},"end":{"line":48,"column":106}},"25":{"start":{"line":49,"column":8},"end":{"line":49,"column":55}},"26":{"start":{"line":50,"column":8},"end":{"line":50,"column":53}},"27":{"start":{"line":51,"column":8},"end":{"line":51,"column":62}},"28":{"start":{"line":52,"column":8},"end":{"line":52,"column":62}},"29":{"start":{"line":53,"column":8},"end":{"line":53,"column":24}},"30":{"start":{"line":54,"column":21},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":23},"end":{"line":55,"column":36}},"32":{"start":{"line":56,"column":8},"end":{"line":56,"column":59}},"33":{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},"34":{"start":{"line":58,"column":12},"end":{"line":58,"column":53}},"35":{"start":{"line":60,"column":8},"end":{"line":75,"column":11}},"36":{"start":{"line":61,"column":12},"end":{"line":61,"column":68}},"37":{"start":{"line":62,"column":12},"end":{"line":62,"column":28}},"38":{"start":{"line":63,"column":12},"end":{"line":73,"column":14}},"39":{"start":{"line":66,"column":68},"end":{"line":66,"column":74}},"40":{"start":{"line":67,"column":75},"end":{"line":67,"column":89}},"41":{"start":{"line":67,"column":100},"end":{"line":67,"column":106}},"42":{"start":{"line":74,"column":12},"end":{"line":74,"column":22}},"43":{"start":{"line":79,"column":8},"end":{"line":79,"column":44}},"44":{"start":{"line":80,"column":8},"end":{"line":80,"column":63}},"45":{"start":{"line":81,"column":21},"end":{"line":81,"column":54}},"46":{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},"47":{"start":{"line":83,"column":12},"end":{"line":83,"column":105}},"48":{"start":{"line":85,"column":12},"end":{"line":85,"column":121}},"49":{"start":{"line":87,"column":8},"end":{"line":87,"column":24}},"50":{"start":{"line":88,"column":8},"end":{"line":100,"column":11}},"51":{"start":{"line":89,"column":12},"end":{"line":98,"column":14}},"52":{"start":{"line":93,"column":68},"end":{"line":93,"column":74}},"53":{"start":{"line":94,"column":75},"end":{"line":94,"column":89}},"54":{"start":{"line":94,"column":100},"end":{"line":94,"column":106}},"55":{"start":{"line":99,"column":12},"end":{"line":99,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":4},"end":{"line":5,"column":5}},"loc":{"start":{"line":5,"column":16},"end":{"line":40,"column":5}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":20},"end":{"line":76,"column":5}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":46,"column":62},"end":{"line":46,"column":63}},"loc":{"start":{"line":46,"column":70},"end":{"line":46,"column":82}},"line":46},"3":{"name":"(anonymous_3)","decl":{"start":{"line":60,"column":27},"end":{"line":60,"column":28}},"loc":{"start":{"line":60,"column":48},"end":{"line":75,"column":9}},"line":60},"4":{"name":"(anonymous_4)","decl":{"start":{"line":66,"column":63},"end":{"line":66,"column":64}},"loc":{"start":{"line":66,"column":68},"end":{"line":66,"column":74}},"line":66},"5":{"name":"(anonymous_5)","decl":{"start":{"line":67,"column":70},"end":{"line":67,"column":71}},"loc":{"start":{"line":67,"column":75},"end":{"line":67,"column":89}},"line":67},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":95},"end":{"line":67,"column":96}},"loc":{"start":{"line":67,"column":100},"end":{"line":67,"column":106}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":78,"column":4},"end":{"line":78,"column":5}},"loc":{"start":{"line":78,"column":19},"end":{"line":101,"column":5}},"line":78},"8":{"name":"(anonymous_8)","decl":{"start":{"line":88,"column":27},"end":{"line":88,"column":28}},"loc":{"start":{"line":88,"column":48},"end":{"line":100,"column":9}},"line":88},"9":{"name":"(anonymous_9)","decl":{"start":{"line":93,"column":63},"end":{"line":93,"column":64}},"loc":{"start":{"line":93,"column":68},"end":{"line":93,"column":74}},"line":93},"10":{"name":"(anonymous_10)","decl":{"start":{"line":94,"column":70},"end":{"line":94,"column":71}},"loc":{"start":{"line":94,"column":75},"end":{"line":94,"column":89}},"line":94},"11":{"name":"(anonymous_11)","decl":{"start":{"line":94,"column":95},"end":{"line":94,"column":96}},"loc":{"start":{"line":94,"column":100},"end":{"line":94,"column":106}},"line":94}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"type":"if","locations":[{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},{"start":{},"end":{}}],"line":9},"1":{"loc":{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},"type":"if","locations":[{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},{"start":{},"end":{}}],"line":26},"2":{"loc":{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},{"start":{},"end":{}}],"line":57},"3":{"loc":{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},"type":"if","locations":[{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},{"start":{"line":84,"column":15},"end":{"line":86,"column":9}}],"line":82},"4":{"loc":{"start":{"line":82,"column":12},"end":{"line":82,"column":60}},"type":"binary-expr","locations":[{"start":{"line":82,"column":12},"end":{"line":82,"column":33}},{"start":{"line":82,"column":37},"end":{"line":82,"column":60}}],"line":82}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"79f1f56e277c95e083c7132a080d19afeebf1d78"} +,"/home/runner/work/blockpy/blockpy/src/engine/sample.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/sample.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":8},"end":{"line":7,"column":36}},"2":{"start":{"line":8,"column":8},"end":{"line":8,"column":46}},"3":{"start":{"line":10,"column":8},"end":{"line":10,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":11,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2626dbbd5292f2decbe5e13df3db62cfb62098e2"} +,"/home/runner/work/blockpy/blockpy/src/engine/student.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/student.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":23},"end":{"line":7,"column":47}},"2":{"start":{"line":8,"column":8},"end":{"line":9,"column":83}},"3":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"4":{"start":{"line":10,"column":8},"end":{"line":10,"column":46}},"5":{"start":{"line":12,"column":8},"end":{"line":12,"column":55}},"6":{"start":{"line":15,"column":8},"end":{"line":15,"column":51}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":76}},"8":{"start":{"line":22,"column":8},"end":{"line":22,"column":20}},"9":{"start":{"line":26,"column":20},"end":{"line":26,"column":81}},"10":{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},"11":{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},"12":{"start":{"line":30,"column":16},"end":{"line":30,"column":58}},"13":{"start":{"line":32,"column":16},"end":{"line":32,"column":76}},"14":{"start":{"line":35,"column":12},"end":{"line":35,"column":36}},"15":{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},"16":{"start":{"line":41,"column":12},"end":{"line":41,"column":60}},"17":{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},"18":{"start":{"line":43,"column":12},"end":{"line":43,"column":53}},"19":{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},"20":{"start":{"line":45,"column":12},"end":{"line":45,"column":77}},"21":{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},"22":{"start":{"line":47,"column":12},"end":{"line":47,"column":54}},"23":{"start":{"line":49,"column":24},"end":{"line":49,"column":85}},"24":{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},"25":{"start":{"line":51,"column":16},"end":{"line":51,"column":81}},"26":{"start":{"line":53,"column":16},"end":{"line":53,"column":40}},"27":{"start":{"line":59,"column":8},"end":{"line":59,"column":65}},"28":{"start":{"line":63,"column":8},"end":{"line":65,"column":50}},"29":{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},"30":{"start":{"line":85,"column":30},"end":{"line":85,"column":62}},"31":{"start":{"line":86,"column":12},"end":{"line":86,"column":87}},"32":{"start":{"line":90,"column":12},"end":{"line":100,"column":15}},"33":{"start":{"line":101,"column":12},"end":{"line":101,"column":63}},"34":{"start":{"line":102,"column":12},"end":{"line":102,"column":58}},"35":{"start":{"line":113,"column":24},"end":{"line":113,"column":49}},"36":{"start":{"line":114,"column":8},"end":{"line":114,"column":78}},"37":{"start":{"line":115,"column":8},"end":{"line":115,"column":72}},"38":{"start":{"line":116,"column":8},"end":{"line":116,"column":69}},"39":{"start":{"line":117,"column":8},"end":{"line":117,"column":72}},"40":{"start":{"line":118,"column":8},"end":{"line":118,"column":69}},"41":{"start":{"line":119,"column":8},"end":{"line":119,"column":77}},"42":{"start":{"line":123,"column":27},"end":{"line":123,"column":36}},"43":{"start":{"line":124,"column":24},"end":{"line":137,"column":9}},"44":{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},"45":{"start":{"line":126,"column":16},"end":{"line":126,"column":46}},"46":{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},"47":{"start":{"line":129,"column":16},"end":{"line":129,"column":71}},"48":{"start":{"line":129,"column":49},"end":{"line":129,"column":69}},"49":{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},"50":{"start":{"line":132,"column":16},"end":{"line":132,"column":73}},"51":{"start":{"line":132,"column":51},"end":{"line":132,"column":71}},"52":{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},"53":{"start":{"line":135,"column":16},"end":{"line":135,"column":76}},"54":{"start":{"line":135,"column":54},"end":{"line":135,"column":74}},"55":{"start":{"line":138,"column":8},"end":{"line":138,"column":23}},"56":{"start":{"line":139,"column":8},"end":{"line":139,"column":40}},"57":{"start":{"line":146,"column":21},"end":{"line":146,"column":54}},"58":{"start":{"line":148,"column":20},"end":{"line":148,"column":22}},"59":{"start":{"line":151,"column":8},"end":{"line":166,"column":9}},"60":{"start":{"line":152,"column":24},"end":{"line":152,"column":58}},"61":{"start":{"line":153,"column":12},"end":{"line":153,"column":73}},"62":{"start":{"line":154,"column":12},"end":{"line":154,"column":39}},"63":{"start":{"line":157,"column":12},"end":{"line":162,"column":14}},"64":{"start":{"line":163,"column":12},"end":{"line":163,"column":33}},"65":{"start":{"line":164,"column":12},"end":{"line":164,"column":50}},"66":{"start":{"line":165,"column":12},"end":{"line":165,"column":25}},"67":{"start":{"line":168,"column":8},"end":{"line":173,"column":10}},"68":{"start":{"line":174,"column":8},"end":{"line":174,"column":20}},"69":{"start":{"line":178,"column":21},"end":{"line":178,"column":54}},"70":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"71":{"start":{"line":180,"column":12},"end":{"line":180,"column":92}},"72":{"start":{"line":182,"column":12},"end":{"line":182,"column":80}},"73":{"start":{"line":187,"column":21},"end":{"line":187,"column":54}},"74":{"start":{"line":188,"column":23},"end":{"line":188,"column":52}},"75":{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},"76":{"start":{"line":190,"column":30},"end":{"line":190,"column":100}},"77":{"start":{"line":191,"column":26},"end":{"line":191,"column":78}},"78":{"start":{"line":192,"column":12},"end":{"line":192,"column":69}},"79":{"start":{"line":193,"column":12},"end":{"line":193,"column":114}},"80":{"start":{"line":194,"column":12},"end":{"line":194,"column":99}},"81":{"start":{"line":194,"column":36},"end":{"line":194,"column":97}},"82":{"start":{"line":195,"column":12},"end":{"line":195,"column":31}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":23,"column":5}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":8,"column":31},"end":{"line":8,"column":32}},"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"line":9},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":4},"end":{"line":25,"column":5}},"loc":{"start":{"line":25,"column":23},"end":{"line":37,"column":5}},"line":25},"3":{"name":"(anonymous_3)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":25},"end":{"line":56,"column":5}},"line":39},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":25},"end":{"line":60,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":4},"end":{"line":62,"column":5}},"loc":{"start":{"line":62,"column":26},"end":{"line":66,"column":5}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":84},"end":{"line":104,"column":5}},"line":80},"7":{"name":"(anonymous_7)","decl":{"start":{"line":112,"column":4},"end":{"line":112,"column":5}},"loc":{"start":{"line":112,"column":15},"end":{"line":120,"column":5}},"line":112},"8":{"name":"(anonymous_8)","decl":{"start":{"line":122,"column":4},"end":{"line":122,"column":5}},"loc":{"start":{"line":122,"column":18},"end":{"line":140,"column":5}},"line":122},"9":{"name":"(anonymous_9)","decl":{"start":{"line":124,"column":24},"end":{"line":124,"column":25}},"loc":{"start":{"line":124,"column":34},"end":{"line":137,"column":9}},"line":124},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":34},"end":{"line":129,"column":35}},"loc":{"start":{"line":129,"column":49},"end":{"line":129,"column":69}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":132,"column":36},"end":{"line":132,"column":37}},"loc":{"start":{"line":132,"column":51},"end":{"line":132,"column":71}},"line":132},"12":{"name":"(anonymous_12)","decl":{"start":{"line":135,"column":39},"end":{"line":135,"column":40}},"loc":{"start":{"line":135,"column":54},"end":{"line":135,"column":74}},"line":135},"13":{"name":"(anonymous_13)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":18},"end":{"line":175,"column":5}},"line":145},"14":{"name":"(anonymous_14)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":17},"end":{"line":184,"column":5}},"line":177},"15":{"name":"(anonymous_15)","decl":{"start":{"line":186,"column":4},"end":{"line":186,"column":5}},"loc":{"start":{"line":186,"column":25},"end":{"line":197,"column":5}},"line":186},"16":{"name":"(anonymous_16)","decl":{"start":{"line":194,"column":30},"end":{"line":194,"column":31}},"loc":{"start":{"line":194,"column":36},"end":{"line":194,"column":97}},"line":194}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"type":"cond-expr","locations":[{"start":{"line":9,"column":67},"end":{"line":9,"column":75}},{"start":{"line":9,"column":78},"end":{"line":9,"column":82}}],"line":9},"1":{"loc":{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},{"start":{"line":34,"column":15},"end":{"line":36,"column":9}}],"line":28},"2":{"loc":{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},"type":"if","locations":[{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},{"start":{"line":31,"column":19},"end":{"line":33,"column":13}}],"line":29},"3":{"loc":{"start":{"line":29,"column":16},"end":{"line":29,"column":83}},"type":"binary-expr","locations":[{"start":{"line":29,"column":16},"end":{"line":29,"column":31}},{"start":{"line":29,"column":35},"end":{"line":29,"column":83}}],"line":29},"4":{"loc":{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},{"start":{"line":42,"column":15},"end":{"line":55,"column":9}}],"line":40},"5":{"loc":{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},{"start":{"line":44,"column":15},"end":{"line":55,"column":9}}],"line":42},"6":{"loc":{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},{"start":{"line":46,"column":15},"end":{"line":55,"column":9}}],"line":44},"7":{"loc":{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},{"start":{"line":48,"column":15},"end":{"line":55,"column":9}}],"line":46},"8":{"loc":{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},"type":"if","locations":[{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},{"start":{"line":52,"column":19},"end":{"line":54,"column":13}}],"line":50},"9":{"loc":{"start":{"line":63,"column":15},"end":{"line":65,"column":49}},"type":"binary-expr","locations":[{"start":{"line":63,"column":15},"end":{"line":63,"column":54}},{"start":{"line":64,"column":12},"end":{"line":64,"column":49}},{"start":{"line":65,"column":12},"end":{"line":65,"column":49}}],"line":63},"10":{"loc":{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},{"start":{},"end":{}}],"line":81},"11":{"loc":{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},"type":"if","locations":[{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},{"start":{},"end":{}}],"line":125},"12":{"loc":{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},"type":"if","locations":[{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},{"start":{},"end":{}}],"line":128},"13":{"loc":{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},"type":"if","locations":[{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},{"start":{},"end":{}}],"line":131},"14":{"loc":{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},"type":"if","locations":[{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},{"start":{},"end":{}}],"line":134},"15":{"loc":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"type":"if","locations":[{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},{"start":{"line":181,"column":15},"end":{"line":183,"column":9}}],"line":179},"16":{"loc":{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},{"start":{},"end":{}}],"line":189}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c681a712b4588cb5a41c3d6475d9460936319f75"} +} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 000000000..f418035b4 --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js new file mode 100644 index 000000000..530d1ed2b --- /dev/null +++ b/coverage/lcov-report/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 6.91% + Statements + 212/3065 +
+ + +
+ 1.58% + Branches + 20/1258 +
+ + +
+ 3.37% + Functions + 24/711 +
+ + +
+ 6.84% + Lines + 206/3008 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
8%168/20981.87%18/9613.72%18/4837.94%164/2065
src/editor +
+
7.06%37/5241.28%2/1564.41%6/1366.86%35/510
src/engine +
+
1.58%7/4430%0/1410%0/921.61%7/433
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 000000000..b317a7cda --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 000000000..b3225238f --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js new file mode 100644 index 000000000..4ed70ae5a --- /dev/null +++ b/coverage/lcov-report/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/coverage/lcov-report/src/blockpy.js.html b/coverage/lcov-report/src/blockpy.js.html new file mode 100644 index 000000000..aa72a373b --- /dev/null +++ b/coverage/lcov-report/src/blockpy.js.html @@ -0,0 +1,3931 @@ + + + + + + Code coverage report for src/blockpy.js + + + + + + + + + +
+
+

All files / src blockpy.js

+
+ +
+ 0.23% + Statements + 1/433 +
+ + +
+ 0% + Branches + 0/301 +
+ + +
+ 0% + Functions + 0/134 +
+ + +
+ 0.23% + Lines + 1/432 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740 +741 +742 +743 +744 +745 +746 +747 +748 +749 +750 +751 +752 +753 +754 +755 +756 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796 +797 +798 +799 +800 +801 +802 +803 +804 +805 +806 +807 +808 +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +836 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +856 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884 +885 +886 +887 +888 +889 +890 +891 +892 +893 +894 +895 +896 +897 +898 +899 +900 +901 +902 +903 +904 +905 +906 +907 +908 +909 +910 +911 +912 +913 +914 +915 +916 +917 +918 +919 +920 +921 +922 +923 +924 +925 +926 +927 +928 +929 +930 +931 +932 +933 +934 +935 +936 +937 +938 +939 +940 +941 +942 +943 +944 +945 +946 +947 +948 +949 +950 +951 +952 +953 +954 +955 +956 +957 +958 +959 +960 +961 +962 +963 +964 +965 +966 +967 +968 +969 +970 +971 +972 +973 +974 +975 +976 +977 +978 +979 +980 +981 +982 +983 +984 +985 +986 +987 +988 +989 +990 +991 +992 +993 +994 +995 +996 +997 +998 +999 +1000 +1001 +1002 +1003 +1004 +1005 +1006 +1007 +1008 +1009 +1010 +1011 +1012 +1013 +1014 +1015 +1016 +1017 +1018 +1019 +1020 +1021 +1022 +1023 +1024 +1025 +1026 +1027 +1028 +1029 +1030 +1031 +1032 +1033 +1034 +1035 +1036 +1037 +1038 +1039 +1040 +1041 +1042 +1043 +1044 +1045 +1046 +1047 +1048 +1049 +1050 +1051 +1052 +1053 +1054 +1055 +1056 +1057 +1058 +1059 +1060 +1061 +1062 +1063 +1064 +1065 +1066 +1067 +1068 +1069 +1070 +1071 +1072 +1073 +1074 +1075 +1076 +1077 +1078 +1079 +1080 +1081 +1082 +1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097 +1098 +1099 +1100 +1101 +1102 +1103 +1104 +1105 +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131 +1132 +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142 +1143 +1144 +1145 +1146 +1147 +1148 +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 +1175 +1176 +1177 +1178 +1179 +1180 +1181 +1182 +1183 +1184 +1185 +1186 +1187 +1188 +1189 +1190 +1191 +1192 +1193 +1194 +1195 +1196 +1197 +1198 +1199 +1200 +1201 +1202 +1203 +1204 +1205 +1206 +1207 +1208 +1209 +1210 +1211 +1212 +1213 +1214 +1215 +1216 +1217 +1218 +1219 +1220 +1221 +1222 +1223 +1224 +1225 +1226 +1227 +1228 +1229 +1230 +1231 +1232 +1233 +1234 +1235 +1236 +1237 +1238 +1239 +1240 +1241 +1242 +1243 +1244 +1245 +1246 +1247 +1248 +1249 +1250 +1251 +1252 +1253 +1254 +1255 +1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * @fileoverview Starting point of the BlockPy application, containing the main
+ * BlockPy class.
+ */
+import "./css/blockpy.css";
+import "./css/bootstrap_retheme.css";
+import $ from "jquery";
+import {$builtinmodule as imageModule} from "skulpt_modules/image";
+import {$builtinmodule as weakrefModule} from "skulpt_modules/weakref";
+//import {$builtinmodule as matplotlibModule} from "skulpt_modules/matplotlib2";
+import {LocalStorageWrapper} from "storage.js";
+import {EditorsEnum} from "editors.js";
+import {DisplayModes} from "editor/python.js";
+import {StatusState} from "server.js";
+import {makeInterface, makeExtraInterfaceSubscriptions, SecondRowSecondPanelOptions} from "interface.js";
+import {Editors} from "editors.js";
+import {
+    BlockPyFileSystem,
+    loadConcatenatedFile,
+    makeModelFile,
+    observeConcatenatedFile,
+    UNDELETABLE_FILES,
+    UNRENAMABLE_FILES
+} from "./files";
+import {uploadFile, downloadFile} from "./editor/abstract_editor";
+import {BlockPyEngine} from "engine.js";
+import {AST_DESCRIPTIONS, BlockPyTrace} from "./trace";
+import {BlockPyConsole} from "./console";
+import {BlockPyFeedback} from "feedback.js";
+import {BlockPyServer} from "./server";
+import {BlockPyDialog} from "./dialog";
+import {AssigmentType, loadAssignmentSettings, makeAssignmentSettingsModel} from "./editor/assignment_settings";
+import {BlockPyCorgis, _IMPORTED_COMPLETE_DATASETS, _IMPORTED_DATASETS} from "./corgis";
+import {BlockPyHistory} from "./history";
+import {capitalize, extractPart, getCurrentTime} from "./utilities";
+import {SampleSubmission, SubmissionStatuses} from "./editor/sample_submissions";
+ 
+export {_IMPORTED_COMPLETE_DATASETS, _IMPORTED_DATASETS};
+ 
+const EDITOR_VERSION = "5.1.2";
+ 
+/**
+ * Major entry point for creating a BlockPy instance.
+ * Two most important fields are `model` and `components`.
+ * The `model` holds all the data about the interface.
+ * The `components` are references to the disparate parts of BlockPy.
+ *
+ * Most of this classes definition is just initializing the model and updating
+ * it on an assignment switch.
+ */
+export class BlockPy {
+    /**
+     * @param {Object} configuration - User level settings (e.g., what editor mode, whether to mute semantic errors, etc.)
+     * @param {Object} assignment - Assignment level settings (data about the loaded assignment, user, submission, etc.)
+     * @param {Object} submission - Includes the source code of any programs to be loaded
+     */
+    constructor(configuration, assignment, submission) {
+        this.initModel(configuration);
+        if (assignment !== undefined) {
+            this.setAssignment(configuration, assignment, submission);
+        }
+        this.initMain();
+    }
+ 
+    /**
+     * Initializes the BlockPy object by initializing its interface,
+     * model, and components.
+     *
+     */
+    initMain() {
+        this.initUtilities();
+        this.initModelMethods();
+        this.turnOnHacks();
+        this.initInterface();
+        this.applyModel();
+        this.initComponents();
+        this.makeExtraSubscriptions();
+        this.start();
+    };
+ 
+    /**
+     * Retrieves a default value or
+     * @param {string} key - the key to look up a value for
+     * @param {Object} defaultValue - if the key is not found anywhere, use this value
+     */
+    getSetting(key, defaultValue) {
+        if (key in this.initialConfiguration_) {
+            return this.initialConfiguration_[key];
+        } else if (this.localSettings_.has(key)) {
+            return this.localSettings_.get(key);
+        } else {
+            return defaultValue;
+        }
+    }
+ 
+    /**
+     * Initializes the model to its defaults.
+     *
+     * Categories:
+     *   * user: values for the current user (stored to server)
+     *   * assignment: values for the current assignment (stored to server)
+     *   * submission: values for the current submission (stored to server)
+     *   * display: flags related to current visibility (stored to localSettings)
+     *   * status: messages related to current status (not stored)
+     *   * execution: values related to last run (not stored)
+     *   * configuration: constant values related to setup (not stored)
+     */
+    initModel(configuration) {
+        // Connect to local storage
+        this.localSettings_ = new LocalStorageWrapper("localSettings");
+        this.initialConfiguration_ = configuration;
+        //console.log(configuration, configuration["submission.code"], configuration["partId"], extractPart(configuration["submission.code"] || "", configuration["partId"]));
+ 
+        this.model = {
+            user: {
+                id: ko.observable(configuration["user.id"]),
+                name: ko.observable(configuration["user.name"]),
+                /**
+                 * Whether you are an Owner (can modify the assignment), Grader (can view
+                 * the assignments' information) or Student (can not see any instructor stuff).
+                 * @type {bool}
+                 */
+                role: ko.observable(this.getSetting("user.role", "owner")),
+                /**
+                 * Current course for this user
+                 */
+                courseId: ko.observable(configuration["user.course_id"]),
+                /**
+                 * Current assignment group that this user is inside
+                 */
+                groupId: ko.observable(configuration["user.group_id"])
+            },
+            assignment: {
+                id: ko.observable(null),
+                name: ko.observable("Scratch Canvas"),
+                instructions: ko.observable("Welcome to BlockPy. Try editing and running the code below."),
+                /**
+                 * The human-friendly URL to use as a shortcut for this assignment
+                 */
+                url: ko.observable(""),
+                // TODO: warning message if maze
+                type: ko.observable(AssigmentType.BLOCKPY),
+                points: ko.observable(null),
+                startingCode: ko.observable(configuration["assignment.starting_code"] || ""),
+                onRun: ko.observable(configuration["assignment.on_run"] || ""),
+                onChange: ko.observable(configuration["assignment.on_change"] || null),
+                onEval: ko.observable(configuration["assignment.on_eval"] || null),
+                extraInstructorFiles: ko.observableArray(loadConcatenatedFile(configuration["assignment.extra_instructor_files"]) || []),
+                extraStartingFiles: ko.observableArray([]),
+                forkedId: ko.observable(null),
+                forkedVersion: ko.observable(null),
+                ownerId: ko.observable(null),
+                courseId: ko.observable(null),
+                version: ko.observable(null),
+                tags: ko.observableArray([]),
+                sampleSubmissions: ko.observableArray([]),
+                reviewed: ko.observable(configuration["assignment.reviewed"]),
+                public: ko.observable(configuration["assignment.public"]),
+                hidden: ko.observable(configuration["assignment.hidden"]),
+                ipRanges: ko.observable(configuration["assignment.ip_ranges"]),
+                settings: makeAssignmentSettingsModel(configuration)
+            },
+            submission: {
+                id: ko.observable(null),
+                code: ko.observable(extractPart(configuration["submission.code"] || "", configuration["partId"]) || ""),
+                extraFiles: ko.observableArray([]),
+                url: ko.observable(""),
+                endpoint: ko.observable(""),
+                score: ko.observable(0),
+                correct: ko.observable(false),
+                // assignmentId inferred from assignment.id
+                // courseId inferred from user.courseId
+                // userId inferred from user.id
+                // assignmentVersion inferred from assignment.version
+                version: ko.observable(0),
+                submissionStatus: ko.observable("Started"),
+                gradingStatus: ko.observable("NotReady"),
+                ownerId: ko.observable(null)
+            },
+            display: {
+                /**
+                 * Currently visible File, if applicable
+                 * @type {String}
+                 */
+                filename: ko.observable(null),
+                /**
+                 * Whether or not to be presented with the instructor settings and files
+                 * @type {bool}
+                 */
+                instructor: ko.observable(""+this.getSetting("display.instructor", "false")==="true"),
+                /**
+                 * Whether or not to prevent the printer from showing things
+                 */
+                mutePrinter: ko.observable(false),
+                /**
+                 * (Python Views) The current editor mode.
+                 * @type {DisplayModes}
+                 */
+                pythonMode: ko.observable(this.getSetting("display.python.mode", DisplayModes.TEXT)),
+                /**
+                 * Whether or not History mode is engaged.
+                 * @type {bool}
+                 */
+                historyMode: ko.observable(false),
+                /**
+                 * Whether or not to be auto-saving changes in Python editor
+                 * If an integer, specifies the delay that should be used (microseconds).
+                 * This is never on in non-Python editors.
+                 * @type {bool|int}
+                 */
+                autoSave: ko.observable(true),
+                /**
+                 * Whether or not the console is full width and feedback is hidden
+                 */
+                bigConsole: ko.observable(false),
+                /**
+                 * The height to use for the console.
+                 *    If null, then let the height remain unchanged
+                 *    If a number, then the
+                 */
+                previousConsoleHeight: ko.observable(null),
+                currentConsoleHeight: ko.observable(null),
+                /**
+                 * Which panel to show in the second row's second column
+                 * @type {SecondRowSecondPanelOptions}
+                 */
+                secondRowSecondPanel: ko.observable(SecondRowSecondPanelOptions.FEEDBACK),
+                previousSecondRowSecondPanel: ko.observable(null),
+                /**
+                 * Whether or not to be tracing the code right now
+                 */
+                traceExecution: ko.observable(false),
+                /**
+                 * The list of promises to still resolve while loading datasets
+                 * @type {Array<Promise>}
+                 */
+                loadingDatasets: ko.observableArray([]),
+                /**
+                 * The temporary changed value of the instructions have been changed from what is in the assignment
+                 */
+                changedInstructions: ko.observable(null),
+                /**
+                 * A holder for the timer to trigger on-changes
+                 */
+                triggerOnChange: null,
+                /**
+                 * Whether the current feedback and output corresponds to the current submission.
+                 * This would be false if there is no feedback/output (i.e., code has not been run),
+                 * or if the user has modified the submission after the last run (e.g., by editing
+                 * the text).
+                 */
+                dirtySubmission: ko.observable(true),
+                /**
+                 *  Whether or not to make the BlockPy element in FULL SCREEN mode. Sadly, not fullscreen
+                 *  within the window, but FULL SCREEN. Very aggressive.
+                 */
+                fullscreen: ko.observable(false),
+                /**
+                 * User-supplied passcode to compare on the server against the current passcode.
+                 */
+                passcode: ko.observable(""),
+                /**
+                 * Whether or not to clear out inputs after a run/on_run cycle
+                 */
+                clearInputs: ko.observable(true),
+                /**
+                 * Whether or not images should be rendered (true), or just stay as text code (false).
+                 */
+                renderImages: ko.observable(true),
+                editorVersion: EDITOR_VERSION,
+                readOnly: ko.observable(this.getSetting("display.read_only", "false").toString()==="true"),
+                /**
+                 * Uploaded files are ones that have been listed by the remote
+                 */
+                uploadedFiles: ko.observable(null),
+                /**
+                 * Backup copy of the latest known full code for the Submission. This is relevant if there was a
+                 * PartID specified, in which case the submission.code in the model is only showing what we know
+                 * locally.
+                 */
+                backupSubmissionCode: ko.observable(configuration["submission.code"] || ""),
+                /**
+                 * Controls the rating system
+                 */
+                showRating: ko.observable(this.getSetting("display.showRating", "true").toString()==="true"),
+                /**
+                 * Whether the student has rated this current feedback
+                 */
+                hasRated: ko.observable(false),
+            },
+            status: {
+                // @type {ServerStatus}
+                loadAssignment: ko.observable(StatusState.READY),
+                loadAssignmentMessage: ko.observable(""),
+                // @type {ServerStatus}
+                loadHistory: ko.observable(StatusState.READY),
+                loadHistoryMessage: ko.observable(""),
+                // @type {ServerStatus}
+                loadFile: ko.observable(StatusState.READY),
+                loadFileMessage: ko.observable(""),
+                // @type {ServerStatus}
+                loadDataset: ko.observable(StatusState.READY),
+                loadDatasetMessage: ko.observable(""),
+                // @type {ServerStatus}
+                logEvent: ko.observable(StatusState.READY),
+                logEventMessage: ko.observable(""),
+                // @type {ServerStatus}
+                saveImage: ko.observable(StatusState.READY),
+                saveImageMessage: ko.observable(""),
+                // @type {ServerStatus}
+                saveFile: ko.observable(StatusState.READY),
+                saveFileMessage: ko.observable(""),
+                // @type {ServerStatus}
+                saveAssignment: ko.observable(StatusState.READY),
+                saveAssignmentMessage: ko.observable(""),
+                // @type {ServerStatus}
+                updateSubmission: ko.observable(StatusState.READY),
+                updateSubmissionMessage: ko.observable(""),
+                // @type {ServerStatus}
+                updateSubmissionStatus: ko.observable(StatusState.READY),
+                updateSubmissionStatusMessage: ko.observable(""),
+                // @type {ServerStatus}
+                listUploadedFiles: ko.observable(StatusState.READY),
+                listUploadedFilesMessage: ko.observable(""),
+                // @type {ServerStatus}
+                downloadFile: ko.observable(StatusState.READY),
+                downloadFileMessage: ko.observable(""),
+                // @type {ServerStatus}
+                uploadFile: ko.observable(StatusState.READY),
+                uploadFileMessage: ko.observable(""),
+                // @type {ServerStatus}
+                renameFile: ko.observable(StatusState.READY),
+                renameFileMessage: ko.observable(""),
+                // @type {ServerStatus}
+                externalAPI: ko.observable(StatusState.READY),
+                externalAPIMessage: ko.observable(""),
+                // @type {ServerStatus}
+                onExecution: ko.observable(StatusState.READY),
+            },
+            execution: {
+                // Information about in-progress executions
+                reports: {},
+                // list of Output objects
+                output: ko.observableArray([]),
+                // List of inputted strings
+                input: ko.observableArray([]),
+                inputIndex: ko.observable(0),
+                // Information related to a student run
+                student: {
+                    // str: the filename that was last executed and is associated with these results
+                    filename: ko.observable(null),
+                    // integer
+                    currentStep: ko.observable(null),
+                    // integer
+                    lastStep: ko.observable(null),
+                    // integer
+                    currentLine: ko.observable(null),
+                    lastLine: ko.observable(0),
+                    // array of simple objects
+                    currentTraceData: ko.observableArray([]),
+                    // integer
+                    currentTraceStep: ko.observable(0),
+                    // Actual execution results
+                    results: null,
+                    globals: ko.observable(null),
+                    calls: {}
+                },
+                instructor: {
+                    globals: null,
+                    sysmodules: undefined
+                },
+                // Information related to feedback from the instructor run
+                feedback: {
+                    // str (markdown)
+                    message: ko.observable("Ready"),
+                    category: ko.observable(null),
+                    label: ko.observable(null),
+                    hidden: ko.observable(false),
+                    linesError: ko.observableArray([]),
+                    linesUncovered: ko.observableArray([]),
+                    // The results of the last execution
+                    results: null,
+                },
+            },
+            configuration: {
+                /**
+                 * Functions to fire when certain events occur
+                 */
+                callbacks: {
+                    /**
+                     * When the student gets a success
+                     */
+                    "success": this.initialConfiguration_["callback.success"],
+                },
+                /**
+                 * Whether or not the server is connected.
+                 * @type {bool}
+                 */
+                serverConnected: ko.observable(this.getSetting("server.connected", true)),
+                // string
+                blocklyPath: this.initialConfiguration_["blockly.path"],
+                // string
+                attachmentPoint: this.initialConfiguration_["attachment.point"],
+                // JQuery object
+                container: null,
+                // Maps codes ('log_event', 'save_code') to URLs
+                urls: this.initialConfiguration_["urls"] || {},
+                /**
+                 * Unique Part ID that can distinguish this editor instance's region of the assignment.
+                 * It's possible that other editors may be attached to a different Part of the same assignmnet, on the
+                 * same page.
+                 * **/
+                partId: ko.observable(configuration["partId"] || ""),
+                accessToken: ko.observable(configuration["access_token"] || undefined),
+            }
+        };
+    };
+ 
+    /**
+     * Creates the interface
+     */
+    initInterface() {
+        let constants = this.model.configuration;
+        let gui = makeInterface(this);
+        constants.container = $(constants.attachmentPoint).html($(gui));
+    };
+ 
+    loadAssignment(assignment_id) {
+        this.components.server.loadAssignment(assignment_id);
+    }
+ 
+    loadTags(tags) {
+        // Already a JSON list representing tags
+    }
+ 
+    loadSampleSubmissions(samples) {
+        // Already a JSON list representing samples
+    }
+ 
+    loadNoSubmission(assignment) {
+        this.model.submission.code(assignment.starting_code);
+        loadConcatenatedFile(assignment.extra_starting_files, this.model.submission.extraFiles);
+    }
+ 
+    loadSubmission(submission, assignment) {
+        if (!submission) {
+            // TODO: Scarier "You are not logged in message"
+            this.loadNoSubmission(assignment);
+            return false;
+        }
+        // TODO: What if submissions' assignment version and the assignments' version conflict?
+        this.model.submission.id(submission.id);
+        this.model.display.backupSubmissionCode(submission.code);
+        this.model.submission.code(extractPart(submission.code, this.model.configuration.partId()) || "");
+        this.model.submission.correct(submission.correct);
+        this.model.submission.score(submission.score);
+        this.model.submission.endpoint(submission.endpoint);
+        this.model.submission.url(submission.url);
+        this.model.submission.version(submission.version);
+        this.model.submission.gradingStatus(submission.grading_status || SubmissionStatuses.UNKNOWN);
+        this.model.submission.submissionStatus(submission.submission_status || SubmissionStatuses.UNKNOWN);
+        this.model.submission.ownerId(submission.user_id);
+        this.model.user.courseId(submission.course_id);
+        loadConcatenatedFile(submission.extra_files, this.model.submission.extraFiles);
+    }
+ 
+    loadAssignmentData_(data) {
+        console.debug(data);
+        this.resetInterface();
+        this.components.fileSystem.dismountExtraFiles();
+        let wasServerConnected = this.model.configuration.serverConnected();
+        this.model.configuration.serverConnected(false);
+        let assignment = data.assignment;
+        this.model.assignment.id(assignment.id);
+        this.model.assignment.version(assignment.version);
+        this.model.assignment.courseId(assignment.course_id);
+        this.model.assignment.forkedId(assignment.forked_id);
+        this.model.assignment.forkedVersion(assignment.forked_version);
+        this.model.assignment.hidden(assignment.hidden);
+        this.model.assignment.reviewed(assignment.reviewed);
+        this.model.assignment.public(assignment.public);
+        this.model.assignment.type(assignment.type);
+        this.model.assignment.url(assignment.url);
+        this.model.assignment.points(assignment.points);
+        this.model.assignment.ipRanges(assignment.ip_ranges);
+        this.model.assignment.instructions(assignment.instructions);
+        this.model.assignment.name(assignment.name);
+        this.model.assignment.onChange(assignment.on_change || null);
+        if (assignment.on_change) {
+            this.components.fileSystem.newFile("!on_change.py", assignment.on_change);
+        }
+        this.model.assignment.onEval(assignment.on_eval || null);
+        if (assignment.on_eval) {
+            this.components.fileSystem.newFile("!on_eval.py", assignment.on_eval);
+        }
+        this.model.assignment.onRun(assignment.on_run);
+        this.model.assignment.startingCode(assignment.starting_code);
+        this.model.assignment.ownerId(assignment.owner_id);
+        this.loadTags(assignment.tags);
+        this.loadSampleSubmissions(assignment.sample_submissions);
+        loadConcatenatedFile(assignment.extra_instructor_files, this.model.assignment.extraInstructorFiles);
+        loadConcatenatedFile(assignment.extra_starting_files, this.model.assignment.extraStartingFiles);
+        loadAssignmentSettings(this.model, assignment.settings);
+        this.loadSubmission(data.submission, assignment);
+        this.model.display.dirtySubmission(true);
+        this.model.display.changedInstructions(null);
+        this.model.configuration.serverConnected(wasServerConnected);
+        this.components.corgis.loadDatasets(true);
+        this.components.pythonEditor.bm.refresh();
+        this.components.fileSystem.loadRemoteFiles();
+ 
+        this.components.server.setStatus("saveFile", StatusState.READY);
+    }
+ 
+    initModelMethods() {
+        let self = this;
+        let model = this.model;
+        model.ui = {
+            smallLayout: ko.pureComputed(()=>
+                !model.display.instructor() && model.assignment.settings.smallLayout()),
+            role: {
+                isGrader: ko.pureComputed(()=>
+                    model.user.role() === "owner" || model.user.role() === "grader")
+            },
+            instructions: {
+                isChanged: ko.pureComputed(() =>
+                    model.display.changedInstructions() !== null
+                ),
+                current: ko.pureComputed(() =>
+                    model.ui.instructions.isChanged() ?
+                        self.utilities.markdown(model.display.changedInstructions()) :
+                        self.utilities.markdown(model.assignment.instructions())
+                ),
+                reset: () =>
+                    model.display.changedInstructions(null)
+            },
+            menu: {
+                visible: ko.pureComputed(
+                    () =>
+                        model.display.instructor() || !model.assignment.settings.onlyInteractive()
+                ),
+                textFullscreen: ko.pureComputed(() =>
+                    (model.display.fullscreen()) ? "fa-compress-arrows-alt" : "fa-expand-arrows-alt"
+                ),
+                clickFullscreen: () =>{
+                    model.display.fullscreen(!model.display.fullscreen());
+                },
+                editInputs: () => {
+                    this.components.dialog.EDIT_INPUTS();
+                },
+                toggleImages: () => {
+                    if (model.display.renderImages()) {
+                        self.components.pythonEditor.bm.textEditor.disableImages();
+                    } else {
+                        self.components.pythonEditor.bm.textEditor.enableImages();
+                    }
+                    model.display.renderImages(!model.display.renderImages());
+                },
+                canMarkSubmitted: ko.pureComputed(() =>
+                    model.assignment.hidden() || model.assignment.reviewed() ||
+                    model.assignment.settings.canClose()
+                ),
+                textMarkSubmitted: ko.pureComputed(() => {
+                    if (model.ui.menu.isCompleted()) {
+                        return model.user.groupId() ? "Problem closed" : "Assignment closed";
+                    } else if (model.ui.menu.isSubmitted()) {
+                        return "Reopen for editing";
+                    } else if (model.display.dirtySubmission()) {
+                        return "Run";
+                    } else {
+                        if (!model.assignment.hidden() && model.submission.correct()) {
+                            return "Submit";
+                        } else {
+                            return "Submit early";
+                        }
+                    }
+                }),
+                clickMarkSubmitted: () => {
+                    if (model.ui.menu.isCompleted()) {
+                        alert("You cannot reopen closed assignments. Contact a grader!");
+                    } else if (model.ui.menu.isSubmitted()) {
+                        self.components.server.updateSubmissionStatus("inProgress");
+                    } else if (model.display.dirtySubmission()) {
+                        self.components.engine.delayedRun();
+                    } else {
+                        self.components.server.updateSubmissionStatus("Submitted");
+                    }
+                },
+                isSubmitted: ko.pureComputed(() =>
+                    (model.assignment.reviewed() || model.assignment.settings.canClose()) &&
+                    model.submission.submissionStatus().toLowerCase() === "submitted"
+                ),
+                isCompleted: ko.pureComputed(()=>
+                    model.submission.submissionStatus().toLowerCase() === "completed"
+                ),
+                showQueuedInputs: ko.pureComputed(() =>
+                    !model.assignment.settings.hideQueuedInputs()
+                ),
+                showClock: ko.pureComputed(() =>
+                    !model.assignment.settings.hasClock()
+                ),
+                canShare: ko.pureComputed(() =>
+                    model.configuration.urls["shareUrl"] !== undefined
+                ),
+                getShareUrl: (wasPrompted) => {
+                    const parts = ["group", model.user.courseId(), model.user.groupId(), model.assignment.id(), model.user.id()];
+                    /*const interestingDetails = {
+                        "when": new Date().toISOString(),
+                        // "feedback": model.execution.feedback.category() + "|" + model.execution.feedback.label(),
+                        // "wasPrompted": wasPrompted
+                    };
+                    parts.push(btoa(JSON.stringify(interestingDetails)));
+                    console.log(interestingDetails);*/
+                    parts.push(new Date().toISOString());
+ 
+                    // Base64 encode the parts
+                    const encoded = btoa(parts.join("_"));
+                    // Construct the target URL using model.configuration.urls["shareUrl"]
+                    const baseUrl = model.configuration.urls["shareUrl"];
+                    return baseUrl + (baseUrl.endsWith("/") ? "" : "/") + encoded;
+                },
+                startShare: (wasPrompted) => {
+                    this.components.dialog.START_SHARE(
+                        model.ui.menu.getShareUrl(wasPrompted),
+                        wasPrompted
+                    );
+                },
+            },
+            secondRow: {
+                width: ko.pureComputed(()=>
+                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
+                        "col-md-12" : "col-md-5"
+                ),
+                hideTraceButton: ko.pureComputed(()=>
+                    !model.display.instructor() && model.assignment.settings.hideTraceButton()
+                ),
+                isAllVisible: ko.pureComputed(() =>
+                    !model.assignment.settings.hideMiddlePanel()
+                ),
+                isFeedbackVisible: ko.pureComputed(() =>
+                    model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.FEEDBACK
+                ),
+                isTraceVisible: ko.pureComputed(() =>
+                    model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.TRACE
+                ),
+                isConsoleShowVisible: ko.pureComputed(() =>
+                    model.ui.secondRow.isFeedbackVisible() || model.ui.secondRow.isTraceVisible()
+                ),
+                switchLabel: ko.pureComputed(() =>
+                    model.execution.student.lastStep() !== null ?
+                        "View Trace" : ""
+                ),
+                advanceState: function () {
+                    let currentPanel = model.display.secondRowSecondPanel;
+                    if (currentPanel() === SecondRowSecondPanelOptions.NONE) {
+                        currentPanel(SecondRowSecondPanelOptions.FEEDBACK);
+                    } else if (currentPanel() === SecondRowSecondPanelOptions.TRACE) {
+                        currentPanel(SecondRowSecondPanelOptions.NONE);
+                    } else if (model.execution.student.lastStep() !== null) {
+                        currentPanel(SecondRowSecondPanelOptions.TRACE);
+                    } else {
+                        currentPanel(SecondRowSecondPanelOptions.NONE);
+                    }
+                },
+                makeWide: function () {
+                    const currentPanel = model.display.secondRowSecondPanel;
+                    model.display.previousSecondRowSecondPanel(currentPanel());
+                    currentPanel(SecondRowSecondPanelOptions.NONE);
+                },
+                restorePanel: function() {
+                    const oldPanel = model.display.previousSecondRowSecondPanel;
+                    if (oldPanel() !== null) {
+                        model.display.secondRowSecondPanel(oldPanel());
+                        oldPanel(null);
+                    }
+                }
+            },
+            console: {
+                size: ko.pureComputed(() =>
+                    (!model.display.instructor() && model.assignment.settings.smallLayout()) ||
+                    (model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.NONE) ?
+                        "col-md-12" :
+                        "col-md-6"
+                ),
+                hideEvaluate: ko.pureComputed( ()=>
+                    model.assignment.settings.hideEvaluate() || !model.execution.student.globals() ||
+                    model.status.onExecution() === StatusState.ACTIVE
+                )
+            },
+            feedback: {
+                badge: ko.pureComputed(function () {
+                    if (model.execution.feedback.category() === null) {
+                        return "label-none";
+                    }
+                    switch (model.execution.feedback.category().toLowerCase()) {
+                        default:
+                        case "none":
+                            return "label-none";
+                        case "runtime":
+                            return "label-runtime-error";
+                        case "syntax":
+                            return "label-syntax-error";
+                        case "editor":
+                            return "label-syntax-error";
+                        case "internal":
+                            return "label-internal-error";
+                        case "semantic":
+                        case "analyzer":
+                            return "label-semantic-error";
+                        case "feedback":
+                        case "instructor":
+                            return "label-feedback-error";
+                        case "complete":
+                            return "label-problem-complete";
+                        case "instructions":
+                            return "label-instructions";
+                        case "no errors":
+                            return "label-no-errors";
+                    }
+                }),
+                category: ko.pureComputed(function () {
+                    if (model.execution.feedback.category() === null) {
+                        return "";
+                    }
+                    switch (model.execution.feedback.category().toLowerCase()) {
+                        default:
+                        case "none":
+                            return "";
+                        case "runtime":
+                            return "Runtime Error";
+                        case "syntax":
+                            return "Syntax Error";
+                        case "editor":
+                            return "Editor Error";
+                        case "internal":
+                            return "Internal Error";
+                        case "semantic":
+                        case "analyzer":
+                            return "Algorithm Error";
+                        case "feedback":
+                        case "instructions":
+                            return "Instructions";
+                        case "instructor":
+                            return "Incorrect Answer";
+                        case "complete":
+                            return "Complete";
+                        case "no errors":
+                            return "No errors";
+                    }
+                }),
+                resetScore: () => {
+                    model.submission.score(0);
+                    model.submission.correct(false);
+                    self.components.server.updateSubmission(model.submission.score(), model.submission.correct(), true, true);
+                },
+                provideRatings: ko.pureComputed(() =>
+                    !model.assignment.hidden()
+                ),
+                flipRating: () => {
+                    const newState = !model.display.showRating();
+                    model.display.showRating(newState);
+                    self.localSettings_.set("display.showRating", newState.toString());
+                },
+                rate: (rating, suggestShare=false) => {
+                    self.components.server.logEvent("X-Rating",
+                                                    model.execution.feedback.category(),
+                                                    model.execution.feedback.label(),
+                                                    rating);
+                    model.configuration.container.find(".blockpy-rating").fadeOut(500, function() {
+                        $(this).fadeIn(500);
+                        model.display.hasRated(true);
+                    });
+                    const thankYou = model.configuration.container.find(".blockpy-feedback-thank-you");
+                    thankYou.addClass("show");
+                    setTimeout(() => {
+                        thankYou.removeClass("show");
+                        if (model.display.hasRated()) {
+                            model.ui.menu.startShare(true);
+                        }
+                    }, 1000);
+                },
+                hasRatedClass: ko.pureComputed(() =>
+                    model.display.hasRated() ? "far" : "fas"
+                ),
+                addPositiveFeedback: (text, icon, color, onclick, toEnd, instructorOnly) => {
+                    if (!instructorOnly || model.display.instructor()) {
+                        self.components.feedback.addPositiveFeedback(text, icon, color, onclick, toEnd);
+                    }
+                }
+            },
+            trace: {
+                has: ko.pureComputed(() =>
+                    model.execution.student.currentTraceData() !== null
+                ),
+                highlightedLine: ko.pureComputed(() => {
+                    if (model.display.secondRowSecondPanel() !== SecondRowSecondPanelOptions.TRACE) {
+                        return [];
+                    }
+                    let step = model.execution.student.currentTraceStep();
+                    let lastStep = model.execution.student.lastStep();
+                    let traceData = model.execution.student.currentTraceData();
+                    if (!traceData || step === null) {
+                        return [];
+                    } else if (step === 0) {
+                        return [];
+                    } else {
+                        return [traceData[step-1].line];
+                    }
+                }),
+                line: ko.pureComputed(function () {
+                    let step = model.execution.student.currentTraceStep();
+                    let lastStep = model.execution.student.lastStep();
+                    let traceData = model.execution.student.currentTraceData();
+                    if (!traceData || step === null) {
+                        return "No trace";
+                    }
+                    if (step === 0) {
+                        return "Before run";
+                    } else if (step === lastStep) {
+                        return "Finished run";
+                    } else {
+                        // TODO: why are these numbers wonky?
+                        return "Line "+(traceData[step-1].line);
+                    }
+                }),
+                ast: ko.pureComputed(function () {
+                    let step = model.execution.student.currentTraceStep();
+                    let lastStep = model.execution.student.lastStep();
+                    let traceData = model.execution.student.currentTraceData();
+                    if (!traceData) {
+                        return "Nothing traced.";
+                    }
+                    switch (step) {
+                        case 0:
+                            return "Starting execution";
+                        case lastStep:
+                            if (!model.execution.reports.student.success) {
+                                return "Execution halted (error)";
+                            }
+                            return "Finished execution";
+                        default:
+                            return "Current step: " + AST_DESCRIPTIONS[traceData[step-1].ast];
+                    }
+                }),
+                first: function () {
+                    model.execution.student.currentTraceStep(0);
+                },
+                backward: function () {
+                    let previous = Math.max(0, model.execution.student.currentTraceStep() - 1);
+                    model.execution.student.currentTraceStep(previous);
+                },
+                forward: function () {
+                    let next = Math.min(model.execution.student.lastStep(), model.execution.student.currentTraceStep() + 1);
+                    model.execution.student.currentTraceStep(next);
+                },
+                last: function () {
+                    model.execution.student.currentTraceStep(model.execution.student.lastStep());
+                },
+                data: ko.pureComputed(function () {
+                    let step = model.execution.student.currentTraceStep();
+                    let lastStep = model.execution.student.lastStep();
+                    let traceData = model.execution.student.currentTraceData();
+                    if (!traceData) {
+                        return [];
+                    }
+                    switch (step) {
+                        case 0:
+                            return [];
+                        case lastStep:
+                            return traceData[step - 1];
+                        default:
+                            return traceData[step];
+                    }
+                }),
+            },
+            files: {
+                visible: ko.pureComputed(() =>
+                    model.display.instructor() || !model.assignment.settings.hideFiles() || model.assignment.settings.preloadAllFiles()
+                ),
+                addIsVisible: ko.pureComputed(() =>
+                    model.display.instructor() || !model.assignment.settings.hideFiles()
+                ),
+                width: ko.pureComputed(()=>
+                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
+                        "col-md-12" : "col-md-6"
+                ),
+                hasContents: function(path) {
+                    switch (path) {
+                        case "answer.py": return model.submission.code();
+                        case "!instructions.md": return model.assignment.instructions();
+                        case "!on_change.py": return model.assignment.onChange() !== null;
+                        case "!on_eval.py": return model.assignment.onEval() !== null;
+                        case "?mock_urls.blockpy": return model.assignment.extraInstructorFiles().some(file =>
+                            file.filename() === "?mock_urls.blockpy");
+                        case "images.blockpy": return model.assignment.extraInstructorFiles().some(file =>
+                            file.filename() === "images.blockpy");
+                        case "!answer_prefix.py": return model.assignment.extraInstructorFiles().some(file =>
+                            file.filename() === "!answer_prefix.py");
+                        case "!answer_suffix.py": return model.assignment.extraInstructorFiles().some(file =>
+                            file.filename() === "!answer_suffix.py");
+                        case "?toolbox.blockpy": return model.assignment.extraInstructorFiles().some(file =>
+                            file.filename() === "?toolbox.blockpy");
+                        case "!tags.blockpy": return model.assignment.tags().length;
+                        case "!sample_submissions.blockpy": return model.assignment.sampleSubmissions().length;
+                        default: return false;
+                    }
+                },
+                add: function(path) {
+                    switch (path) {
+                        case "?mock_urls.blockpy":
+                        case "!answer_prefix.py":
+                        case "!answer_suffix.py":
+                        case "?tags.blockpy":
+                        case "?settings.blockpy":
+                            self.components.fileSystem.newFile(path);
+                            break;
+                        case "images.blockpy":
+                            self.components.fileSystem.newFile(path, "{}");
+                            break;
+                        case "?toolbox.blockpy":
+                            let normalToolbox = self.components.pythonEditor.bm.blockEditor.TOOLBOXES["normal"];
+                            normalToolbox = JSON.stringify(normalToolbox, null, 2);
+                            self.components.fileSystem.newFile(path, normalToolbox);
+                            break;
+                        case "!sample_submissions.blockpy":
+                            model.assignment.sampleSubmissions([SampleSubmission.Blank()]);
+                            self.components.fileSystem.newFile(path);
+                            break;
+                        case "!on_change.py":
+                            model.assignment.onChange("");
+                            self.components.fileSystem.newFile(path);
+                            break;
+                            // TODO fix extrafiles for instructor and student
+                        case "!on_eval.py":
+                            model.assignment.onEval("");
+                            self.components.fileSystem.newFile(path);
+                            break;
+                        case "instructor":
+                            self.components.fileSystem.newFileDialog("instructor");
+                            return;
+                        case "student":
+                            self.components.fileSystem.newFileDialog("student");
+                            return;
+                        case "starting":
+                            self.components.fileSystem.newFileDialog("starting");
+                            return;
+                        default:
+ 
+                    }
+                    model.display.filename(path);
+                },
+                delete: function() {
+                    return self.components.fileSystem.deleteFile(model.display.filename());
+                },
+                rename: (newName) => {
+                    return self.components.fileSystem.renameFile(model.display.filename(), newName);
+                },
+                getStudentCode: function() {
+                    let prefixPy = self.components.fileSystem.getFile("!answer_prefix.py");
+                    let suffixPy = self.components.fileSystem.getFile("!answer_suffix.py");
+                    let code = self.model.submission.code();
+                    if (prefixPy && prefixPy.handle && prefixPy.handle()) {
+                        code = prefixPy.handle() + code;
+                    }
+                    if (suffixPy && suffixPy.handle && suffixPy.handle()) {
+                        code = code + suffixPy.handle();
+                    }
+                    return code;
+                },
+                extraStudentFiles: observeConcatenatedFile(model.submission.extraFiles),
+                extraInstructorFiles: observeConcatenatedFile(model.assignment.extraInstructorFiles),
+                extraStartingFiles: observeConcatenatedFile(model.assignment.extraStartingFiles),
+                displayFilename: function(path) {
+                    if (path === "?mock_urls.blockpy") {
+                        return "URL Data";
+                    }
+                    if (path === "images.blockpy") {
+                        return "Images";
+                    }
+                    if (path === "!answer_prefix.py") {
+                        return "Answer Prefix";
+                    }
+                    if (path === "!answer_suffix.py") {
+                        return "Answer Suffix";
+                    }
+                    if (path === "?toolbox.blockpy") {
+                        return "Toolbox";
+                    }
+                    if (path.startsWith("&")) {
+                        return path.slice(1);
+                    }
+                    return path;
+                },
+            },
+            editors: {
+                current: ko.pureComputed( ()=>
+                    self.components.editors.getEditor(model.display.filename())
+                ),
+                width: ko.pureComputed(()=>
+                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
+                        "col-md-12" : "col-md-7"
+                ),
+                view: ko.pureComputed(() =>
+                    (!model.display.instructor() && (
+                        model.assignment.settings.hideEditors() ||
+                        model.assignment.settings.onlyInteractive())) ? "None" :
+                    model.display.filename() ? model.ui.editors.current() : "None"
+                ),
+                reset: function() {
+                    self.components.server.logEvent("X-File.Reset", "", "", "", "answer.py");
+                    model.submission.code(model.assignment.startingCode());
+                    model.submission.extraFiles(model.assignment.extraStartingFiles().map(
+                        file => {
+                            let filename = file.filename().substr(1);
+                            return makeModelFile(filename, file.contents());
+                        }
+                    ));
+                },
+                canSave: ko.pureComputed(() =>
+                    !model.display.autoSave()),
+                canDelete: ko.pureComputed(() =>
+                    (!model.assignment.settings.hideFiles() || model.display.instructor()) &&
+                    UNDELETABLE_FILES.indexOf(model.display.filename()) === -1),
+                canRename: ko.pureComputed(() =>
+                    (!model.assignment.settings.hideFiles() || model.display.instructor()) &&
+                    UNRENAMABLE_FILES.indexOf(model.display.filename()) === -1),
+                upload: uploadFile.bind(self),
+                download: downloadFile.bind(self),
+                importDataset: () => {
+                    self.components.corgis.openDialog();
+                },
+                python: {
+                    fullscreen: () => {
+                        let codeMirror = self.components.pythonEditor.bm.textEditor.codeMirror;
+                        return codeMirror.setOption("fullScreen", !codeMirror.getOption("fullScreen"));
+                    },
+                    updateMode: (newMode) => {
+                        self.components.server.logEvent("X-View.Change", "", "", newMode, model.display.filename());
+                        model.display.pythonMode(newMode);
+                        if (model.display.filename() === "answer.py") {
+                            self.components.pythonEditor.oldPythonMode = newMode;
+                        }
+                    },
+                    isHistoryAvailable: ko.pureComputed(()=>
+                        model.ui.server.isEndpointConnected("loadHistory")),
+                    turnOffHistoryMode: () => {
+                        self.components.pythonEditor.updateEditor();
+                        self.components.pythonEditor.setReadOnly(false);
+                        model.display.historyMode(false);
+                    },
+                    turnOnHistoryMode: () => {
+                        self.components.server.loadHistory((response) =>{
+                            if (response.success) {
+                                self.components.history.load(response.history);
+                                model.display.historyMode(true);
+                                self.components.pythonEditor.setReadOnly(true);
+                            } else {
+                                self.components.dialog.ERROR_LOADING_HISTORY();
+                            }
+                        });
+                    },
+                    toggleHistoryMode: () => {
+                        if (model.display.historyMode()) {
+                            model.ui.editors.python.turnOffHistoryMode();
+                        } else {
+                            model.ui.editors.python.turnOnHistoryMode();
+                        }
+                    },
+                    history: {
+                        start: ()=>{ self.components.history.moveToStart(); },
+                        previous: ()=>{ self.components.history.movePrevious(); },
+                        next: ()=>{ self.components.history.moveNext(); },
+                        mostRecent: ()=>{ self.components.history.moveToMostRecent(); },
+                        use: ()=>{ self.components.history.use(); }
+                    }
+                },
+                images: {
+                    uploadFile: () => self.components.editors.byName("image").uploadFile(),
+                    deleteFile: (fileInfo) => self.components.editors.byName("image").deleteFile(fileInfo),
+                    renameFile: (fileInfo) => self.components.editors.byName("image").renameFile(fileInfo),
+                    reloadImages: () => self.components.editors.byName("image").reloadImages(),
+                    canChoosePlacement: ko.pureComputed(() => model.display.instructor()),
+                    canModify: (placement) => model.display.instructor() || placement === "submission" || placement === "user",
+                },
+                settings: {
+                    save: () => self.components.server.saveAssignment()
+                },
+                sampleSubmissions: {
+                    buildEditor: (newDOM, index, newElement) => {
+                        let editor = self.components.editors.byName("Sample Submissions");
+                        editor.buildEditor(newDOM, index, newElement);
+                    }
+                },
+            },
+            execute: {
+                isRunning: ko.pureComputed(() =>
+                    model.status.onExecution() === StatusState.ACTIVE
+                ),
+                runLabel: ko.pureComputed(() =>
+                    model.status.onExecution() === StatusState.ACTIVE ? "Stop" : "Run"
+                ),
+                run: () => {
+                    if (model.status.onExecution() === StatusState.ACTIVE) {
+                        if (typeof PygameLib !== "undefined" && PygameLib.running) {
+                            PygameLib.StopPygame();
+                        }
+                        model.status.onExecution(StatusState.READY);
+                    } else {
+                        self.components.engine.delayedRun();
+                    }
+                },
+                runQuietlyLabel: ko.pureComputed(()=>
+                    model.status.onExecution() === StatusState.ACTIVE ? "Stop" : "Run without feedback"
+                ),
+                runQuietly: () => {
+                    if (model.status.onExecution() === StatusState.ACTIVE) {
+                        if (typeof PygameLib !== "undefined" && PygameLib.running) {
+                            PygameLib.StopPygame();
+                        }
+                        model.status.onExecution(StatusState.READY);
+                    } else {
+                        self.components.engine.delayedRun(true);
+                    }
+                },
+                evaluate: () =>
+                    self.components.engine.evaluate()
+            },
+            server: {
+                status: (endpoint =>
+                    "server-status-" + model.status[endpoint]()
+                ),
+                isEndpointConnected: (endpoint) =>
+                    model.configuration.serverConnected() &&
+                    model.configuration.urls !== undefined &&
+                    model.configuration.urls[endpoint] !== undefined,
+                messages: ko.pureComputed(() =>
+                    capitalize(model.status.loadAssignmentMessage() ||
+                        model.status.saveAssignmentMessage() ||
+                        model.status.loadHistoryMessage() ||
+                        model.status.loadFileMessage() ||
+                        model.status.saveFileMessage() ||
+                        model.status.loadDatasetMessage() ||
+                        model.status.logEventMessage() ||
+                        model.status.saveImage() ||
+                        model.status.updateSubmissionMessage() ||
+                        model.status.externalAPI() ||
+                        model.status.updateSubmissionStatusMessage() || "")
+                ),
+                force: {
+                    loadAssignment: (data, event) => {
+                        //let fileHandler = $(".blockpy-force-load-assignment-file");
+                        let assignmentForceLoadButton = $(event.target);
+                        //fileHandler.click();
+                        $(event.target).parent().fadeOut(100).fadeIn(100);
+                        // Allow user to upload a file containing an assignment submission
+                        var fr = new FileReader();
+                        var files = assignmentForceLoadButton[0].files;
+                        fr.onload = function(e) {
+                            let assignmentSubmission = JSON.parse(e.target.result);
+                            self.loadAssignmentData_(assignmentSubmission);
+                        };
+                        fr.fileName = files[0].name;
+                        fr.readAsText(files[0]);
+                        assignmentForceLoadButton.val("");
+                    },
+                    updateSubmission: (data, event) => {
+                        console.log(event);
+                        self.components.server.updateSubmission(self.model.submission.score(),
+                                                                self.model.submission.correct(),
+                                                                false, true);
+                        $(event.target).fadeOut(100).fadeIn(100);
+                    }
+                }
+            },
+            footer: {
+                visible: ko.pureComputed(
+                    () =>
+                        model.display.instructor() || !model.ui.smallLayout()
+                ),
+            }
+        };
+        makeExtraInterfaceSubscriptions(self, model);
+    }
+ 
+    turnOnHacks() {
+        //console.log("TODO");
+        Sk.builtinFiles.files["src/lib/image.js"] = imageModule.toString();
+        //Sk.builtinFiles.files["src/lib/weakref.js"] = weakrefModule.toString();
+        //Sk.builtinFiles.files["src/lib/matplotlib/pyplot/__init__.js"] = matplotlibModule.toString();
+    }
+ 
+    /**
+     * Applys the KnockoutJS bindings to the model, instantiating the values into the
+     * HTML.
+     */
+    applyModel() {
+        ko.applyBindings(this.model, this.model.configuration.container[0]);
+    }
+ 
+    initUtilities() {
+        let main = this;
+        this.utilities = {
+            markdown: (text) => text ? EasyMDE.prototype.markdown(text) : "<p></p>"
+        };
+    }
+ 
+    initComponents() {
+        let container = this.model.configuration.container;
+        let components = this.components = {};
+        let main = this;
+        // Each of these components will take the BlockPy instance, and possibly a
+        // reference to the relevant HTML location where it will be embedded.
+        components.dialog = new BlockPyDialog(main, container.find(".blockpy-dialog"));
+        components.feedback = new BlockPyFeedback(main, container.find(".blockpy-feedback"));
+        components.trace = new BlockPyTrace(main);
+        components.console = new BlockPyConsole(main, container.find(".blockpy-console"));
+        components.engine = new BlockPyEngine(main);
+        components.fileSystem = new BlockPyFileSystem(main);
+        components.editors = new Editors(main, container.find(".blockpy-editor"));
+        // Convenient shortcut directly to PythonEditor
+        components.pythonEditor = this.components.editors.byName("python");
+        components.server = new BlockPyServer(main);
+        components.corgis = new BlockPyCorgis(main);
+        components.history = new BlockPyHistory(main, container.find(".blockpy-history-toolbar"));
+    }
+ 
+    show() {
+        this.model.configuration.container.show();
+        //this.model.configuration.container.find(".blockpy-file-instructor").toggle(this.model.display.instructor());
+    }
+ 
+    hide() {
+        this.model.configuration.container.hide();
+    }
+ 
+    makeExtraSubscriptions() {
+        this.model.display.changedInstructions.subscribe((changed) => {
+            this.components.server.logEvent("X-Instructions.Change", "", "",
+                                            changed, "instructions.md");
+        });
+        this.clock = null;
+        const container = this.model.configuration.container;
+        const updateClock = () => container.find(".blockpy-menu-clock").text(getCurrentTime());
+        if (this.model.ui.menu.showClock()) {
+            this.clock = setInterval(updateClock, 1000);
+        }
+ 
+        this.model.ui.menu.showClock.subscribe((changed) => {
+            if (this.model.ui.menu.showClock()) {
+                if (this.clock) {
+                    clearInterval(this.clock);
+                    this.clock = null;
+                }
+            } else {
+                if (!this.clock) {
+                    this.clock = setInterval(updateClock, 1000);
+                }
+            }
+        });
+    }
+ 
+    start() {
+        this.model.display.filename("answer.py");
+    }
+ 
+    resetInterface() {
+        this.components.engine.reset();
+        // Disable any alternative logEntry functions we have been given
+        this.components.server.altLogEntry = null;
+    }
+ 
+    requestPasscode() {
+        let userSuppliedPasscode = prompt("Please enter the passcode.");
+        this.model.display.passcode(userSuppliedPasscode);
+    }
+ 
+    destroy() {
+ 
+    }
+ 
+}
+ 
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/console.js.html b/coverage/lcov-report/src/console.js.html new file mode 100644 index 000000000..c3af5ed96 --- /dev/null +++ b/coverage/lcov-report/src/console.js.html @@ -0,0 +1,1930 @@ + + + + + + Code coverage report for src/console.js + + + + + + + + + +
+
+

All files / src console.js

+
+ +
+ 1.81% + Statements + 4/220 +
+ + +
+ 0% + Branches + 0/58 +
+ + +
+ 0% + Functions + 0/57 +
+ + +
+ 1.83% + Lines + 4/218 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {encodeHTML} from "./utilities";
+ 
+/**
+ * Evaluate button HTML template
+ * @type {string}
+ */
+const START_EVAL_HTML = `
+<button type="button" class="btn btn-sm btn-outline float-right blockpy-btn-eval">
+    Evaluate
+</button>`;
+ 
+/**
+ * HTML template for a new line in the console.
+ * @type {string}
+ */
+const NEW_CONSOLE_LINE_HTML = "<div></div>";
+ 
+/**
+ * HTML template for the entire console area
+ * @type {string}
+ */
+export const CONSOLE_HTML = `
+    <div class='blockpy-panel blockpy-console'
+          role="region" aria-label="Console"
+          data-bind="class: ui.console.size">
+          
+        <!-- Feedback/Trace Visibility Control -->
+        <button type='button'
+                class='btn btn-sm btn-outline-secondary float-right blockpy-show-feedback'
+                data-bind="hidden: ui.secondRow.isConsoleShowVisible, click: ui.secondRow.advanceState">
+            <span class='fas fa-eye'></span>
+        </button>
+          
+        <strong>Console:</strong>
+        
+        <div class='blockpy-printer blockpy-printer-default'>
+        </div>
+        
+     </div>`;
+ 
+/**
+ * All the possible types for a line in the console.
+ * @enum
+ */
+export let ConsoleLineType = {
+    TEXT: "text",
+    HTML: "html",
+    PLOT: "plot",
+    IMAGE: "image",
+    PYGAME: "pygame",
+    DRAFTER: "drafter",
+    TURTLE: "turtle",
+    EVAL: "eval",
+    START_EVAL: "start_eval",
+    VALUE: "value",
+    INPUT: "input",
+    TEST_CASE: "test_case"
+};
+ 
+/**
+ * Abstract version of a line in the console. All other console lines
+ * should extend this class. Critically, they need to implement a render function.
+ */
+class ConsoleLine {
+    constructor(main, type, content) {
+        /**
+         * Reference back to the main BlockPy instance.
+         * @const
+         * @type {BlockPy}
+         */
+        this.main = main;
+        /**
+         * Categorizes what kind of line this is (text/html/plot/etc.)
+         * @type {ConsoleLineType}
+         */
+        this.type = type;
+        /**
+         * The actual data stored on this line.
+         * @type {string}
+         */
+        this.content = content;
+        /**
+         * Metadata about where the line originated from in the code.
+         * @type {{filename: string, line: number, step: number}}
+         */
+        this.origin = {
+            filename: Sk.currFilename,
+            step: main.components.engine.executionBuffer.step,
+            line: main.components.engine.executionBuffer.line
+        };
+        /**
+         * The HTML content stored on this line, meant to be rendered
+         * to the user.
+         * @type {*|jQuery.fn.init|jQuery|HTMLElement}
+         */
+        this.html = $("<div></div>", {
+            "class":  "blockpy-printer-output",
+            "data-container": main.model.configuration.attachmentPoint,
+            "data-toggle": "tooltip",
+            "data-placement": "auto",
+            "data-step": this.origin.step,
+            "title": "Step " + this.origin.step + ", Line " + this.origin.line
+        });
+        /**
+         * Whether or not this line should be visible
+         * @type {boolean}
+         */
+        this.visible = !main.model.display.mutePrinter();
+        /**
+         *
+         * @type {number}
+         */
+        this.index = 0;
+    }
+ 
+    /**
+     * Create a Skulpt representation of this console line's content.
+     * @returns {*}
+     */
+    toSkulpt() {
+        return Sk.ffi.remapToPy(this.content);
+    }
+ 
+    /**
+     * Remove this console line by deleting its HTML representation.
+     */
+    delete() {
+        this.html.remove();
+    }
+}
+ 
+class ConsoleLineTurtle extends ConsoleLine {
+    // TODO: Capture turtle commands for tracing purposes
+    constructor(main) {
+        super(main, ConsoleLineType.TURTLE);
+        this.html.addClass("blockpy-console-turtle-output");
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            where.prepend(this.html);
+            //this.html[0].scrollIntoView({ behavior: "smooth" });
+            var top = this.html.offset().top;
+            //$('html').scrollTop(top);
+            $("html").scrollTop(top);
+            //this.html.tooltip();
+        }
+    }
+}
+ 
+class ConsoleLineDrafter extends ConsoleLine {
+    constructor(main, size, fullscreen) {
+        super(main, ConsoleLineType.DRAFTER);
+        this.html.addClass("blockpy-console-drafter-output");
+        this.size = size;
+        this.fullscreen = fullscreen;
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            where.prepend(this.html);
+            var top = this.html.offset().top;
+            $("html").scrollTop(top);
+        }
+    }
+ 
+    cleanup() {
+        // Starts off as a no-op
+    }
+ 
+    stop() {
+        this.main.model.ui.secondRow.restorePanel();
+    }
+}
+ 
+class ConsoleLinePygame extends ConsoleLine {
+    constructor(main, size, fullscreen, pygameObj) {
+        super(main, ConsoleLineType.PYGAME);
+        this.html.addClass("blockpy-console-pygame-output");
+        this.size = size;
+        this.fullscreen = fullscreen;
+        this.pygameObj = pygameObj;
+        this.initialized = false;
+        this.canvas = document.createElement("canvas");
+        //Sk.main_canvas = document.getElementById("myCanvas");
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            this.html.append(this.canvas);
+            where.prepend(this.html);
+            var top = this.html.offset().top;
+            $("html").scrollTop(top);
+        }
+    }
+ 
+    cleanup() {
+        // Starts off as a no-op
+    }
+ 
+    stop() {
+        this.cleanup = () => {};
+        this.main.model.ui.secondRow.restorePanel();
+    }
+ 
+    finalize(cleanupFunction, listeners) {
+        this.initialized = true;
+        this.cleanup = () => cleanupFunction(this.pygameObj, listeners);
+    }
+ 
+}
+ 
+class ConsoleLineImage extends ConsoleLine {
+    constructor(main, content) {
+        super(main, ConsoleLineType.IMAGE, content);
+        this.html.addClass("blockpy-console-image-output");
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            console.log(this.content);
+            this.html.append(this.content);
+            where.append(this.html);
+            //this.html.tooltip();
+        }
+    }
+}
+ 
+class ConsoleLinePlot extends ConsoleLine {
+    constructor(main, content) {
+        super(main, ConsoleLineType.PLOT, content);
+        this.html.addClass("blockpy-console-plot-output");
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            where.append(this.html);
+            //this.html.tooltip();
+        }
+    }
+}
+ 
+class ConsoleLineText extends ConsoleLine {
+ 
+    addContent(content) {
+        this.content = this.content + content;
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            let encodedText = encodeHTML(this.content);
+            if (!encodedText || encodedText.trim().length <= 0) {
+                encodedText = "\n";
+            }
+            let lineData = $("<samp></samp>", { "html": encodedText });
+            this.html.append(lineData);
+            where.append(this.html);
+            this.html.tooltip();
+        }
+    }
+}
+ 
+class ConsoleLineValue extends ConsoleLine {
+ 
+    constructor(main, content) {
+        super(main, ConsoleLineType.VALUE, content);
+    }
+ 
+    render(where) {
+        if (this.visible) {
+            let encodedText = encodeHTML(this.content);
+            let lineData = $("<code></code>", { "html": encodedText });
+            this.html.append(lineData);
+            where.append(this.html);
+            this.html.tooltip();
+        }
+    }
+}
+ 
+class ConsoleLineInput extends ConsoleLine {
+    constructor(main, promptMessage) {
+        super(main, ConsoleLineType.INPUT, promptMessage);
+        this.visible = true;
+    }
+ 
+    /**
+     * Creates an Input box for receiving input() from the user.
+     *
+     */
+    render(where) {
+        // Perform any necessary cleaning
+        if (this.visible) {
+            // Input form
+            let inputForm = $("<input type='text' />");
+            // Enter button
+            let inputBtn = $("<button></button>", {"html": "Enter"});
+            // Group form and button
+            let inputGroup = $("<div></div>", {"class": "blockpy-console-input"});
+            inputGroup.append(inputForm);
+            inputGroup.append(inputBtn);
+            // Prompt box, new line, input group
+            let inputBox = $("<div></div>");
+            if (this.content !== "\n") {
+                let encodedText = encodeHTML(this.content);
+                let inputMsg = $("<samp></samp>",  {"html": encodedText});
+                inputBox.append(inputMsg);
+            }
+            inputBox.append($("<br>"))
+                .append(inputGroup);
+            // Render
+            this.html.append(inputBox);
+            where.append(this.html);
+            // Make it interactive
+            return this.makeInteractive(inputForm, inputBtn);
+        }
+        return "";
+    };
+ 
+    makeInteractive(input, button) {
+        let resolveOnClick;
+        let submittedPromise = new Promise((resolve) => {
+            resolveOnClick = resolve;
+        });
+        let inputIndex = this.main.model.execution.inputIndex();
+        let submitForm = () => {
+            let userInputtedValue = input.val();
+            Sk.queuedInput.push(userInputtedValue);
+            this.main.model.execution.inputIndex(inputIndex+1);
+            this.main.model.execution.input().push(userInputtedValue);
+            resolveOnClick(userInputtedValue);
+            input.prop("disabled", true);
+            button.prop("disabled", true);
+            this.html.tooltip();
+        };
+        button.click(submitForm);
+        input.keyup((e) => {
+            if (e.keyCode === 13) {
+                submitForm();
+            }
+        });
+        input.focus();
+        console.log(inputIndex, this.main.model.execution.input().length);
+        if (inputIndex < this.main.model.execution.input().length) {
+            let userInputtedValue = this.main.model.execution.input()[inputIndex];
+            input.val(userInputtedValue);
+            this.main.model.execution.inputIndex(inputIndex+1);
+            return new Promise((resolve) => {
+                input.prop("disabled", true);
+                button.prop("disabled", true);
+                this.html.tooltip();
+                resolve(userInputtedValue);
+            });
+        }
+        return submittedPromise;
+    }
+}
+ 
+class ConsoleLineEvaluate extends ConsoleLineInput {
+    constructor(main) {
+        super(main, "Evaluate:");
+    }
+}
+ 
+class ConsoleLineStartEvaluate extends ConsoleLine {
+    constructor(main) {
+        super(main, ConsoleLineType.START_EVAL);
+        this.html.append($(START_EVAL_HTML));
+        this.html.click(() => {
+            this.main.model.ui.execute.evaluate();
+            this.delete();
+        });
+    }
+ 
+    render(where) {
+        where.append(this.html);
+    }
+}
+ 
+export class BlockPyConsole {
+ 
+    /**
+     * An object for managing the console, with features for things like printing, plotting, evaling, inputing.
+     * The "printer" is the region where we put things, as opposed to the console as a whole.
+     *
+     * @constructor
+     * @param {Object} main - The main BlockPy instance
+     * @param {HTMLElement} tag - The HTML object this is attached to.
+     */
+    constructor (main, tag) {
+        this.main = main;
+        this.tag = tag;
+        this.printerTag = tag.find(".blockpy-printer");
+ 
+        this.MINIMUM_WIDTH = 200;
+        this.MINIMUM_HEIGHT = 200;
+        this.DEFAULT_HEIGHT = this.printerTag.height(); // Let CSS define this
+        this.main.model.display.previousConsoleHeight(this.DEFAULT_HEIGHT);
+ 
+        this.output = this.main.model.execution.output;
+        //this.input = this.main.model.execution.input;
+        this.settings = {};
+        this.clear();
+ 
+        // TODO: If the user modifies a file, then make the console look faded a little
+    };
+ 
+    /**
+     * Reset the status of the printer, including removing any text in it and
+     * fixing its size.
+     */
+    clear() {
+        this.output.removeAll();
+ 
+        this.lineBuffer = null;
+        this.plotBuffer = null;
+        this.printerTag.empty();
+        // If the user hasn't changed the console size, we'll reset it
+        if (this.main.model.display.previousConsoleHeight() === this.printerTag.height()) {
+            this.printerTag.height(this.DEFAULT_HEIGHT);
+            this.main.model.display.previousConsoleHeight(this.printerTag.height());
+        }
+ 
+        this.turtleLine = null;
+        Sk.TurtleGraphics = {
+            target: this.getTurtleLine.bind(this),
+            width: this.getWidth(),
+            height: this.getHeight(),
+            assets: this.loadAsset.bind(this)
+        };
+ 
+        this.pygameLine = null;
+        this.drafterLine = null;
+    };
+ 
+    loadAsset(name) {
+        return name;
+    }
+ 
+    getTurtleLine() {
+        if (this.turtleLine === null) {
+            this.turtleLine = new ConsoleLineTurtle(this.main);
+            this.turtleLine.render(this.printerTag);
+            // If the user hasn't changed the console size, we'll do so
+            if (this.main.model.display.previousConsoleHeight() === this.printerTag.height()) {
+                let currentPrinterDimension = this.printerTag.width();
+                this.printerTag.height(currentPrinterDimension);
+                this.main.model.display.previousConsoleHeight(this.printerTag.height());
+                Sk.TurtleGraphics.height = currentPrinterDimension-40;
+            }
+        }
+        return this.turtleLine.html[0];
+    }
+ 
+    handlePygameResize(newWidth, newHeight) {
+        // If the user hasn't changed the console size, and the newHeight is bigger than default, we'll change it
+        if (this.main.model.display.previousConsoleHeight() === this.printerTag.height() &&
+            newHeight > this.DEFAULT_HEIGHT) {
+            this.printerTag.height(30+newHeight);
+            this.main.model.display.previousConsoleHeight(this.printerTag.height());
+        }
+        // If the pygame window is wider than the console, we'll expand temporarily.
+        if (newWidth > this.printerTag.width()) {
+            this.main.model.ui.secondRow.makeWide();
+        }
+    }
+ 
+    finishTurtles() {
+        if (this.main.model.assignment.settings.saveTurtleOutput()) {
+            if (this.turtleLine) {
+                let canvas = this.turtleLine.html.find("canvas").last()[0];
+                let dataUrl = canvas.toDataURL("image/png");
+                this.main.components.server.saveImage("turtle_output", dataUrl);
+            } else if (this.pygameLine) {
+                let canvas = this.pygameLine.canvas;
+                let dataUrl = canvas.toDataURL("image/png");
+                this.main.components.server.saveImage("turtle_output", dataUrl);
+            } else {
+                // TODO: What if there are no turtles to save?
+            }
+        }
+    }
+ 
+    // TODO: turtles should be based on the current width
+    newTurtle() {
+        return this;
+    }
+ 
+    getWidth() {
+        return Math.max(this.MINIMUM_WIDTH, this.printerTag.width()-40);
+    }
+ 
+    getHeight() {
+        return Math.max(this.MINIMUM_HEIGHT, this.printerTag.height()+40);
+    }
+ 
+    isMuted() {
+        return this.main.model.display.mutePrinter();
+    }
+ 
+    /**
+     * Updates each printed element in the printer and makes it hidden
+     * or visible, depending on what step we're on.
+     *
+     * @param {Number} step - The current step of the executed program that we're on; each element in the printer must be marked with a "data-step" property to resolve this.
+     * @param {Number} page - Deprecated, not sure what this even does.
+     */
+    stepPrinter(step, page) {
+        this.printerTag.find(".blockpy-printer-output").each(function() {
+            if ($(this).attr("data-step") <= step) {
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+    };
+ 
+    /**
+     * Print a line to the on-screen printer.
+     * @param {String} lineText - A line of text to be printed out.
+     */
+    print(lineText) {
+        // Empty strings means do nothing.
+        // print("", end="")
+        if (!lineText) {
+            return;
+        }
+        let flush = false;
+        if (lineText.charAt(lineText.length-1) === "\n") {
+            flush = true;
+        }
+        let splitLines = lineText.split("\n");
+        if (this.lineBuffer === null) {
+            this.lineBuffer = new ConsoleLineText(this.main, ConsoleLineType.TEXT, splitLines[0]);
+        } else {
+            this.lineBuffer.addContent(splitLines[0]);
+        }
+        for (let i=1; i < splitLines.length-1; i++) {
+            this.output.push(this.lineBuffer);
+            this.lineBuffer.render(this.printerTag);
+            this.lineBuffer = new ConsoleLineText(this.main, ConsoleLineType.TEXT, splitLines[i]);
+        }
+        if (flush) {
+            this.output.push(this.lineBuffer);
+            this.lineBuffer.render(this.printerTag);
+            this.lineBuffer = null;
+        }
+    };
+ 
+ 
+    plot(plots) {
+        this.plotBuffer = new ConsoleLinePlot(this.main, plots);
+        this.plotBuffer.render(this.printerTag);
+        return this.plotBuffer;
+    }
+ 
+    pygame(size, fullscreen, pygameObj) {
+        if (this.pygameLine === null) {
+            this.pygameLine = new ConsoleLinePygame(this.main, size, fullscreen, pygameObj);
+            this.pygameLine.render(this.printerTag);
+        }
+        return this.pygameLine;
+    }
+ 
+    drafter(size, fullscreen) {
+        if (this.drafterLine === null) {
+            this.drafterLine = new ConsoleLineDrafter(this.main, size, fullscreen);
+            this.drafterLine.render(this.printerTag);
+        }
+        return this.drafterLine;
+    }
+ 
+    printPILImage(imageData) {
+        console.log("TEST", imageData.image);
+        this.imageBuffer = new ConsoleLineImage(this.main, imageData.image);
+        this.imageBuffer.render(this.printerTag);
+        return this.imageBuffer;
+    }
+ 
+    printValue(value) {
+        let printedValue = new ConsoleLineValue(this.main, value);
+        printedValue.render(this.printerTag);
+        return printedValue;
+    }
+ 
+    /**
+     * Creates and registers a Promise from the Input box
+     * @param {String} promptMessage - Message to display to the user.
+     *
+     */
+    input(promptMessage) {
+        this.inputBuffer = new ConsoleLineInput(this.main, promptMessage);
+        return this.inputBuffer.render(this.printerTag);
+    };
+ 
+ 
+    evaluate() {
+        this.inputBuffer = new ConsoleLineEvaluate(this.main);
+        return this.inputBuffer.render(this.printerTag);
+    }
+ 
+    beginEval() {
+        let startEvaluation = new ConsoleLineStartEvaluate(this.main);
+        return startEvaluation.render(this.printerTag);
+    }
+ 
+    /**
+     * Unconditionally scroll to the bottom of the window.
+     *
+     */
+    scrollToBottom() {
+        this.tag.animate({
+            scrollTop: this.tag.prop("scrollHeight") - this.tag.prop("clientHeight")
+        }, 500);
+    };
+ 
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/corgis.js.html b/coverage/lcov-report/src/corgis.js.html new file mode 100644 index 000000000..111e0a928 --- /dev/null +++ b/coverage/lcov-report/src/corgis.js.html @@ -0,0 +1,523 @@ + + + + + + Code coverage report for src/corgis.js + + + + + + + + + +
+
+

All files / src corgis.js

+
+ +
+ 10% + Statements + 6/60 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/14 +
+ + +
+ 10% + Lines + 6/60 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147  +  +  +  +1x +1x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {slug} from "./utilities";
+ 
+// TODO: editor.bm.blockEditor.extraTools[]
+ 
+export let _IMPORTED_DATASETS = {};
+export let _IMPORTED_COMPLETE_DATASETS = {};
+ 
+/**
+ * This is a very simplistic helper function that will transform
+ * a given button into a "Loaded" state (disabled, pressed state, etc.).
+ *
+ * @param {HTMLElement} btn - An HTML element to change the text of.
+ */
+let setButtonLoaded = function (btn) {
+    btn.addClass("active")
+        .addClass("btn-success")
+        .removeClass("btn-primary")
+        .prop("disabled", true)
+        .text("Loaded")
+        .attr("aria-pressed", "true");
+};
+ 
+ 
+/**
+ * Module that connects to the CORGIS datasets and manages interactions
+ * with them. This includes loading in datasets at launch and on-the-fly.
+ * Note that this has no presence on screen, so it does not have a tag.
+ *
+ * @constructor
+ * @this {BlockPyCorgis}
+ * @param {Object} main - The main BlockPy instance
+ */
+export function BlockPyCorgis(main) {
+    this.main = main;
+ 
+    this.loadedDatasets = [];
+    this.loadDatasets();
+}
+ 
+BlockPyCorgis.prototype.loadDatasets = function (silently) {
+    // Load in each the datasets
+    let model = this.main.model,
+        editor = this.main.components.pythonEditor,
+        server = this.main.components.server;
+    let imports = [];
+    model.assignment.settings.datasets().split(",").forEach((name) => {
+        if (name && !(name in BlockMirrorBlockEditor.EXTRA_TOOLS)) {
+            imports.push.apply(imports, this.importDataset(slug(name), name, silently));
+        }
+    });
+ 
+    // When datasets are loaded, update the toolbox.
+    $.when.apply($, imports).done(function () {
+        //console.log("TRIGGERED");
+        editor.bm.forceBlockRefresh();
+        editor.bm.blockEditor.remakeToolbox();
+    }).fail(function (e) {
+        console.log(arguments);
+        console.error(e);
+    }).always(function () {
+        server.finalizeSubscriptions();
+    });
+};
+ 
+/**
+ * Loads the definitions for a dataset into the environment, including
+ * the dataset (as a JS file), the skulpt bindings, and the blockly
+ * bindings. This requires access to a CORGIS server, and occurs
+ * asynchronously. The requests are fired and their deferred objects
+ * are returned - callers can use this information to perform an action
+ * on completion of the import.
+ *
+ * @param {String} slug - The URL safe version of the dataset name
+ * @param {String} name - The user-friendly version of the dataset name.
+ * @returns {Array.<Deferred>} - Returns the async requests as deferred objects.
+ */
+BlockPyCorgis.prototype.importDataset = function (slug, name) {
+    let url_retrievals = [];
+    if (this.main.model.ui.server.isEndpointConnected("importDatasets")) {
+        let root = this.main.model.configuration.urls.importDatasets + "blockpy/" + slug + "/" + slug;
+        this.main.model.display.loadingDatasets.push(name);
+        // Actually get data
+        let getDataset = $.getScript(root + "_dataset.js");
+        // Load getComplete silently in the background because its big :(
+        let getComplete = $.getScript(root + "_complete.js");
+        let getSkulpt = $.get(root + "_skulpt.js", function (data) {
+            Sk.builtinFiles["files"]["src/lib/" + slug + "/__init__.js"] = data;
+        });
+        let getBlockly = $.getScript(root + "_blockly.js");
+        // On completion, update menus.
+        $.when(getDataset, getSkulpt, getBlockly).done(() => {
+            this.loadedDatasets.push(slug);
+            this.main.components.pythonEditor.bm.textToBlocks.hiddenImports.push(slug);
+            this.main.components.pythonEditor.bm.forceBlockRefresh();
+            this.main.components.pythonEditor.bm.blockEditor.remakeToolbox();
+            this.main.model.display.loadingDatasets.remove(name);
+        });
+        url_retrievals.push(getDataset, getSkulpt, getBlockly);
+    }
+    return url_retrievals;
+};
+ 
+/**
+ * Opens a dialog box to present the user with the datasets available
+ * through the CORGIS server. This requires a call, so this method
+ * completes asynchronously. The dialog is composed of a table with
+ * buttons to load the datasets (More than one dataset can be loaded
+ * from within the dialog at a time).
+ */
+BlockPyCorgis.prototype.openDialog = function () {
+    if (this.main.model.ui.server.isEndpointConnected("importDatasets")) {
+        let root = this.main.model.configuration.urls.importDatasets;
+        $.getJSON(root + "index.json",  (data) => {
+            // Make up the Body
+            let datasets = data.blockpy;
+            let documentation = root+"blockpy/index.html";
+            let start = $(`<p>Documentation is available at <a href='${documentation}' target=_blank>url</a></p>`);
+            let body = $("<table></table>", {"class": "table table-bordered table-sm table-striped"});
+            Object.keys(datasets).sort().map((name) => {
+                let sluggedName = slug(datasets[name].name);
+                let titleName = name;
+                let btn = $('<button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">Load</button>');
+                let imgSrc = root+"../images/datasets/"+name+"-icon.png";
+                if (this.loadedDatasets.indexOf(sluggedName) > -1) {
+                    setButtonLoaded(btn);
+                } else {
+                    btn.click( () => {
+                        this.importDataset(sluggedName, "Data - " + datasets[name].title);
+                        setButtonLoaded(btn);
+                    });
+                }
+                //let img = `<img src='${imgSrc}' class="corgis-icon">`;
+                $("<tr></tr>")
+                    //.append($("<td>" + img + "</td>"))
+                    .append($("<td>" + datasets[name].title + "</td>"))
+                    .append($("<td>" + datasets[name].overview + "</td>"))
+                    .append($("<td></td>").append(btn))
+                    .appendTo(body);
+            });
+            body.appendTo(start);
+            // Show the actual dialog
+            this.main.components.dialog.show("Import Datasets", start, null);
+        });
+    }
+};
+ 
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/dialog.js.html b/coverage/lcov-report/src/dialog.js.html new file mode 100644 index 000000000..eb31475da --- /dev/null +++ b/coverage/lcov-report/src/dialog.js.html @@ -0,0 +1,814 @@ + + + + + + Code coverage report for src/dialog.js + + + + + + + + + +
+
+

All files / src dialog.js

+
+ +
+ 40.25% + Statements + 31/77 +
+ + +
+ 0% + Branches + 0/12 +
+ + +
+ 10.71% + Functions + 3/28 +
+ + +
+ 40.25% + Lines + 31/77 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +6x +  +6x +6x +6x +6x +6x +  +6x +6x +6x +  +  +  +6x +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +5x +  +  +  +5x +  +  +  +5x +  +  +  +  +5x +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// TODO: Dyanmically populate aria-labelledby in this and other places
+ 
+export let DIALOG_HTML = `
+    <div class='blockpy-dialog modal hidden'
+         role="dialog"
+         aria-label='Dialog'
+         aria-hidden="true"
+         aria-modal="true">
+        <div class='modal-dialog modal-lg' role="document">
+            <div class='modal-content' role='region' aria-label='Dialog content'>
+                <div class='modal-header'>
+                    <h4 class='modal-title'>Dynamic Content</h4>
+                    <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class='modal-body' style='max-width:100%; max-height:400px'>
+                </div>
+                <div class='modal-footer'>
+                    <button type='button' class='btn btn-white modal-close' data-dismiss='modal'>Close</button>
+                    <button type='button' class='btn btn-success modal-okay' data-dismiss='modal'>Okay</button>
+                </div>    
+            </div>
+        </div>
+    </div>
+`;
+ 
+/**
+ * A utility object for quickly and conveniently generating dialog boxes.
+ * Unfortunately, this doesn't dynamically create new boxes; it reuses the same one
+ * over and over again. It turns out dynamically generating new dialog boxes
+ * is a pain! So we can't stack them.
+ *
+ * @constructor
+ * @this {BlockPyDialog}
+ * @param {Object} main - The main BlockPy instance
+ * @param {HTMLElement} tag - The HTML object this is attached to.
+ */
+export function BlockPyDialog(main, tag) {
+    this.main = main;
+    this.tag = tag;
+ 
+    this.titleTag = tag.find(".modal-title");
+    this.bodyTag = tag.find(".modal-body");
+    this.footerTag = tag.find(".modal-footer");
+    this.okayButton = tag.find(".modal-okay");
+    this.closeButton = tag.find(".modal-close");
+ 
+    this.yes = () => {};
+    this.no = () => {};
+    this.okayButton.click(() => {
+        this.yes();
+        this.tag.modal("hide");
+    });
+    this.closeButton.click(() => {
+        this.no();
+        //this.tag.modal("hide");
+    });
+}
+ 
+BlockPyDialog.prototype.close = function () {
+    this.tag.modal("hide");
+};
+ 
+/**
+ * A simple externally available function for popping up a dialog
+ * message. This menu will be draggable by its title.
+ *
+ * @param {String} title - The title of the message dialog. Can have HTML.
+ * @param {String} body - The body of the message dialog. Can have HTML.
+ * @param {function} onclose - A function to be run when the user closes the dialog.
+ */
+BlockPyDialog.prototype.show = function (title, body, onclose) {
+    this.titleTag.html(title);
+    this.bodyTag.html(body);
+    this.tag.modal("show");
+    this.okayButton.hide();
+    this.tag.draggable({
+        "handle": ".modal-title"
+    });
+ 
+    this.tag.on("hidden.bs.modal", function (e) {
+        if (onclose !== undefined && onclose !== null) {
+            onclose();
+        }
+    });
+};
+ 
+BlockPyDialog.prototype.confirm = function (title, body, yes, no, yesText) {
+    if (yesText === undefined) {
+        yesText = "Okay";
+    }
+    this.show(title, body, no);
+    this.yes = yes;
+    this.no = no;
+    this.okayButton.show().html(yesText);
+    // TODO: add okay button and cancel button
+};
+ 
+BlockPyDialog.prototype.ASSIGNMENT_VERSION_CHANGED = function () {
+    this.confirm("Assignment Changed", "Your instructor has made changes to this assignment. Would you like to reload? All your work has been saved.",);
+};
+ 
+BlockPyDialog.prototype.ERROR_LOADING_ASSIGNMNENT = function (reason) {
+    this.show("Error Loading Assignment", `BlockPy encountered an error while loading the assignment.<br>
+Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_LISTING_UPLOADED_FILES = function (reason) {
+    this.show("Error Listing Uploaded Files", `BlockPy encountered an error while listing the uploaded files.<br>
+Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_UPLOADING_FILE = function (reason) {
+    this.show("Error Uploaded File", `BlockPy encountered an error while uploading the file.<br>
+Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_DOWNLOADING_FILE = function (reason) {
+    this.show("Error Downloading File", `BlockPy encountered an error while downloading a file.<br>
+Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_RENAMING_FILE = function (reason) {
+    this.show("Error Renaming File", `BlockPy encountered an error while renaming a file.<br>
+Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_DELETING_FILE = function (reason) {
+    this.show("Error Deleting File", `BlockPy encountered an error while deleting a file.<br>
+Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_SAVING_ASSIGNMNENT = function (reason) {
+    this.show("Error Saving Assignment", `BlockPy encountered an error while saving the assignment.<br>
+Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
+};
+ 
+BlockPyDialog.prototype.ERROR_SHOW_STUDENT_ERROR = function (error) {
+    this.show("Original Error", `When I ran your code, I encountered an error:\n\n<div class="blockpy-dialog-student-error-message">${error}</div>`);
+};
+ 
+BlockPyDialog.prototype.POSITIVE_FEEDBACK_FULL = function (title, message) {
+    this.show(title, message);
+};
+ 
+BlockPyDialog.prototype.SCREENSHOT_BLOCKS = function () {
+    // TODO
+};
+ 
+BlockPyDialog.prototype.ERROR_UPDATING_SUBMISSION_STATUS = function () {
+    this.show("Error Updating Submission Status", `BlockPy encountered an error while updating your submission status.<br>
+Please reload the page and try again.`);
+};
+ 
+BlockPyDialog.prototype.ERROR_LOADING_HISTORY = function () {
+    this.show("Error Loading History", `BlockPy encountered an error while loading your history.<br>
+Please reload the page and try again.`);
+};
+ 
+BlockPyDialog.prototype.OFFER_FORK = function () {
+    let setupUrl = this.main.model.configuration.urls.instructionsAssignmentSetup;
+    setupUrl = setupUrl ? ` (<a href="${setupUrl}" target="_blank">How do I do that?</a>)` : "";
+    this.show("Assignment Not Owned; Fork?", `
+    <div class="mb-4">
+        It looks like you want to edit this assignment, but you are not an instructor
+    or designer in the course that owns it ("Course Name"). Would you like to fork
+    this assignment (or its entire group) so that you can save your modifications?
+    </div>
+    
+    <div class="mb-4">
+        Remember to update the Launch URL in the assignments' settings on Canvas!${setupUrl}
+    </div>
+    
+    <div><button type='button' class='btn btn-white'>Fork entire assignment group</button></div>
+    <div><button type='button' class='btn btn-white'>Fork just this assignment</button></div>
+    <div><button type='button' class='btn btn-danger'>Reset my local changes</button></div>
+    
+    <div class="form-check">
+        <input type="checkbox" class="form-check-input"
+                name="blockpy-transfer-submissions">
+        <label class="form-check-label" for="blockpy-transfer-submissions">Transfer Student Submissions for this course</label>
+    </div>
+    
+    <div class="form-check">
+    <label class="form-text" for="blockpy-course-id">New owning course id: </label>
+        <input type="text" name="blockpy-course-id" value="${this.main.model.user.courseId()}">
+    </div>
+    `);
+};
+ 
+BlockPyDialog.prototype.EDIT_INPUTS = function () {
+    let inputText = this.main.model.execution.input().join("\n");
+    let clearInputs = this.main.model.display.clearInputs() ? "" : "checked";
+    let yes = () => {
+        let checked = this.tag.find(".blockpy-remember-inputs").prop("checked");
+        let inputs = this.tag.find(".blockpy-input-list").val().split("\n");
+        this.main.model.display.clearInputs(!checked);
+        this.main.model.execution.input(inputs);
+    };
+    this.confirm("Edit Remembered Inputs", `
+ 
+<div class="form-check">
+<input type="checkbox" class="blockpy-remember-inputs form-check-input"
+        name="blockpy-remember-inputs" ${clearInputs}>
+<label class="form-check-label" for="blockpy-remember-inputs">Reuse inputs for next execution</label>
+</div>
+ 
+<textarea class="blockpy-input-list form-control" rows="4">${inputText}</textarea><br>
+Edit the inputs above to store and reuse them across multiple executions.
+Each input should be put on its own line.
+You do not need quotes; the text will be entered literally.
+ 
+`, yes, this.no, "Save");
+    // TODO: Allow user to specify the infinite string to keep giving when the others run out
+};
+ 
+BlockPyDialog.prototype.START_SHARE = function (url, wasPrompted) {
+    const initialMessage = wasPrompted ? `
+    It looks like you are having some trouble with this problem, your code, or this feedback.
+    If you plan to reach out for help from the course staff, then we recommend you include this link
+    in your message. It will make it much easier for them to help you quickly. 
+    ` : "You can quickly share your code with instructors and TAs by providing them with this link:";
+    this.show("Share Your Code", `
+    <div class="mb-4">
+        ${initialMessage}
+    </div>
+    <div class="mb-4">
+        <pre class="blockpy-copy-share-link-area">${url}</pre>
+        <button type='button' class='btn btn-white blockpy-copy-share-link'>Copy Link</button>
+    </div>
+    <div class="mb-4">
+        Note that you CANNOT share this link with other students, or access it yourself.
+        This is strictly for sharing with the course staff when something goes wrong or you need help with your code.
+    </div>
+    `);
+ 
+    this.tag.find(".blockpy-copy-share-link").on("click", () => {
+        // Copy the URL to the clipboard
+        navigator.clipboard.writeText(url).then(() => {
+            this.tag.find(".blockpy-copy-share-link").html("Copied!");
+        });
+    });
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/abstract_editor.js.html b/coverage/lcov-report/src/editor/abstract_editor.js.html new file mode 100644 index 000000000..2229872b3 --- /dev/null +++ b/coverage/lcov-report/src/editor/abstract_editor.js.html @@ -0,0 +1,406 @@ + + + + + + Code coverage report for src/editor/abstract_editor.js + + + + + + + + + +
+
+

All files / src/editor abstract_editor.js

+
+ +
+ 0% + Statements + 0/44 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/13 +
+ + +
+ 0% + Lines + 0/44 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {Editors} from "../editors";
+ 
+export function uploadFile(model, event) {
+    let fileReader = new FileReader();
+    let files = event.target.files;
+    fileReader.onload = (e =>
+        model.ui.editors.current().uploadFile(e)
+    );
+    fileReader.fileName = files[0].name;
+    fileReader.readAsText(files[0]);
+    event.target.value = "";
+}
+ 
+export function sluggify(text) {
+    return text.replace(/[^a-z0-9]/gi, "_").toLowerCase();
+}
+ 
+export function downloadFile(model, event) {
+    let {name, extension, contents, mimetype} = model.ui.editors.current().downloadFile();
+    // Make safe
+    name = sluggify(name);
+    name = name + extension;
+    // Make the data download as a file
+    let blob = new Blob([contents], {type: mimetype});
+    if (window.navigator.msSaveOrOpenBlob) {
+        window.navigator.msSaveBlob(blob, name);
+    } else{
+        let temporaryDownloadLink = window.document.createElement("a");
+        temporaryDownloadLink.href = window.URL.createObjectURL(blob);
+        temporaryDownloadLink.download = name;
+        document.body.appendChild(temporaryDownloadLink);
+        temporaryDownloadLink.click();
+        document.body.removeChild(temporaryDownloadLink);
+    }
+}
+ 
+export class AbstractEditor {
+    constructor(main, tag) {
+        this.main = main;
+        this.tag = tag;
+ 
+        this.fileSystem = main.components.fileSystem;
+        this.filename = null;
+        this.file = null;
+    }
+ 
+    deleteFile() {
+        this.fileSystem.deleteFile(this.filename);
+        this.main.model.display.filename("answer.py");
+        this.main.components.editors.changeEditor("answer.py");
+    }
+ 
+    onFileDeleted() {
+        // TODO: Switch to the previous file instead of a default file
+        this.main.model.display.filename("answer.py");
+        this.main.components.editors.changeEditor("answer.py");
+    }
+ 
+    onFileUpdated(file) {
+        if (file.filename === this.filename) {
+            //this.file = file;
+            this.main.components.editors.changeEditor(this.filename);
+            //this.fileSystem.stopWatchingFile(this.filename);
+            //this.trackCurrentFile();
+        }
+    }
+ 
+    trackCurrentFile() {
+        this.fileSystem.watchFile(this.filename, {
+            updated: this.onFileUpdated.bind(this),
+            deleted: this.onFileDeleted.bind(this)
+        });
+    }
+ 
+    enter(newFilename, oldEditor) {
+        this.filename = newFilename;
+        this.file = this.fileSystem.getFile(newFilename);
+        this.trackCurrentFile();
+    }
+ 
+    /**
+     *
+     * @param newFilename - the filename that the other editor will be switching to
+     * @param oldEditor
+     * @param newEditor
+     */
+    exit(newFilename, oldEditor, newEditor) {
+        this.fileSystem.stopWatchingFile(this.filename);
+        this.file = null;
+        this.filename = null;
+    }
+ 
+    uploadFile(event) {
+        let filename = event.target.fileName;
+        let contents = event.target.result;
+        this.file.handle(contents);
+    }
+ 
+    downloadFile() {
+        let filename = Editors.parseFilename(this.filename);
+        return {
+            name: filename.name,
+            extension: filename.type,
+            contents: this.file.handle(),
+            mimetype: "text/plain"
+        };
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/assignment_settings.js.html b/coverage/lcov-report/src/editor/assignment_settings.js.html new file mode 100644 index 000000000..cc9c4d1fd --- /dev/null +++ b/coverage/lcov-report/src/editor/assignment_settings.js.html @@ -0,0 +1,1312 @@ + + + + + + Code coverage report for src/editor/assignment_settings.js + + + + + + + + + +
+
+

All files / src/editor assignment_settings.js

+
+ +
+ 22.95% + Statements + 14/61 +
+ + +
+ 11.11% + Branches + 2/18 +
+ + +
+ 31.25% + Functions + 5/16 +
+ + +
+ 22.22% + Lines + 12/54 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +28x +228x +28x +  +  +  +  +  +  +12x +  +  +  +  +  +  +  +4x +  +140x +  +268x +112x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+import {DisplayModes} from "./python";
+ 
+const ASSIGNMENT_SETTINGS = [
+    ["toolbox", "toolbox", "normal", "toolbox", "Which version of the toolbox to present to the user."],
+    ["type", "type", "blockpy", "type", "The type of question; BlockPy programming problems are the default, but we also support static readings, quiz questions, and a Maze game."],
+    ["passcode", "passcode", "", "string", "A string that the user must enter to access the problem. If blank, then no passcode is prompted."],
+    //["toolboxLevel", "toolbox_level", "normal", "toolbox", "INCOMPLETE: What level of toolbox to present to the user (hiding and showing categories)."],
+    ["startView", "start_view", DisplayModes.TEXT, DisplayModes, "The Python editor mode to start in when the student starts the problem."],
+    ["datasets", "datasets", "", "string", "The current list of datasets available on load as a comma-separated string."],
+    ["disableTimeout", "disable_timeout", false, "bool", "If checked, then students code is allowed to run without timeouts (potentially allowing infinite loops)."],
+    ["partId", "part_id", "", "string", "The Part ID of an Assignment that this editor is responsible for. Assignments can have regions (\"Parts\") that behave independently to the user but all correspond to the same assignment on the backend. Blank corresponds to the full document. Note that most assignment settings will apply UNIVERSALLY across all parts, including the on_run.py and the other settings on this page."],
+    ["isParsons", "is_parsons", false, "bool", "If checked, then this is a parson's style question (jumbled)."],
+    ["saveTurtleOutput", "save_turtle_output", false, "bool", "If checked, then turtle (and pygame) output is saved whenever the program uses it."],
+    ["disableFeedback", "disable_feedback", false, "bool", "If checked, then no instructor scripts are run (e.g., on_run and on_eval)."],
+    ["disableInstructorRun", "disable_instructor_run", false, "bool", "If checked, then the instructor on_run will not automatically run the students' code. This still runs the students' code once beforehand, but the output/data will not be available to the instructor's on_run.py script."],
+    ["disableStudentRun", "disable_student_run", false, "bool", "If checked, then the run button no longer run the students' code. This still runs the instructor's feedback on_run script."],
+    ["disableTifa", "disable_tifa", false, "bool", "If checked, then do not automatically run Tifa (which can be slow)."],
+    ["disableTrace", "disable_trace", false, "bool", "If checked, then the students code will not have its execution traced (no variables recorded, no coverage tracked)."],
+    ["disableEdit", "disable_edit", false, "bool", "If checked, then the students' file will not be editable."],
+    ["preloadAllFiles", "preload_all_files", false, "bool", "If checked, then the students can upload and use images and other files. This preloads all available files and images. You can filter them using the Preloaded Files setting."],
+    ["enableImages", "can_image", false, "bool", "If checked, then users can copy/paste images directly into the text editor."],
+    ["enableBlocks", "can_blocks", true, "bool", "If checked, then the student can edit the block interface (if not, then it is visible but not editable)."],
+    ["canClose", "can_close", false, "bool", "If checked, then the student should mark their submission closed when they are done. There is no way to force a student to do so. Unlike Reviewed, this still submits the correctness."],
+    ["onlyInteractive", "only_interactive", false, "bool", "If checked, the editors are hidden, the program is automatically run, and then the console enters Eval mode (interactive)."],
+    ["onlyUploads", "only_uploads", false, "bool", "If checked, then the students' file will not be directly editable (they will have to upload submissions)."],
+    // What menus/feedback to show and hide
+    ["hideSubmission", "hide_submission", false, "bool", "If checked, then students will not be able to see their submission's code or history on Canvas."],
+    ["hideFiles", "hide_files", true, "bool", "If checked, then students will not see the View Files toolbar."],
+    ["hideQueuedInputs", "hide_queued_inputs", false, "bool", "If checked, then the students cannot access the queued inputs box (makes repeated debugging easier for the input function)."],
+    ["hideEditors", "hide_editors", false, "bool", "If checked, then all of the editors are hidden."],
+    ["hideMiddlePanel", "hide_middle_panel", false, "bool", "If checked, then the console and feedback areas is hidden."],
+    ["hideAll", "hide_all", false, "bool", "INCOMPLETE: If checked, then the entire interface is hidden."],
+    ["hideEvaluate", "hide_evaluate", false, "bool", "If checked, then the Evaluate button is not shown on the console."],
+    ["hideImportDatasetsButton", "hide_import_datasets_button", false, "bool", "If checked, then students cannot see the import datasets button."],
+    // TODO: Fix this one to be settable
+    ["hideImportStatements", "hide_import_statements", false, "bool", "INCOMPLETE: If checked, certain kinds of import statements (matplotlib, turtle, datasets) are not shown in the block interface."],
+    ["hideCoverageButton", "hide_coverage_button", false, "bool", "INCOMPLETE: If checked, the coverage button is not shown."],
+    ["hideTraceButton", "hide_trace_button", false, "bool", "If checked, then the Trace button is not shown."],
+    ["smallLayout", "small_layout", false, "bool", "If checked, then the interface fits into a smaller region."],
+    ["hasClock", "has_clock", false, "bool", "If checked, then a clock is shown in the top right corner."],
+    ["preloadFiles", "preload_files", "", "string", "A JSON structure representing the files that should be loaded on start from the remote, as if they were local."]
+];
+ 
+export let AssigmentType = {
+    BLOCKPY: "blockpy",
+    MAZE: "maze",
+    QUIZ: "quiz",
+    READING: "reading"
+};
+ 
+function getDocumentation(name) {
+    for (let i=0; i < ASSIGNMENT_SETTINGS.length; i++) {
+        if (ASSIGNMENT_SETTINGS[i][0] === name) {
+            return ASSIGNMENT_SETTINGS[i][4];
+        }
+    }
+    return "Documentation not found for field";
+}
+ 
+function makeStartViewTab(name, icon, mode) {
+    return `<label class="btn btn-outline-secondary blockpy-mode-set-blocks"
+                data-bind="css: {active: assignment.settings.startView() === '${mode}'},
+                           click: assignment.settings.startView.bind($data, '${mode}')">
+                <span class='fas fa-${icon}'></span>
+                <input type="radio" name="blockpy-start-view-set" autocomplete="off" checked> ${name}
+            </label>`;
+}
+ 
+const ASSIGNMENT_SETTINGS_BOOLEAN_COMPONENTS_HTML = ASSIGNMENT_SETTINGS
+    // Only handle the simple booleans this way
+    .filter((setting) => setting[3] === "bool")
+    .map((setting) => {
+        let prettyName = setting[1].split("_").map(word=>(word.charAt(0).toUpperCase()+word.slice(1))).join(" ");
+        return `
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-check-label" for="blockpy-settings-${setting[0]}">${prettyName}</label>
+            </div>
+            <div class="col-sm-1">
+                <div class="form-check">
+                    <input class="form-check-input" type="checkbox" id="blockpy-settings-${setting[0]}"
+                    data-bind="checked: assignment.settings.${setting[0]}">
+                </div>  
+            </div>            
+            <div class="col-sm-9">
+                <small class="form-text text-muted">
+                    ${setting[4]}
+                </small>
+            </div>
+        </div>
+        `;
+    }).join("\n\n");
+ 
+export const ASSIGNMENT_SETTINGS_EDITOR_HTML = `
+    <div class="blockpy-view-settings">
+    
+    <form>
+ 
+        <div class="form-group row">
+            <div class="col-sm-12 mx-auto">
+                <button type="button" class="btn btn-success"
+                    data-bind="click: ui.editors.settings.save">Save changes</button>
+            </div>
+        </div>
+    
+        <div class="form-group row">
+            <label for="blockpy-settings-name" class="col-sm-2 col-form-label text-right">Name:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-name"
+                data-bind="value: assignment.name">
+                <small class="form-text text-muted">
+                    The student-facing name of the assignment. Assignments within a group are ordered alphabetically
+                    by their name, so you may want to use a naming scheme like "#43.5) Whatever".
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-url" class="col-sm-2 col-form-label text-right">URL:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-url"
+                data-bind="value: assignment.url">
+                <small class="form-text text-muted">
+                    The course-unique URL that can be used to consistently refer to this assignment. 
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-check-label" for="blockpy-settings-public">Public:</label>
+            </div>
+            <div class="col-sm-1">
+                <div class="form-check">
+                    <input class="form-check-input" type="checkbox" id="blockpy-settings-public"
+                    data-bind="checked: assignment.public">
+                </div>  
+            </div>            
+            <div class="col-sm-9">
+                <small class="form-text text-muted">
+                    If not public, users outside of the course will not be able to see the assignment in course listings.
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-check-label" for="blockpy-settings-hidden">Hidden:</label>
+            </div>
+            <div class="col-sm-1">
+                <div class="form-check">
+                    <input class="form-check-input" type="checkbox" id="blockpy-settings-hidden"
+                    data-bind="checked: assignment.hidden">
+                </div>  
+            </div>            
+            <div class="col-sm-9">
+                <small class="form-text text-muted">
+                    If hidden, students will not be able to see their grade while working on the assignment.
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-check-label" for="blockpy-settings-reviewed">Reviewed:</label>
+            </div>
+            <div class="col-sm-1">
+                <div class="form-check">
+                    <input class="form-check-input" type="checkbox" id="blockpy-settings-reviewed"
+                    data-bind="checked: assignment.reviewed">
+                </div>  
+            </div>            
+            <div class="col-sm-9">
+                <small class="form-text text-muted">
+                    If reviewed, the assignment need to be commented upon and regraded by the staff after submission.
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-points" class="col-sm-2 col-form-label text-right">Points:</label>
+            <div class="col-sm-10">
+                <input type="number" class="form-control" id="blockpy-settings-points"
+                data-bind="value: assignment.points">
+                <small class="form-text text-muted">
+                    The number of points this assignment is worth; defaults to 1 point. 
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-check-label" for="blockpy-settings-reviewed">Starting View:</label>
+            </div>
+            <div class="col-sm-3">
+                <div class="btn-group btn-group-toggle mr-2" data-toggle="buttons">
+                    ${makeStartViewTab("Blocks", "th-large", DisplayModes.BLOCK)}
+                    ${makeStartViewTab("Split", "columns", DisplayModes.SPLIT)}
+                    ${makeStartViewTab("Text", "align-left", DisplayModes.TEXT)}
+                 </div>
+            </div>            
+            <div class="col-sm-7">
+                <small class="form-text text-muted">
+                    ${getDocumentation("startView")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-ip-ranges" class="col-sm-2 col-form-label text-right">IP Ranges:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-ip-ranges"
+                data-bind="value: assignment.ipRanges">
+                <small class="form-text text-muted">
+                    Provide a comma-separated list of IP Addresses that will be explicitly allowed. If blank,
+                    then all addresses are allowed. If an address starts with <code>^</code> then it it is explicitly
+                    blacklisted, but that can be overridden in turn with a <code>!</code>. Addresses can also
+                    include a bit mask to allow a range of addresses.
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-passcode" class="col-sm-2 col-form-label text-right">Passcode:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-passcode"
+                data-bind="value: assignment.settings.passcode">
+                <small class="form-text text-muted">
+                    ${getDocumentation("passcode")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-datasets" class="col-sm-2 col-form-label text-right">Preloaded Datasets:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-datasets"
+                data-bind="value: assignment.settings.datasets">
+                <small class="form-text text-muted">
+                    ${getDocumentation("datasets")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-preload-files" class="col-sm-2 col-form-label text-right">Preloaded Files:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-preload-files"
+                data-bind="value: assignment.settings.preloadFiles">
+                <small class="form-text text-muted">
+                    ${getDocumentation("preloadFiles")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-toolbox" class="col-sm-2 col-form-label text-right">Block Toolbox:</label>
+            <div class="col-sm-10">
+                <select class="form-control" id="blockpy-settings-toolbox"
+                       data-bind="value: assignment.settings.toolbox">
+                   <option value="normal">Normal Toolbox</option>
+                   <option value="ct">CT@VT Toolbox</option>
+                   <option value="ct2">CT@VT Toolbox V2</option>
+                   <option value="minimal">Minimal Set</option>
+                   <option value="full">All Blocks</option>
+                   <option value="custom">Custom</option>
+                </select>
+                <small class="form-text text-muted">
+                    ${getDocumentation("toolbox")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-type" class="col-sm-2 col-form-label text-right">Problem Type:</label>
+            <div class="col-sm-10">
+                <select class="form-control" id="blockpy-settings-type"
+                       data-bind="value: assignment.type">
+                   <option value="blockpy">BlockPy</option>
+                   <option value="maze">Maze</option>
+                   <option value="quiz">Quiz Question</option>
+                   <option value="reading">Reading</option>
+                </select>
+                <small class="form-text text-muted">
+                    ${getDocumentation("type")}
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <label for="blockpy-settings-part-id" class="col-sm-2 col-form-label text-right">Part ID:</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="blockpy-settings-part-id"
+                data-bind="value: configuration.partId">
+                <small class="form-text text-muted">
+                    ${getDocumentation("partId")}
+                </small>
+            </div>
+        </div>
+        
+        ${ASSIGNMENT_SETTINGS_BOOLEAN_COMPONENTS_HTML}
+    </form>
+    
+    </div>
+`;
+ 
+export function saveAssignmentSettings(model) {
+    let settings = {};
+    ASSIGNMENT_SETTINGS.forEach(setting => {
+        let clientName = setting[0], serverName = setting[1], defaultValue = setting[2];
+        let value = model.assignment.settings[clientName]();
+        // Only store this setting if its different from the default
+        if (value !== defaultValue) {
+            settings[serverName] = value;
+        }
+    });
+    return JSON.stringify(settings);
+}
+ 
+export function loadAssignmentSettings(model, settings) {
+    if (settings) {
+        settings = JSON.parse(settings);
+        ASSIGNMENT_SETTINGS.forEach(setting => {
+            let clientName = setting[0], serverName = setting[1];
+            if (serverName in settings) {
+                model.assignment.settings[clientName](settings[serverName]);
+            } else {
+                model.assignment.settings[clientName](setting[2]);
+            }
+        });
+ 
+        if (settings.start_view) {
+            model.display.pythonMode(settings.start_view);
+        }
+    }
+}
+ 
+export function makeAssignmentSettingsModel(configuration) {
+    let settings = {};
+    ASSIGNMENT_SETTINGS.forEach(setting => {
+        let clientName = setting[0], serverName = setting[1], defaultValue = setting[2],
+            fieldType = setting[3];
+        if (configuration["assignment.settings."+serverName] === undefined) {
+            settings[clientName] = ko.observable(defaultValue);
+        } else {
+            let configValue = configuration["assignment.settings."+serverName];
+            if (fieldType === "bool") {
+                configValue = configValue.toLowerCase() === "true";
+            }
+            settings[clientName] = ko.observable(configValue);
+        }
+    });
+ 
+    return settings;
+}
+ 
+class AssignmentSettingsView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        //TODO: this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        // this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+ 
+        //TODO: this.codeMirror.on("change", this.currentListener);
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            // TODO: Do update
+ 
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            //this.file.handle(this.codeMirror.value());
+            // TODO: Update
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        //this.currentSubscription.dispose();
+        // TODO: update
+        //this.codeMirror.off("change", this.currentListener);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const AssignmentSettings = {
+    name: "Assignment Settings",
+    extensions: ["!assignment_settings.blockpy"],
+    constructor: AssignmentSettingsView,
+    template: ASSIGNMENT_SETTINGS_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/default_header.js.html b/coverage/lcov-report/src/editor/default_header.js.html new file mode 100644 index 000000000..016a999e6 --- /dev/null +++ b/coverage/lcov-report/src/editor/default_header.js.html @@ -0,0 +1,193 @@ + + + + + + Code coverage report for src/editor/default_header.js + + + + + + + + + +
+
+

All files / src/editor default_header.js

+
+ +
+ 100% + Statements + 1/1 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 1/1 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
 
+ 
+export const default_header = `
+<div class="blockpy-python-toolbar col-md-12 btn-toolbar"
+     role="toolbar" aria-label="Python Toolbar">
+     <div class="btn-group mr-2">
+        <label class="btn btn-outline-secondary">
+            <span class="fas fa-file-upload"></span> Upload
+            <input class="blockpy-toolbar-upload" type="file"
+                hidden
+                data-bind="event: {change: ui.editors.upload}">
+         </label>
+ 
+        <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
+            data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+            <span class="caret"></span>
+            <span class="sr-only">Toggle Dropdown</span>
+        </button>
+        
+        <div class="dropdown-menu dropdown-menu-right">
+            <a class='dropdown-item blockpy-toolbar-download'
+                data-bind="click: ui.editors.download">
+            <span class='fas fa-download'></span> Download
+            </a>
+        </div>
+    </div>
+    
+    <div class="btn-group mr-2" role="group" aria-label="Delete Group"
+        data-bind="visible: ui.editors.canDelete">
+        <button type="button" class="btn btn-outline-secondary",
+            data-bind="click: ui.files.delete">
+            <span class="fas fa-trash"></span> Delete
+         </button>
+     </div>
+ </div>
+`;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/images.js.html b/coverage/lcov-report/src/editor/images.js.html new file mode 100644 index 000000000..b61f4cb52 --- /dev/null +++ b/coverage/lcov-report/src/editor/images.js.html @@ -0,0 +1,961 @@ + + + + + + Code coverage report for src/editor/images.js + + + + + + + + + +
+
+

All files / src/editor images.js

+
+ +
+ 4.54% + Statements + 2/44 +
+ + +
+ 0% + Branches + 0/17 +
+ + +
+ 0% + Functions + 0/15 +
+ + +
+ 4.54% + Lines + 2/44 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+import * as FilePond from "filepond";
+ 
+export const IMAGE_EDITOR_HTML = `
+     <div>
+        <strong>Available Files</strong><br>
+            All the files available to open with <code>PIL</code> for this assignment:
+            <button data-bind="click: ui.editors.images.reloadImages"
+                class="btn btn-outline-secondary float-right"
+            >Reload Available Images</button>
+        <!-- ko if: display.uploadedFiles() !== null -->
+            <ul>
+                <!-- ko foreach: { data: Object.keys(display.uploadedFiles()), as: 'placement' } -->
+                <li>
+                    <strong data-bind="text: $data[0].toUpperCase() + $data.slice(1)"></strong>:
+                    <table class="table table-striped table-bordered table-hover table-sm">
+                        <thead>
+                            <tr>
+                                <th>Filename</th>
+                                <th>Preview</th>
+                                <th>Actions</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                    <!-- ko foreach: { data: $root.display.uploadedFiles()[placement], as: 'filename' } -->
+                        <tr>
+                            <td>
+                                <code data-bind="text: filename[0]"></code>
+                            </td>
+                            <td>
+                                <details>
+                                    <summary><img data-bind="attr: { src: filename[1], alt: filename[1] }"
+                                        width="30px" height="30px" onerror="this.style.display='none'"/>
+                                    </summary>
+                                    <img data-bind="attr: { src: filename[1], alt: filename[1] }"
+                                        onerror="this.style.display='none'"/>
+                                </details>
+                            </td>
+                            <td>
+                                <button class="btn btn-danger" 
+                                    data-bind="click: $root.ui.editors.images.deleteFile.bind(filename[0]),
+                                               visible: $root.ui.editors.images.canModify(placement)">Delete</button>
+                                <button class="btn btn-danger" 
+                                    data-bind="click: $root.ui.editors.images.renameFile.bind(filename[0]),
+                                               visible: $root.ui.editors.images.canModify(placement)">Rename</button>
+                            </td>
+                        </tr>
+                    <!-- /ko -->
+                    </table>
+                </li>
+                <!-- /ko -->
+            </ul>
+        <!-- /ko -->
+        
+        <strong>Add more files</strong><br>
+        Upload more files using the forms below:
+                
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-label" for="blockpy-editor-images-upload-file">File:</label>
+            </div>
+            <div class="col-sm-10">
+                <input type="file" class="form-control blockpy-editor-images-upload-file" id="blockpy-editor-images-upload-file"
+            name="blockpy-editor-images-upload-file">
+                <small class="form-text text-muted">
+                    The file to make available in your code
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row" data-bind="visible: ui.editors.images.canChoosePlacement()">
+            <div class="col-sm-2 text-right">
+                <label class="form-label" for="blockpy-editor-images-upload-placement">Placement:</label>
+            </div>
+            <div class="col-sm-10">
+                <select id="blockpy-editor-images-upload-placement" name="blockpy-editor-images-upload-placement"
+                    class="form-control blockpy-editor-images-upload-placement">
+                    <option value="submission" selected>Only your submission</option>
+                    <option value="assignment">For all submissions of this assignment</option>
+                    <option value="course">Across the entire course</option>
+                    <option value="user">For just your user account</option>
+                </select>
+                <small class="form-text text-muted">
+                    The placement of the file in the system. This controls whether other users can see the file.
+                    If you want to provide a file to all students for just this specific problem, then you should
+                    use <code>For all submissions of this assignment</code>. If you want to use this same image
+                    across other assignments (including assignments within this assignment group), then you should
+                    use <code>Across the entire course</code>.
+                </small>
+            </div>
+        </div>
+        
+        <div class="form-group row">
+            <div class="col-sm-2 text-right">
+                <label class="form-label" for="blockpy-editor-images-upload-filename">Filename:</label>
+            </div>
+            <div class="col-sm-10">
+                <input type="text" class="form-control blockpy-editor-images-upload-filename" id="blockpy-editor-images-upload-filename"
+                             name="blockpy-editor-images-upload-filename">
+                <small class="form-text text-muted">
+                    The filename that will be made available in the code. This should be a valid filename for the
+                    system, and should not contain spaces or special characters. It should also have a valid file
+                    extension (e.g., <code>.png</code>, <code>.jpg</code>, <code>.txt</code>).
+                </small>
+            </div>
+        </div>
+        <div class="form-group row">
+            <button data-bind="click: ui.editors.images.uploadFile" class="btn btn-success">Upload</button>
+        </div>
+    </div>
+`;
+ 
+class ImageEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+ 
+        this.tagUploadFileButton = this.tag.find(".blockpy-editor-images-upload-file");
+        this.tagUploadFilePlacement = this.tag.find(".blockpy-editor-images-upload-placement");
+        this.tagUploadFileName = this.tag.find(".blockpy-editor-images-upload-filename");
+ 
+        this.tagUploadFileButton.on("change", (event) => {
+            this.tagUploadFileName.val(event.target.files[0].name);
+        });
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+ 
+        let uploadedFiles = this.main.model.display.uploadedFiles();
+        if (uploadedFiles === null) {
+            this.reloadImages();
+        }
+ 
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+ 
+        // const target = this.tag.find(".blockpy-editor-images-filepond")[0];
+        //console.log(target);
+        /*const uploadUrl = new URL(this.main.model.configuration.urls["uploadFile"]);
+        uploadUrl.searchParams.set("directory", this.main.model.assignment.id());
+        uploadUrl.searchParams.set("placement", "submission");*/
+        // this.filepond = FilePond.create(target, {
+        //     //files: [],
+        //     allowMultiple: true,
+        //     server: {
+        //         url: this.main.model.configuration.urls["downloadFile"],
+        //         load: (source, load) => {
+        //             const params = new URL(source, window.location.origin).searchParams;
+        //             this.main.components.server.downloadFile(
+        //                 params.get("placement"),
+        //                 params.get("directory"),
+        //                 params.get("filename"),
+        //                 (response) => {
+        //                     load(new File([response], params.get("filename")));
+        //                 }
+        //             );
+        //             console.log(source, load);
+        //         },
+        //         process: {
+        //             url: this.main.model.configuration.urls["uploadFile"],
+        //             // url: "blockpy/upload_file?placement=assignment&directory="+this.main.model.assignment.id(),
+        //         }
+        //     }
+        // });
+        // console.log(this.filepond);
+        /*
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+ 
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.codeMirror.on("change", this.currentListener);*/
+    }
+ 
+    reloadImages() {
+        this.main.components.server.listUploadedFiles((response) => {
+            if (response.success) {
+                this.main.model.display.uploadedFiles(response.files);
+                this.main.components.fileSystem.loadRemoteFiles(response.files);
+                // const allFiles = [];
+                // Object.entries(response.files).forEach(([group, files]) => {
+                //     files.forEach(([filename, url]) => allFiles.push({
+                //         source: url,
+                //         options: {
+                //             type: "local"
+                //         }
+                //     }));
+                // });
+                // this.filepond.addFiles(allFiles);
+            } else {
+                this.main.components.dialog.ERROR_LISTING_UPLOADED_FILES(response.message);
+            }
+        });
+    }
+ 
+    updateEditor(newContents) {
+ 
+    }
+ 
+    updateHandle(event) {
+        /*this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirror.getValue());
+            this.dirty = false;
+        }*/
+    }
+ 
+    getPlacementDirectory(placement) {
+        switch (placement) {
+            case "submission":
+                return this.main.model.submission.id();
+            case "assignment":
+                return this.main.model.assignment.id();
+            case "course":
+                return this.main.model.course.id();
+            case "user":
+                return this.main.model.user.id();
+            default:
+                return null;
+        }
+    }
+ 
+    uploadFile(event) {
+        this.main.components.server.uploadFile(
+            this.tagUploadFilePlacement.val(),
+            this.getPlacementDirectory(this.tagUploadFilePlacement.val()),
+            this.tagUploadFileName.val(),
+            this.tagUploadFileButton[0].files[0],
+            (response) => {
+                if (response.success) {
+                    this.reloadImages();
+                } else {
+                    this.main.components.dialog.ERROR_UPLOADING_FILE(response.message);
+                }
+            }
+        );
+    }
+ 
+    deleteFile(fileInfo) {
+        const [filename, url] = fileInfo;
+        const queryParams = new URL(url, window.location.origin).searchParams;
+        this.main.components.server.uploadFile(
+            queryParams.get("placement"),
+            queryParams.get("directory"),
+            filename,
+            "",
+            (response) => {
+                if (response.success) {
+                    this.reloadImages();
+                } else {
+                    this.main.components.dialog.ERROR_DELETING_FILE(response.message);
+                }
+            },
+            true
+        );
+    }
+    renameFile(fileInfo) {
+        const [filename, url] = fileInfo;
+        const queryParams = new URL(url, window.location.origin).searchParams;
+        const newFilename = prompt("Enter the new filename for this file:", filename);
+        if (newFilename) {
+            this.main.components.server.renameFile(
+                queryParams.get("placement"),
+                queryParams.get("directory"),
+                filename,
+                newFilename,
+                (response) => {
+                    if (response.success) {
+                        this.reloadImages();
+                    } else {
+                        this.main.components.dialog.ERROR_RENAMING_FILE(response.message);
+                    }
+                }
+            );
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        super.exit(newFilename, oldEditor);
+        // if (this.filepond) {
+        //     this.filepond.destroy();
+        // }
+    }
+}
+ 
+export const ImageEditor = {
+    name: "Image",
+    extensions: ["images.blockpy"],
+    constructor: ImageEditorView,
+    template: IMAGE_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/index.html b/coverage/lcov-report/src/editor/index.html new file mode 100644 index 000000000..eba3cfbf1 --- /dev/null +++ b/coverage/lcov-report/src/editor/index.html @@ -0,0 +1,281 @@ + + + + + + Code coverage report for src/editor + + + + + + + + + +
+
+

All files src/editor

+
+ +
+ 7.06% + Statements + 37/524 +
+ + +
+ 1.28% + Branches + 2/156 +
+ + +
+ 4.41% + Functions + 6/136 +
+ + +
+ 6.86% + Lines + 35/510 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
abstract_editor.js +
+
0%0/440%0/40%0/130%0/44
assignment_settings.js +
+
22.95%14/6111.11%2/1831.25%5/1622.22%12/54
default_header.js +
+
100%1/1100%0/0100%0/0100%1/1
images.js +
+
4.54%2/440%0/170%0/154.54%2/44
json.js +
+
6.06%2/330%0/100%0/76.06%2/33
markdown.js +
+
7.4%2/270%0/60%0/57.4%2/27
python.js +
+
2.56%4/1560%0/592.63%1/382.59%4/154
quiz.js +
+
6.06%2/330%0/100%0/76.06%2/33
sample_submissions.js +
+
7.4%4/540%0/100%0/208.16%4/49
tags.js +
+
66.66%2/3100%0/00%0/166.66%2/3
text.js +
+
6.06%2/330%0/100%0/76.06%2/33
toolbox.js +
+
5.71%2/350%0/120%0/75.71%2/35
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/json.js.html b/coverage/lcov-report/src/editor/json.js.html new file mode 100644 index 000000000..2f4cd622c --- /dev/null +++ b/coverage/lcov-report/src/editor/json.js.html @@ -0,0 +1,355 @@ + + + + + + Code coverage report for src/editor/json.js + + + + + + + + + +
+
+

All files / src/editor json.js

+
+ +
+ 6.06% + Statements + 2/33 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 6.06% + Lines + 2/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+import {default_header} from "./default_header";
+ 
+export const JSON_EDITOR_HTML = `
+    ${default_header}
+     <div>
+        <textarea class="blockpy-editor-json"></textarea>
+    </div>
+`;
+ 
+class JsonEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-json")[0], {
+            showCursorWhenSelecting: true,
+            lineNumbers: true,
+            firstLineNumber: 1,
+            indentUnit: 4,
+            tabSize: 4,
+            indentWithTabs: false,
+            mode: "json",
+            extraKeys: {
+                "Tab": "indentMore",
+                "Shift-Tab": "indentLess",
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) {
+                        cm.setOption("fullScreen", false);
+                    } else {
+                        cm.display.input.blur();
+                    }
+                },
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                }
+            }
+        });
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.codeMirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            // Delay so that everything is rendered
+            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
+        }
+        // TODO: update dynamically when changing instructor status
+        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
+ 
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.codeMirror.setValue(newContents);
+            this.codeMirror.refresh();
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirror.getValue());
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.codeMirror.off("change", this.currentListener);
+        this.codeMirror.setOption("readOnly", false);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const JsonEditor = {
+    name: "JSON",
+    extensions: [".json"],
+    constructor: JsonEditorView,
+    template: JSON_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/markdown.js.html b/coverage/lcov-report/src/editor/markdown.js.html new file mode 100644 index 000000000..e49906f79 --- /dev/null +++ b/coverage/lcov-report/src/editor/markdown.js.html @@ -0,0 +1,310 @@ + + + + + + Code coverage report for src/editor/markdown.js + + + + + + + + + +
+
+

All files / src/editor markdown.js

+
+ +
+ 7.4% + Statements + 2/27 +
+ + +
+ 0% + Branches + 0/6 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 7.4% + Lines + 2/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+import {default_header} from "./default_header";
+ 
+export const MARKDOWN_EDITOR_HTML = `
+    ${default_header}
+    <textarea class="blockpy-editor-markdown"></textarea>    
+`;
+ 
+ 
+class MarkdownEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.mde = new EasyMDE({
+            element: tag.find(".blockpy-editor-markdown")[0],
+            autoDownloadFontAwesome: false,
+            forceSync: true,
+            minHeight: "300px",
+            //scrollbarStyle: "native",
+            // TODO: imageUploadFunction
+            renderingConfig: {
+                codeSyntaxHighlighting: true,
+            },
+            indentWithTabs: false,
+            tabSize: 4,
+        });
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.mde.codemirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            // Delay so that everything is rendered
+            setTimeout(this.mde.codemirror.refresh.bind(this.mde.codemirror), 1);
+        }
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.mde.value(newContents);
+            this.mde.codemirror.refresh();
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.mde.value());
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.mde.codemirror.off("change", this.currentListener);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const MarkdownEditor = {
+    name: "Markdown",
+    extensions: [".md"],
+    constructor: MarkdownEditorView,
+    template: MARKDOWN_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/python.js.html b/coverage/lcov-report/src/editor/python.js.html new file mode 100644 index 000000000..609f2ee9b --- /dev/null +++ b/coverage/lcov-report/src/editor/python.js.html @@ -0,0 +1,1486 @@ + + + + + + Code coverage report for src/editor/python.js + + + + + + + + + +
+
+

All files / src/editor python.js

+
+ +
+ 2.56% + Statements + 4/156 +
+ + +
+ 0% + Branches + 0/59 +
+ + +
+ 2.63% + Functions + 1/38 +
+ + +
+ 2.59% + Lines + 4/154 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +12x +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
/**
+ * TODO: rename files, manual save, tags, sample_submissions, on_eval, non-builtin files
+ * TODO: import data, history, run, url_data, assignment_settings, parsons_mode
+ * TODO: delete becomes "clear" for instructor files
+ */
+ 
+/**
+ *
+ * @enum {str}
+ */
+import {AbstractEditor, sluggify} from "./abstract_editor";
+import {HISTORY_TOOLBAR_HTML} from "../history";
+import {SecondRowSecondPanelOptions} from "../interface";
+ 
+export let DisplayModes = {
+    BLOCK: "block",
+    SPLIT: "split",
+    TEXT: "text"
+};
+ 
+function makeTab(name, icon, mode) {
+    return `<label class="btn btn-outline-secondary blockpy-mode-set-blocks"
+                data-bind="css: {active: display.pythonMode() === '${mode}'},
+                           click: ui.editors.python.updateMode.bind($data, '${mode}')">
+                <span class='fas fa-${icon}'></span>
+                <input type="radio" name="blockpy-mode-set" autocomplete="off" checked> ${name}
+            </label>`;
+}
+ 
+export const PYTHON_EDITOR_HTML = `
+ 
+    <div class="blockpy-python-toolbar col-md-12 btn-toolbar"
+         role="toolbar" aria-label="Python Toolbar">
+ 
+         <div class="btn-group mr-2" role="group" aria-label="Run Group">         
+            <button type="button" class="btn blockpy-run notransition"
+                data-bind="click: ui.execute.run,
+                            css: {'blockpy-run-running': ui.execute.isRunning}">
+                <span class="fas fa-play"></span> <span data-bind="text: ui.execute.runLabel"></span>
+             </button>
+         </div>
+         
+         <div class="btn-group btn-group-toggle mr-2" data-toggle="buttons">
+            <!-- ko if: $root.assignment.settings.enableBlocks() -->
+            ${makeTab("Blocks", "th-large", DisplayModes.BLOCK)}
+            ${makeTab("Split", "columns", DisplayModes.SPLIT)}
+            ${makeTab("Text", "align-left", DisplayModes.TEXT)}
+            <!-- /ko -->
+         </div>
+ 
+         <div class="btn-group mr-2" role="group" aria-label="Reset Group">
+             <button type="button" class="btn btn-outline-secondary"
+                 data-bind="click: ui.editors.reset">
+                 <span class="fas fa-sync"></span> Reset
+              </button>
+         </div>
+         
+         <!-- ko if: !assignment.settings.hideImportDatasetsButton() && !ui.smallLayout()-->
+         <div class="btn-group mr-2" role="group" aria-label="Import Group">
+            <button type="button" class="btn btn-outline-secondary"
+                data-bind="click: ui.editors.importDataset">
+                <span class="fas fa-cloud-download-alt"></span> Import datasets
+             </button>
+         </div>
+         <!-- /ko -->
+         
+         <div class="btn-group mr-2" data-bind="hidden: ui.smallLayout">
+                <label class="btn btn-outline-secondary">
+                    <span class="fas fa-file-upload"></span> Upload
+                    <input class="blockpy-toolbar-upload" type="file"
+                        hidden
+                        data-bind="event: {change: ui.editors.upload}">
+                 </label>
+ 
+                <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
+                    data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    <span class="caret"></span>
+                    <span class="sr-only">Toggle Dropdown</span>
+                </button>
+                
+                <div class="dropdown-menu dropdown-menu-right">
+                    <a class='dropdown-item blockpy-toolbar-download'
+                        data-bind="click: ui.editors.download">
+                    <span class='fas fa-download'></span> Download
+                    </a>
+                </div>
+            </div>
+         
+         <div class="btn-group mr-2" role="group" aria-label="History Group" data-bind="hidden: ui.smallLayout">
+            <button type="button" class="btn btn-outline-secondary"
+                aria-pressed="false"
+                data-bind="click: ui.editors.python.toggleHistoryMode,
+                           enable: ui.editors.python.isHistoryAvailable,
+                           css: { active: display.historyMode },
+                           attr: { 'aria-pressed': display.historyMode }">
+                <span class="fas fa-history"></span> History
+             </button>
+         </div>
+         
+         <!-- Fully functional, but a little too.. Invasive 
+         <div class="btn-group mr-2" role="group" aria-label="Fullscreen Group"
+            data-bind="visible: display.pythonMode() === 'text'">
+            <button type="button" class="btn btn-outline-secondary"
+                data-bind="click: ui.editors.python.fullscreen">
+                <span class="fas fa-expand-arrows-alt"></span> Fullscreen
+             </button>
+         </div>
+         -->
+         
+         <div class="btn-group mr-2" role="group" aria-label="Save Group"
+            data-bind="visible: ui.editors.canSave">
+            <button type="button" class="btn btn-outline-secondary">
+                <span class="fas fa-save"></span> Save
+             </button>
+         </div>
+         
+         <div class="btn-group mr-2" role="group" aria-label="Delete Group"
+            data-bind="visible: ui.editors.canDelete">
+            <button type="button" class="btn btn-outline-secondary",
+                data-bind="click: ui.files.delete">
+                <span class="fas fa-trash"></span> Delete
+             </button>
+         </div>
+         
+         <div class="btn-group mr-2">
+                <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
+                    data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    <span class="fas fa-ellipsis-v"></span>
+                    <span class="sr-only">Toggle Extra Features</span>
+                </button>
+                
+                <div class="dropdown-menu dropdown-menu-right">
+                    <a class='dropdown-item blockpy-toolbar-run-quietly notransition' role="button"
+                        href=""
+                        data-bind="click: ui.execute.runQuietly,
+                                    css: {'blockpy-run-running': ui.execute.isRunning}">
+                        <span class="fas fa-comment-slash"></span> <span data-bind="text: ui.execute.runQuietlyLabel"></span>
+                    </a>
+                </div>
+            </div>
+         
+         <!--<div class="btn-group mr-2" role="group" aria-label="Rename Group"
+            data-bind="visible: ui.editors.canRename">
+             <button type="button" class="btn btn-outline-secondary">
+                <span class="fas fa-file-signature"></span> Rename
+             </button>
+         </div>-->
+         
+    </div>
+    
+    ${HISTORY_TOOLBAR_HTML}
+ 
+ 
+    <div class="blockpy-python-blockmirror"
+        data-bind="hidden: ui.menu.isSubmitted">
+    </div>
+`;
+ 
+ 
+ 
+function convertIpynbToPython(code) {
+    let ipynb = JSON.parse(code);
+    let isUsable = function(cell) {
+        if (cell.cell_type === "code") {
+            return cell.source.length > 0 &&
+                !cell.source[0].startsWith("%");
+        } else {
+            return cell.cell_type === "markdown" ||
+                cell.cell_type === "raw";
+        }
+    };
+    let makePython = function(cell) {
+        if (cell.cell_type === "code") {
+            return cell.source.join("\n");
+        } else if (cell.cell_type === "markdown" ||
+            cell.cell_type === "raw") {
+            return "'''"+cell.source.join("\n")+"'''";
+        }
+    };
+    return ipynb.cells.filter(isUsable).map(makePython).join("\n");
+}
+ 
+class PythonEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag.find(".blockpy-python-blockmirror"));
+        Blockly.setParentContainer(main.model.configuration.container[0]);
+        this.bm = new BlockMirror({
+            "container": this.tag[0],
+            "run": main.components.engine.run.bind(main.components.engine),
+            "skipSkulpt": true,
+            "blocklyMediaPath": main.model.configuration.blocklyPath,
+            "toolbox": main.model.assignment.settings.toolbox(),
+            "imageMode": true,
+            imageDownloadHook: (oldUrl) => {
+                return oldUrl;
+            },
+            imageUploadHook: (blob) => {
+                //const uuid = window.URL.createObjectURL(new Blob([])).substring(31);
+                return new Promise((resolve, reject) => {
+                    const submissionId = main.model.submission.id();
+                    main.components.server.uploadFile("submission", submissionId, blob.name, blob, (response) => {
+                        resolve(JSON.stringify(response.endpoint));
+                        //resolve(JSON.stringify(main.model.configuration.urls["downloadFile"] + `?placement=submission&directory=${submissionId}&filename=${blob.name}`));
+                    });
+                    //return Promise.resolve("Image("+JSON.stringify(URL.createObjectURL(blob))+")");
+                    //return Promise.resolve(JSON.stringify(URL.createObjectURL(blob)));
+                });
+            },
+            imageLiteralHook: (oldUrl) => {
+                //return `Image("${oldUrl}")`;
+                return `"${oldUrl}"`;
+            },
+            //'height': '2000px'
+        });
+        // TODO: Prevent INS and OVR mode (... this.bm.textEditor.codeMirror.
+ 
+        this.dirty = false;
+        this.readOnly = false;
+        this.makeSubscriptions();
+        this.lineErrorSubscription = null;
+        this.lineUncoveredSubscription = null;
+        this.lineTraceSubscription = null;
+        this.oldPythonMode = this.main.model.display.pythonMode();
+ 
+        this.makePerAssignmentSubscriptions();
+    }
+ 
+    configureExtraBlockly() {
+        this.bm.blockEditor.workspace.configureContextMenu = (options) => {
+            options.push({
+                enabled: true,
+                text: "Screenshot",
+                callback: () => this.main.components.dialog.SCREENSHOT_BLOCKS
+            });
+        };
+    }
+ 
+    enter(newFilename, oldEditor) {
+        let oldFilename = this.filename;
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+ 
+        if (newFilename !== "answer.py") {
+            if (oldFilename === "answer.py") {
+                this.oldPythonMode = this.main.model.display.pythonMode();
+            }
+            this.main.model.display.pythonMode(DisplayModes.TEXT);
+        } else {
+            this.main.model.display.pythonMode(this.oldPythonMode);
+        }
+ 
+        this.updateEditor(this.file.handle());
+ 
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+ 
+        // Notify relevant file of changes to BM
+        this.currentBMListener = this.updateHandle.bind(this);
+        this.bm.addChangeListener(this.currentBMListener);
+ 
+        if (newFilename !== "answer.py") {
+            this.bm.isParsons = () => false;
+        } else {
+            this.bm.isParsons = this.main.model.assignment.settings.isParsons;
+ 
+            this.lineErrorSubscription = this.main.model.execution.feedback.linesError.subscribe((lines) =>{
+                return this.bm.setHighlightedLines(lines, "editor-error-line");
+            });
+            this.lineUncoveredSubscription = this.main.model.execution.feedback.linesUncovered.subscribe((lines) =>
+                this.bm.setHighlightedLines(lines, "editor-uncovered-line")
+            );
+ 
+            this.lineTraceSubscription = this.main.model.ui.trace.highlightedLine.subscribe((lines) => {
+                this.bm.clearHighlightedLines("editor-traced-line");
+                this.bm.setHighlightedLines(lines, "editor-traced-line");
+            });
+        }
+ 
+ 
+        //this.bm.blockEditor.workspace.render();
+        //this.bm.refresh();
+        // TODO: Figure out why this doesn't end up looking right (go to a different editor, come back, and it'll be squished)
+        //this.bm.refresh();
+        setTimeout(() => this.bm.refresh(), 0);
+    }
+ 
+    updateEditor(newContents) {
+        if (newContents === undefined) {
+            if (this.file !== null) {
+                newContents = this.file.handle();
+            } else {
+                // Doesn't matter, file was already shut down.
+                newContents = "";
+            }
+        } else if (newContents === null) {
+            // We're closing this file
+            this.main.components.fileSystem.deleteFileLocally_(this.filename);
+            return;
+        }
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.bm.setCode(newContents);
+            // Delay so that everything is rendered
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.bm.clearHighlightedLines();
+ 
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            if (!this.main.model.display.historyMode()) {
+                this.file.handle(this.bm.getCode());
+            }
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.dirty = false;
+        this.currentSubscription.dispose();
+        this.bm.removeChangeListener(this.currentBMListener);
+        if (this.main.model.display.historyMode()) {
+            this.main.model.ui.editors.python.turnOffHistoryMode();
+        }
+        this.clearLineSubscriptions();
+        super.exit(newFilename, oldEditor);
+    }
+ 
+    clearLineSubscriptions() {
+        this.bm.clearHighlightedLines();
+        if (this.lineErrorSubscription) {
+            this.lineErrorSubscription.dispose();
+            this.lineErrorSubscription = null;
+        }
+        if (this.lineUncoveredSubscription) {
+            this.lineUncoveredSubscription.dispose();
+            this.lineUncoveredSubscription = null;
+        }
+        if (this.lineTraceSubscription) {
+            this.lineTraceSubscription.dispose();
+            this.lineTraceSubscription = null;
+        }
+    }
+ 
+    makeSubscriptions() {
+        this.bm.setMode(this.main.model.display.pythonMode());
+        this.main.model.display.pythonMode.subscribe(mode => {
+            this.bm.setMode(mode);
+        });
+        this.main.model.assignment.settings.enableBlocks.subscribe(enabled => {
+            if (!enabled) {
+                this.bm.setMode(DisplayModes.TEXT);
+            } else {
+                this.bm.setMode(this.main.model.display.pythonMode());
+            }
+        });
+        this.main.model.assignment.settings.toolbox.subscribe(this.reloadToolbox.bind(this));
+        this.main.model.assignment.settings.enableImages.subscribe(imageMode => {
+            this.bm.setImageMode(imageMode);
+        });
+ 
+        // Small Layout Stuff
+        this.oldHeight = null;
+        if (this.main.model.ui.smallLayout()) {
+            this.useSmallLayout();
+        }
+        this.main.model.ui.smallLayout.subscribe(useSmallLayout => {
+            if (useSmallLayout) {
+                this.useSmallLayout();
+            } else if (this.oldHeight !== null) {
+                this.bm.configuration.height = this.oldHeight;
+                this.bm.textEditor.resizeResponsively();
+                this.oldHeight = null;
+            }
+        });
+    }
+ 
+    useSmallLayout() {
+        this.bm.textEditor.updateGutter({indentSidebar: false});
+        this.oldHeight = this.bm.configuration.height;
+        this.bm.configuration.height = 300; // TODO: Parameterize this
+        this.bm.textEditor.resizeResponsively();
+    }
+ 
+    reloadToolbox(toolbox) {
+        if (toolbox === "custom") {
+            let customToolbox = this.main.components.fileSystem.getFile("?toolbox.blockpy");
+            if (customToolbox == null) {
+                toolbox = "empty";
+            } else {
+                try {
+                    toolbox = JSON.parse(customToolbox.handle());
+                } catch (e) {
+                    console.error(e); // TODO: Improve error message for instructor
+                    toolbox = "minimal";
+                }
+            }
+        }
+        this.bm.configuration.toolbox = toolbox;
+        // TODO: Handle invalid toolbox better
+        try {
+            this.bm.blockEditor.remakeToolbox();
+        } catch (e) {
+            console.error(e);
+            this.bm.configuration.toolbox = "empty";
+            this.bm.blockEditor.remakeToolbox();
+        }
+    }
+ 
+    makePerAssignmentSubscriptions() {
+        this.main.model.display.instructor.subscribe((changed) => {
+            this.setReadOnly(this.decideIfNotEditable());
+        });
+        this.main.model.assignment.settings.onlyUploads.subscribe((changed) => {
+            this.setReadOnly(this.decideIfNotEditable());
+        });
+        this.main.model.configuration.partId.subscribe((changed) => {
+            // TODO: Handle part id changing after everything is loaded
+        });
+    }
+ 
+    decideIfNotEditable() {
+        let model = this.main.model;
+        return model.display.historyMode() || (
+            model.assignment.settings.onlyUploads() && !model.display.instructor()
+        );
+    }
+ 
+    setReadOnly(isReadOnly) {
+        this.readOnly = isReadOnly;
+        this.bm.setReadOnly(isReadOnly);
+    }
+ 
+    uploadFile(event) {
+        let filename = event.target.fileName;
+        let code = event.target.result;
+        if (filename.endsWith(".ipynb")) {
+            code = convertIpynbToPython(code);
+        }
+        this.main.components.server.logEvent("X-File.Upload", "", "", code, this.filename);
+        this.file.handle(code);
+        this.main.components.engine.run();
+        // TODO: Run code
+    }
+ 
+    downloadFile() {
+        let result = super.downloadFile();
+        if (result.name === "answer" && result.extension === ".py") {
+            result.name = sluggify(this.main.model.assignment.name());
+        }
+        result.mimetype = "text/x-python";
+        this.main.components.server.logEvent("X-File.Download", "", "", "", result.name);
+        return result;
+    }
+ 
+}
+ 
+export const PythonEditor = {
+    name: "Python",
+    extensions: [".py", ".reading"],
+    constructor: PythonEditorView,
+    template: PYTHON_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/quiz.js.html b/coverage/lcov-report/src/editor/quiz.js.html new file mode 100644 index 000000000..1d5178a22 --- /dev/null +++ b/coverage/lcov-report/src/editor/quiz.js.html @@ -0,0 +1,343 @@ + + + + + + Code coverage report for src/editor/quiz.js + + + + + + + + + +
+
+

All files / src/editor quiz.js

+
+ +
+ 6.06% + Statements + 2/33 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 6.06% + Lines + 2/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+ 
+export const QUIZ_EDITOR_HTML = `
+    <div>
+    <textarea class="blockpy-editor-quiz"></textarea>
+    </div>
+`;
+ 
+class QuizEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-quiz")[0], {
+            showCursorWhenSelecting: true,
+            lineNumbers: true,
+            firstLineNumber: 1,
+            indentUnit: 4,
+            tabSize: 4,
+            indentWithTabs: false,
+            extraKeys: {
+                "Tab": "indentMore",
+                "Shift-Tab": "indentLess",
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) {
+                        cm.setOption("fullScreen", false);
+                    } else {
+                        cm.display.input.blur();
+                    }
+                },
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                }
+            }
+        });
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.codeMirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            // Delay so that everything is rendered
+            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
+        }
+        // TODO: update dynamically when changing instructor status
+        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.codeMirror.setValue(newContents);
+            this.codeMirror.refresh();
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirror.getValue());
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.codeMirror.off("change", this.currentListener);
+        this.codeMirror.setOption("readOnly", false);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const QuizEditor = {
+    name: "Quiz",
+    extensions: [".quiz"],
+    constructor: QuizEditorView,
+    template: QUIZ_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/sample_submissions.js.html b/coverage/lcov-report/src/editor/sample_submissions.js.html new file mode 100644 index 000000000..88c868f77 --- /dev/null +++ b/coverage/lcov-report/src/editor/sample_submissions.js.html @@ -0,0 +1,592 @@ + + + + + + Code coverage report for src/editor/sample_submissions.js + + + + + + + + + +
+
+

All files / src/editor sample_submissions.js

+
+ +
+ 7.4% + Statements + 4/54 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/20 +
+ + +
+ 8.16% + Lines + 4/49 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  + 
/**
+ * Panel for editing the set of Sample Submissions.
+ * These are not provided at all to students without the Grader role.
+ */
+ 
+import {AbstractEditor} from "./abstract_editor";
+ 
+export const SubmissionStatuses = {
+    UNKNOWN: "unknown",
+    PASSED: "passed",
+    FAILED: "failed",
+    ERROR: "error",
+    SKIPPED: "skipped"
+};
+ 
+export class SampleSubmission {
+    constructor(name, status, code) {
+        this.name = name;
+        this.status = status;
+        this.code = code;
+    }
+ 
+    static Blank(count) {
+        return new SampleSubmission("Untitled"+(count || 1),
+                                    SubmissionStatuses.UNKNOWN, "a=0");
+    }
+ 
+    static deserialize(data) {
+        return new SampleSubmission(data.name, data.status, data.code);
+    }
+ 
+    serialize() {
+        return {
+            name: this.name,
+            status: this.status,
+            code: this.code
+        };
+    }
+}
+ 
+export const SAMPLE_SUBMISSIONS_HTML = `
+<div>
+    <div data-bind="foreach: {data: assignment.sampleSubmissions}"
+        class="row">
+        <div class="col-md-6">
+            <span data-bind="text: name"></span>
+            <textarea class="blockpy-editor-sample-submissions-code"
+                data-bind="codeMirrorInstance: code"></textarea>
+        </div>
+        <div class="col-md-6">
+            <span data-bind="text: status"></span>        
+        </div>
+    </div>
+</div>
+`;
+ 
+ko.bindingHandlers.codeMirrorInstance = {
+    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
+        // This will be called when the binding is first applied to an element
+        // Set up any initial state, event handlers, etc. here
+        console.log("INIT");
+        let cm = CodeMirror.fromTextArea(element, {
+            showCursorWhenSelecting: true,
+            lineNumbers: true,
+            firstLineNumber: 1,
+            indentUnit: 4,
+            tabSize: 4,
+            indentWithTabs: false,
+            extraKeys: {
+                "Tab": "indentMore",
+                "Shift-Tab": "indentLess",
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) {
+                        cm.setOption("fullScreen", false);
+                    } else {
+                        cm.display.input.blur();
+                    }
+                },
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                }
+            }
+        });
+        cm.setSize("100%", "100px");
+        return cm;
+    },
+    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
+        // This will be called once when the binding is first applied to an element,
+        // and again whenever any observables/computeds that are accessed change
+        // Update the DOM element based on the supplied values here.
+        console.log("UPDATE");
+    }
+};
+ 
+class SampleSubmissionsView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.tag = tag;
+        this.codeMirrors = [];
+        this.dirty = false;
+    }
+ 
+    buildEditor(newDOM, index, newElement) {
+ 
+    }
+ 
+    rebuildEditors() {
+        console.log("Rebuilding editors");
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        //this.rebuildEditors();
+        //this.codeMirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            console.log(this.tag);
+            console.log(this.tag.find(".CodeMirror"));
+            console.log(this.tag.find(".CodeMirror").map((i,cm) => console.log("+++", cm.CodeMirror)));
+            this.tag.find(".CodeMirror").map((i, cm) => cm.CodeMirror.refresh());
+            console.log("REFRESH");
+            // Delay so that everything is rendered
+            setTimeout(() => this.tag.find(".CodeMirror").map((i, cm) => cm.CodeMirror.refresh()), 1);
+        }
+        // TODO: update dynamically when changing instructor status
+        //this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            console.log(this.codeMirrors);
+            //this.codeMirrors.each( (i, cm) => cm.setValue(newContents.join("\n")));
+            //this.codeMirrors.each( (i, cm) => cm.refresh());
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirrors.map(cm => cm.getValue()));
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.codeMirrors = [];
+        //this.codeMirrors.off("change", this.currentListener);
+        //this.codeMirror.setOption("readOnly", false);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const SampleSubmissions = {
+    name: "Sample Submissions",
+    extensions: ["!sample_submissions.blockpy"],
+    constructor: SampleSubmissionsView,
+    template: SAMPLE_SUBMISSIONS_HTML
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/tags.js.html b/coverage/lcov-report/src/editor/tags.js.html new file mode 100644 index 000000000..f298287db --- /dev/null +++ b/coverage/lcov-report/src/editor/tags.js.html @@ -0,0 +1,178 @@ + + + + + + Code coverage report for src/editor/tags.js + + + + + + + + + +
+
+

All files / src/editor tags.js

+
+ +
+ 66.66% + Statements + 2/3 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 66.66% + Lines + 2/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+ 
+export const TAGS_EDITOR_HTML = `
+Create new
+Import by name
+Find by owner/course/kind
+ 
+Tags:
+    Data:
+        Name
+        Kind
+        Level
+        Version
+        Description
+    Controls:
+        Edit
+        Remove
+        Delete 
+`;
+ 
+class TagsEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag.find(".blockpy-editor-tags"));
+    }
+}
+ 
+export const TagsEditor = {
+    name: "Tags",
+    extensions: ["!tags.blockpy"],
+    constructor: TagsEditorView,
+    template: TAGS_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/text.js.html b/coverage/lcov-report/src/editor/text.js.html new file mode 100644 index 000000000..186be2a1e --- /dev/null +++ b/coverage/lcov-report/src/editor/text.js.html @@ -0,0 +1,349 @@ + + + + + + Code coverage report for src/editor/text.js + + + + + + + + + +
+
+

All files / src/editor text.js

+
+ +
+ 6.06% + Statements + 2/33 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 6.06% + Lines + 2/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+import {default_header} from "./default_header";
+ 
+export const TEXT_EDITOR_HTML = `
+    ${default_header}
+    <div>
+    <textarea class="blockpy-editor-text"></textarea>
+    </div>
+`;
+ 
+class TextEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-text")[0], {
+            showCursorWhenSelecting: true,
+            lineNumbers: true,
+            firstLineNumber: 1,
+            indentUnit: 4,
+            tabSize: 4,
+            indentWithTabs: false,
+            extraKeys: {
+                "Tab": "indentMore",
+                "Shift-Tab": "indentLess",
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) {
+                        cm.setOption("fullScreen", false);
+                    } else {
+                        cm.display.input.blur();
+                    }
+                },
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                }
+            }
+        });
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.codeMirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            // Delay so that everything is rendered
+            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
+        }
+        // TODO: update dynamically when changing instructor status
+        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.codeMirror.setValue(newContents);
+            this.codeMirror.refresh();
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirror.getValue());
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.codeMirror.off("change", this.currentListener);
+        this.codeMirror.setOption("readOnly", false);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const TextEditor = {
+    name: "Text",
+    extensions: [".txt"],
+    constructor: TextEditorView,
+    template: TEXT_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/toolbox.js.html b/coverage/lcov-report/src/editor/toolbox.js.html new file mode 100644 index 000000000..d76d25ea4 --- /dev/null +++ b/coverage/lcov-report/src/editor/toolbox.js.html @@ -0,0 +1,388 @@ + + + + + + Code coverage report for src/editor/toolbox.js + + + + + + + + + +
+
+

All files / src/editor toolbox.js

+
+ +
+ 5.71% + Statements + 2/35 +
+ + +
+ 0% + Branches + 0/12 +
+ + +
+ 0% + Functions + 0/7 +
+ + +
+ 5.71% + Lines + 2/35 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  + 
import {AbstractEditor} from "./abstract_editor";
+ 
+export const TOOLBOX_EDITOR_HTML = `
+    <div>
+        <div class="col-md-12"
+         role="toolbar" aria-label="Toolbox Toolbar">
+             <div class="btn-group mr-2" role="group" aria-label="Save Group">         
+                <button type="button" class="btn btn-outline-secondary btn-editor-json-save">
+                    <span class="fas fa-save"></span> Save
+                 </button>
+             </div>
+         </div>
+        <textarea class="blockpy-editor-toolbox"></textarea>
+    </div>
+`;
+ 
+class ToolboxEditorView extends AbstractEditor {
+    constructor(main, tag) {
+        super(main, tag);
+        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-toolbox")[0], {
+            showCursorWhenSelecting: true,
+            lineNumbers: true,
+            firstLineNumber: 1,
+            indentUnit: 4,
+            tabSize: 4,
+            indentWithTabs: false,
+            mode: "json",
+            extraKeys: {
+                "Tab": "indentMore",
+                "Shift-Tab": "indentLess",
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) {
+                        cm.setOption("fullScreen", false);
+                    } else {
+                        cm.display.input.blur();
+                    }
+                },
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                }
+            }
+        });
+        this.dirty = false;
+    }
+ 
+    enter(newFilename, oldEditor) {
+        super.enter(newFilename, oldEditor);
+        this.dirty = false;
+        this.updateEditor(this.file.handle());
+        // Subscribe to the relevant File
+        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
+        // Notify relevant file of changes to BM
+        this.currentListener = this.updateHandle.bind(this);
+        this.tag.find(".btn-editor-json-save").on("click", this.currentListener);
+        //this.codeMirror.on("change", this.currentListener);
+        if (oldEditor !== this) {
+            // Delay so that everything is rendered
+            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
+        }
+        // TODO: update dynamically when changing instructor status
+        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
+ 
+    }
+ 
+    updateEditor(newContents) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.codeMirror.setValue(newContents);
+            this.codeMirror.refresh();
+            this.dirty = false;
+        }
+    }
+ 
+    updateHandle(event) {
+        this.dirty = !this.dirty;
+        if (this.dirty) {
+            this.dirty = true;
+            this.file.handle(this.codeMirror.getValue());
+            if (this.main.model.assignment.settings.toolbox() === "custom") {
+                this.main.components.pythonEditor.reloadToolbox("custom");
+            }
+            this.dirty = false;
+        }
+    }
+ 
+    exit(newFilename, oldEditor, newEditor) {
+        // Remove subscriber
+        this.currentSubscription.dispose();
+        this.tag.find(".btn-editor-toolbox-save").off("click", this.currentListener);
+        //this.codeMirror.off("change", this.currentListener);
+        this.codeMirror.setOption("readOnly", false);
+        super.exit(newFilename, oldEditor);
+    }
+}
+ 
+export const ToolboxEditor = {
+    name: "Toolbox",
+    extensions: ["?toolbox.blockpy"],
+    constructor: ToolboxEditorView,
+    template: TOOLBOX_EDITOR_HTML
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/editors.js.html b/coverage/lcov-report/src/editors.js.html new file mode 100644 index 000000000..4aa1a254c --- /dev/null +++ b/coverage/lcov-report/src/editors.js.html @@ -0,0 +1,493 @@ + + + + + + Code coverage report for src/editors.js + + + + + + + + + +
+
+

All files / src editors.js

+
+ +
+ 10.2% + Statements + 5/49 +
+ + +
+ 0% + Branches + 0/18 +
+ + +
+ 12.5% + Functions + 1/8 +
+ + +
+ 8.69% + Lines + 4/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +4x +  +4x +  +  +  +  +40x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * Editors are inferred from Filenames.
+ *
+ * The editor is based on the extension:
+ *  .blockpy: Special editor (will be chosen by filename)
+ *  .py: Python Editor
+ *  .md: Markdown Editor
+ *  .txt: Text Editor (also used for other types)
+ *  .peml: PEML Editor
+ *  .png, .gif, .jpeg, .jpg, .bmp: Image Editor
+ *  .json: JSON Editor
+ *  .yaml: YAML Editor
+ */
+ 
+import {PythonEditor} from "./editor/python";
+import {TextEditor} from "./editor/text";
+import {AssigmentType as AssignmentType, AssignmentSettings} from "./editor/assignment_settings";
+import {TagsEditor} from "./editor/tags";
+import {MarkdownEditor} from "./editor/markdown";
+import {SampleSubmissions} from "./editor/sample_submissions";
+import {JsonEditor} from "./editor/json";
+import {ToolboxEditor} from "./editor/toolbox";
+import {QuizEditor} from "./editor/quiz";
+import {ImageEditor} from "./editor/images";
+ 
+/**
+ * The different possible editors available
+ * @enum {string}
+ */
+export let EditorsEnum = {
+    SUBMISSION: "submission",
+    ASSIGNMENT: "assignment",
+    INSTRUCTIONS: "instructions",
+    ON_RUN: "on_run",
+    ON_CHANGE: "on_change",
+    ON_EVAL: "on_eval",
+    STARTING_CODE: "starting_code",
+    SAMPLE_SUBMISSIONS: "sample_submissions",
+    INSTRUCTOR_FILE: "instructor_file"
+};
+ 
+const SPECIAL_NAMESPACES = ["!", "^", "?", "$"];
+ 
+const AVAILABLE_EDITORS = [
+    TextEditor, PythonEditor, AssignmentSettings, TagsEditor, MarkdownEditor,
+    SampleSubmissions, JsonEditor, ToolboxEditor, QuizEditor, ImageEditor
+];
+ 
+export const EDITORS_HTML = AVAILABLE_EDITORS.map(editor => `
+<div class="blockpy-panel blockpy-editor" 
+     data-bind="visible: ui.editors.view().name === '${editor.name}', class: ui.editors.width">
+    <div>
+    ${editor.template}
+    </div>
+</div>
+`
+    /*
+    `
+<!-- ko if: ui.editors.view().name === '${editor.name}' -->
+${editor.template}
+<!-- /ko -->`*/
+).join("\n");
+ 
+export class Editors {
+    constructor(main, tag) {
+        this.main = main;
+        this.tag = tag;
+        this.current = null;
+        this.registered_ = [];
+        this.extensions_ = {};
+        this.byName_ = {};
+        AVAILABLE_EDITORS.forEach(editor => this.registerEditor(editor));
+        this.main.model.display.filename.subscribe(this.changeEditor, this);
+    }
+ 
+    registerEditor(data) {
+        let extensions = data.extensions;
+        let instance = new data.constructor(this.main, this.tag);
+        instance.name = data.name;
+        this.registered_.push(instance);
+        this.byName_[data.name.toLowerCase()] = instance;
+        for (let i=0; i < extensions.length; i++) {
+            this.extensions_[extensions[i]] = instance;
+        }
+    }
+ 
+    byName(name) {
+        return this.byName_[name.toLowerCase()];
+    }
+ 
+    changeEditor(newFilename) {
+        let oldEditor = this.current;
+        let newEditor = this.getEditor(newFilename, oldEditor);
+        if (oldEditor !== null) {
+            oldEditor.exit(newFilename, oldEditor, newEditor);
+        }
+        this.current = newEditor;
+        this.current.enter(newFilename, oldEditor);
+    }
+ 
+    static parseFilename(path) {
+        let space = path.charAt(0);
+        if (SPECIAL_NAMESPACES.indexOf(space) !== -1) {
+            path = path.substr(1);
+        } else {
+            space = "";
+        }
+        let name = path.substr(0, path.lastIndexOf("."));
+        let type = path.substr(path.lastIndexOf("."));
+        return {"space": space, "name": name, "type": type};
+    }
+ 
+    getEditor(path) {
+        let {space, name, type} = Editors.parseFilename(path);
+        if (type === ".blockpy" && path in this.extensions_) {
+            return this.extensions_[path];
+        }
+        let assignmentType = this.main.model.assignment.type();
+        if (assignmentType !== AssignmentType.BLOCKPY) {
+            if (name === "answer" && type === ".py") {
+                if ("."+assignmentType in this.extensions_) {
+                    return this.extensions_["."+assignmentType];
+                } else {
+                    console.error("No editor registered for assignment type:", assignmentType);
+                    return this.registered_[0];
+                }
+            }
+        }
+        if (type in this.extensions_) {
+            return this.extensions_[type];
+        } else {
+            return this.registered_[0];
+        }
+        //console.log(this.main.model.assignment.type(), space, name, type);
+    }
+ 
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine.js.html b/coverage/lcov-report/src/engine.js.html new file mode 100644 index 000000000..5c79ca905 --- /dev/null +++ b/coverage/lcov-report/src/engine.js.html @@ -0,0 +1,787 @@ + + + + + + Code coverage report for src/engine.js + + + + + + + + + +
+
+

All files / src engine.js

+
+ +
+ 0% + Statements + 0/77 +
+ + +
+ 0% + Branches + 0/24 +
+ + +
+ 0% + Functions + 0/20 +
+ + +
+ 0% + Lines + 0/77 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {StatusState} from "./server";
+import {OnRunConfiguration} from "./engine/on_run";
+import {RunConfiguration} from "./engine/run";
+import {EvalConfiguration} from "./engine/eval";
+import {SampleConfiguration} from "./engine/sample";
+import {OnChangeConfiguration} from "./engine/on_change";
+import {OnEvalConfiguration} from "./engine/on_eval";
+import {OnSampleConfiguration} from "./engine/on_sample";
+ 
+/**
+ * An object for executing Python code and passing the results along to interested components.
+ *
+ * Interesting components:
+ *  Execution Buffer: Responsible for collecting the trace during program execution.
+ *                    This prevents Knockoutjs from updating the editor during execution.
+ *
+ * @constructor
+ * @this {BlockPyEditor}
+ * @param {Object} main - The main BlockPy instance
+ * @param {HTMLElement} tag - The HTML object this is attached to.
+ */
+export class BlockPyEngine {
+    constructor(main) {
+        this.main = main;
+        this.executionModel = this.main.model.execution;
+ 
+        this.configurations = {
+            run: new RunConfiguration(main),
+            eval: new EvalConfiguration(main),
+            onRun: new OnRunConfiguration(main),
+            onChange: new OnChangeConfiguration(main),
+            onEval: new OnEvalConfiguration(main)
+        };
+ 
+        // Preconfigure skulpt so we can parse
+        Sk.configure(this.configurations.run.getSkulptOptions());
+ 
+        // Keeps track of the tracing while the program is executing
+        this.executionBuffer = {};
+ 
+        /**
+         * Definable function to be run when execution has fully ended,
+         * whether it succeeds or fails.
+         */
+        this.onExecutionBegin = null;
+        this.onExecutionEnd = null;
+    }
+ 
+    /**
+     * Reset reports
+     */
+    resetReports() {
+        let report = this.executionModel.reports;
+        report["verifier"] = {};
+        report["parser"] = {};
+        report["student"] = {};
+        report["instructor"] = {};
+        report["model"] = this.main.model;
+    };
+ 
+    resetStudentModel() {
+        let student = this.executionModel.student;
+        student.calls = {};
+        student.currentStep(null);
+        student.currentTraceStep(0);
+        student.lastStep(0);
+        student.currentLine(null);
+        student.currentTraceData.removeAll();
+        student.results = null;
+        student.tracing = [];
+    }
+ 
+    resetExecutionBuffer() {
+        this.executionBuffer = {
+            "trace": [],
+            "step": 0,
+            "line": 0,
+        };
+    };
+ 
+    /**
+     * Remove all interface aspects of the previous Run.
+     */
+    reset() {
+        // TODO: Clear out any coverage/trace/error highlights in editors
+        // Reset execution in model
+        this.resetStudentModel();
+        // Get reports ready
+        this.resetReports();
+        // Clear out the execution buffer
+        this.resetExecutionBuffer();
+        // Clear out the console of printed stuff
+        this.main.components.console.clear();
+        // Clear out any old feedback
+        this.main.components.feedback.clear();
+    }
+ 
+    delayedRun(disableFeedback=false) {
+        //this.main.model.status.onExecution(StatusState.ACTIVE);
+        //$(".blockpy-run").addClass("blockpy-run-running");
+        this.run(disableFeedback);
+        //setTimeout(this.run.bind(this), 1);
+    }
+ 
+    stop() {
+ 
+    }
+ 
+    run(disableFeedback=false) {
+        this.configuration = this.configurations.run.use(this);
+        let execution = this.execute().then(
+            this.configuration.success.bind(this.configuration),
+            this.configuration.failure.bind(this.configuration)
+        );
+        if (!this.main.model.assignment.settings.disableFeedback() && !disableFeedback) {
+            execution.then(() => {
+                this.configuration.provideSecretError();
+                return this.onRun();
+            });
+        } else {
+            execution.then(this.configuration.showErrors.bind(this.configuration));
+        }
+        execution.then(this.configuration.finally.bind(this.configuration));
+    }
+ 
+    onRun() {
+        this.configuration = this.configurations.onRun.use(this);
+        this.execute().then(
+            this.configuration.success.bind(this.configuration),
+            this.configuration.failure.bind(this.configuration)
+        )
+            .then(this.configuration.finally.bind(this.configuration))
+            .then(this.executionEnd_.bind(this));
+    }
+ 
+    evaluate() {
+        this.main.model.status.onExecution(StatusState.ACTIVE);
+        let evaluationInput = this.main.components.console.evaluate();
+        console.log(evaluationInput);
+        evaluationInput.then((userInput) => {
+            this.configuration = this.configurations.eval.use(this, userInput);
+            let execution = this.execute().then(
+                this.configuration.success.bind(this.configuration),
+                this.configuration.failure.bind(this.configuration)
+            );
+            if (!this.main.model.assignment.settings.disableFeedback() &&
+                this.main.model.assignment.onEval()) {
+                this.configuration.provideSecretError();
+                execution.then(this.onEval.bind(this));
+            } else {
+                execution.then(this.configuration.showErrors.bind(this.configuration))
+                    .then(this.evaluate.bind(this));
+            }
+            execution.then(this.configuration.finally.bind(this.configuration));
+        });
+    }
+ 
+    onEval() {
+        this.configuration = this.configurations.onEval.use(this);
+        this.execute().then(
+            this.configuration.success.bind(this.configuration),
+            this.configuration.failure.bind(this.configuration)
+        )
+            .then(this.evaluate.bind(this))
+            .then(this.configuration.finally.bind(this.configuration));
+    }
+ 
+    onChange() {
+        this.configuration = this.configurations.onChange.use(this);
+    }
+ 
+    execute() {
+        this.main.model.status.onExecution(StatusState.ACTIVE);
+        return Sk.misceval.asyncToPromise(() =>
+            Sk.importMainWithBody(this.configuration.filename, false,
+                                  this.configuration.code, true,
+                                  this.configuration.sysmodules)
+        );
+    }
+ 
+    /**
+     * Activated whenever the Python code changes
+     */
+    on_change() {
+        let FILENAME = "on_change";
+        // Skip if the instructor has not defined anything
+        if (!this.main.model.programs[FILENAME]().trim()) {
+            return false;
+        }
+        this.main.model.execution.status("changing");
+        this.main.components.server.saveCode();
+        // On step does not perform parse analysis by default or run student code
+        let engine = this;
+        let feedback = this.main.components.feedback;
+        engine.resetReports();
+        engine.verifyCode();
+        engine.updateParse();
+        engine.runInstructorCode(FILENAME, true, function (module) {
+            if (Sk.executionReports["instructor"]["success"]) {
+                // SUCCESS, SCORE, CATEGORY, LABEL, MESSAGE, DATA, HIDE
+                // TODO: only show under certain circumstances
+                if (!success &&
+                    !(category === "Instructor" && label === "No errors")) {
+                    feedback.presentFeedback(category, label, message, line);
+                }
+                engine.main.components.feedback.presentFeedback(module.$d);
+                engine.main.model.execution.status("complete");
+            }
+        });
+        engine.main.components.server.logEvent("engine", "on_change");
+    };
+ 
+ 
+    /**
+     * Helper function that will attempt to call the defined onExecutionEnd,
+     * but will do nothing if there is no function defined.
+     */
+    executionEnd_() {
+        if (this.onExecutionEnd !== null) {
+            this.onExecutionEnd();
+        }
+    }
+ 
+    /**
+     *
+     */
+    executionBegin_() {
+        if (this.onExecutionBegin !== null) {
+            this.onExecutionBegin();
+        }
+    }
+ 
+}
+ 
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/configurations.js.html b/coverage/lcov-report/src/engine/configurations.js.html new file mode 100644 index 000000000..445d20a5b --- /dev/null +++ b/coverage/lcov-report/src/engine/configurations.js.html @@ -0,0 +1,742 @@ + + + + + + Code coverage report for src/engine/configurations.js + + + + + + + + + +
+
+

All files / src/engine configurations.js

+
+ +
+ 1.25% + Statements + 1/80 +
+ + +
+ 0% + Branches + 0/36 +
+ + +
+ 0% + Functions + 0/26 +
+ + +
+ 1.29% + Lines + 1/77 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +2201x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
export const EMPTY_MODULE = "let $builtinmodule = function(mod){ return mod; }";
+ 
+/**
+ * A container for holding settings of a particular run configuration.
+ * This is the root class for all other configurations.
+ */
+export class Configuration {
+ 
+    constructor(main) {
+        this.main = main;
+        this.filename = null;
+        this.code = null;
+        this.sysmodules = undefined;
+    }
+ 
+    use(engine) {
+        // Access point for instructor data
+        this.engine = engine;
+        Sk.executionReports = this.main.model.execution.reports;
+        Sk.console = this.main.components.console;
+        Sk.queuedInput = [];
+        Sk.configure(this.getSkulptOptions());
+        // Set openFile as mechanism to read files
+        Sk.inBrowser = this.openFile.bind(this);
+        // Function to convert filenames to URLs
+        Sk.fileToURL = this.getUrlFromFilename.bind(this);
+        // Proxy requests
+        Sk.requestsGet = (url, data, timeout) => this.openURL(url, data, timeout);
+        // Configure a "do you want to wait? prompt"
+        Sk.timeoutHandler = (timePassed, execLimit) => {
+            if (this.main.model.assignment.settings.disableTimeout()) {
+                return null;
+            }
+            let promptMessage = this.getTimeoutPrompt(timePassed/1000 > 30);
+            let delay = prompt(promptMessage, Sk.execLimit/1000);
+            if (delay !== null || delay==0) {
+                delay = Sk.execLimit + parseInt(delay, 10) * 1000;
+                Sk.execLimit = delay;
+                Sk.execLimitFunction = () =>
+                    this.main.model.assignment.settings.disableTimeout() ? Infinity : delay;
+            }
+            return delay;
+        };
+        // Attach beforeCall
+        Sk.beforeCall = this.beforeCall.bind(this);
+        return this;
+    }
+ 
+    getTimeoutPrompt(longTimeout) {
+        if (longTimeout) {
+            return "The program has taken a REALLY long time to run (30 or more seconds). You might want to cancel and check your code. Or, you can add more seconds to wait below.";
+        } else {
+            return "The program is taking a while to run. How many more seconds would you like to wait?";
+        }
+    }
+ 
+    getSkulptOptions() {
+        return {
+            __future__: Sk.python3,
+            // import
+            read: this.importFile.bind(this),
+            // open
+            //fileopen: this.openFile.bind(this),
+            // file.write
+            filewrite: this.writeFile.bind(this),
+            // print
+            output: this.print.bind(this),
+            // input
+            inputfun: this.input.bind(this),
+            inputfunTakesPrompt: true,
+            // Media Image Proxy URL
+            imageProxy: this.getImageProxy.bind(this),
+            // TODO: Make this set by the system so we can use our own servers in practice
+            emojiProxy: (part) => `https://twemoji.maxcdn.com/v/13.1.0/svg/${part.toLowerCase()}.svg`,
+            // Whether or not to keep the globals
+            retainGlobals: true
+        };
+    }
+ 
+    getUrlFromFilename(filename) {
+        const found = this.main.components.fileSystem.filesToUrls[filename];
+        if (found === undefined) {
+            throw new Sk.builtin.OSError("File not found: " + filename);
+        }
+        return found;
+    }
+ 
+    /**
+     * Used to access Skulpt built-ins. This is pretty generic, taken
+     * almost directly from the Skulpt docs.
+     *
+     * @param {String} filename - The python filename (e.g., "os" or "pprint") that will be loaded.
+     * @returns {String} The JavaScript source code of the file (weird, right?)
+     * @throws Will throw an error if the file isn't found.
+     */
+    importFile(filename) {
+        console.warn("Unimplemented method!");
+        // TODO
+    };
+ 
+    openURL(url, data, timeout) {
+        //return new Promise((resolve, reject) => {
+        let mockUrlData = this.main.components.fileSystem.getFile("?mock_urls.blockpy");
+        if (mockUrlData == null) {
+            throw (new Sk.builtin.IOError("Cannot access url: URL Data was not made available for this assignment"));
+        }
+        mockUrlData = JSON.parse(mockUrlData.handle());
+        for (let filename in mockUrlData) {
+            if (mockUrlData.hasOwnProperty(filename)) {
+                for (let i=0; i < mockUrlData[filename].length; i+= 1) {
+                    if (mockUrlData[filename][i] === url) {
+                        let fileData = this.main.components.fileSystem.readFile(filename);
+                        return (fileData);
+                    }
+                }
+            }
+        }
+        //reject(new Sk.builtin.IOError("Cannot access url: "+url+" was not made available for this assignment"));
+        throw (new Sk.builtin.IOError("Cannot access url: "+url+" was not made available for this assignment"));
+        //});
+    }
+ 
+    openFile() {
+        console.warn("Unimplemented method!");
+        // TODO
+    }
+ 
+    writeFile() {
+        console.warn("Unimplemented method!");
+        // TODO
+    }
+ 
+    print(value) {
+        this.main.components.console.print(value);
+    }
+ 
+    input() {
+        console.warn("Unimplemented method!");
+        // TODO
+    }
+ 
+    clearInput() {
+        if (this.main.model.display.clearInputs()) {
+            this.main.model.execution.input([]);
+        }
+        this.main.model.execution.inputIndex(0);
+    }
+ 
+    static inputMockFunction() {
+        if (Sk.queuedInput.length) {
+            return Sk.queuedInput.pop();
+        } else {
+            return "";
+        }
+    };
+ 
+    getImageProxy(url) {
+        // TODO
+        return url;
+    }
+ 
+    step() {
+ 
+    }
+ 
+    lastStep() {
+ 
+    }
+ 
+    isForbidden(filename) {
+        return false;
+    }
+ 
+    success(module) {
+        throw new Error("Abstract success execution");
+    }
+ 
+    failure(error) {
+        throw new Error("Abstract failure execution");
+    }
+ 
+    finally(result) {
+        // Force Pygame to stop trapping keyboard events
+        if (this.main.components.console.pygameLine) {
+            this.main.components.console.pygameLine.cleanup();
+            this.main.components.console.pygameLine.stop();
+        }
+    }
+ 
+    dummyOutSandbox() {
+        //Sk.builtinFiles.files["src/lib/pedal/sandbox/sandbox.py"] = "class Sandbox: pass\ndef run(): pass\ndef reset(): pass\n";
+    }
+ 
+    beforeCall(functionName, posargs, kwargs) {
+        //console.log("TRACKING CALL", functionName, posargs, kwargs);
+        // TODO: Handle fastcall too? Check how that works in Skulpt side
+        let studentModel = this.main.model.execution.reports.student;
+        if (!("calls" in studentModel)) {
+            studentModel.calls = {};
+        }
+        if (!(functionName in studentModel.calls)) {
+            studentModel.calls[functionName] = [];
+        }
+        let args = {};
+        // Get actual parameter names!!
+        for (let i=0; i < posargs.length; i+= 1) {
+            args["__ARG"+i] = posargs[i];
+        }
+        if (kwargs && kwargs[0] != null) {
+            args["__ARGS"] = kwargs[0];
+        }
+        if (kwargs && kwargs[1] != null) {
+            args["__KWARGS"] = kwargs[1];
+        }
+        //console.log(args);
+        studentModel.calls[functionName].push(args);
+    }
+}
+ 
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/eval.js.html b/coverage/lcov-report/src/engine/eval.js.html new file mode 100644 index 000000000..7bfb7e5ec --- /dev/null +++ b/coverage/lcov-report/src/engine/eval.js.html @@ -0,0 +1,286 @@ + + + + + + Code coverage report for src/engine/eval.js + + + + + + + + + +
+
+

All files / src/engine eval.js

+
+ +
+ 0% + Statements + 0/34 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/8 +
+ + +
+ 0% + Lines + 0/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {StudentConfiguration} from "./student";
+import {StatusState} from "../server";
+import {BlockPyTrace} from "../trace";
+ 
+export class EvalConfiguration extends StudentConfiguration {
+    use(engine, code) {
+        // TODO: fix to be currently added line
+        this.main.model.execution.feedback.message("Running...");
+        this.filename = "answer";
+        this.code = "_ = " + code;
+        Sk.afterSingleExecution = null;
+        Sk.beforeCall = null;
+ 
+        super.use(engine);
+ 
+        Sk.retainGlobals = true;
+        Sk.globals = this.main.model.execution.student.globals();
+ 
+        this.main.components.server.logEvent("X-File.Add", "", "", code, "evaluations");
+        this.main.components.server.logEvent("Compile", "", "", this.code, "evaluations");
+ 
+        return this;
+    }
+ 
+    success(module) {
+        console.log("Eval success");
+        this.main.components.server.logEvent("X-Evaluate.Program", "", "", "", "evaluations");
+        this.main.model.status.onExecution(StatusState.READY);
+        this.main.model.execution.student.globals(Sk.globals);
+        Sk.globals = {};
+        let report = this.main.model.execution.reports;
+        let filename = this.filename;
+        this.main.model.execution.student.results = module;
+        this.main.components.console.printValue(Sk.ffi.remapToJs(module.$d._.$r()));
+        return new Promise((resolve, reject) => {
+            //this.step(module.$d, module.$d,-1, 0, filename + ".py");
+            this.lastStep();
+            report["student"] = {
+                "success": true,
+                "trace": this.engine.executionBuffer.trace,
+                "lines": this.engine.executionBuffer.trace.map(x => x.line),
+                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
+                "results": module,
+                "output": this.main.model.execution.output,
+                "evaluation": this.code,
+                "calls": this.main.model.execution.student.calls,
+                "tracing": []
+            };
+            resolve();
+        });
+    }
+ 
+    failure(error) {
+        console.log("Eval failure", error);
+        this.main.model.status.onExecution(StatusState.FAILED);
+        let report = this.main.model.execution.reports;
+        this.main.components.server.logEvent("Compile.Error", "", "", error.toString(), "evaluations");
+        return new Promise((resolve, reject) => {
+            report["student"] = {
+                "success": false,
+                "error": error,
+                "evaluation": this.code,
+                "tracing": []
+            };
+            resolve();
+        });
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/index.html b/coverage/lcov-report/src/engine/index.html new file mode 100644 index 000000000..a3b0adbe8 --- /dev/null +++ b/coverage/lcov-report/src/engine/index.html @@ -0,0 +1,251 @@ + + + + + + Code coverage report for src/engine + + + + + + + + + +
+
+

All files src/engine

+
+ +
+ 1.58% + Statements + 7/443 +
+ + +
+ 0% + Branches + 0/141 +
+ + +
+ 0% + Functions + 0/92 +
+ + +
+ 1.61% + Lines + 7/433 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
configurations.js +
+
1.25%1/800%0/360%0/261.29%1/77
eval.js +
+
0%0/34100%0/00%0/80%0/33
instructor.js +
+
2.59%2/770%0/360%0/172.59%2/77
on_change.js +
+
0%0/5100%0/00%0/10%0/5
on_eval.js +
+
2.08%1/480%0/120%0/42.08%1/48
on_run.js +
+
5.76%3/520%0/120%0/55.76%3/52
on_sample.js +
+
0%0/4100%0/00%0/10%0/4
run.js +
+
0%0/560%0/100%0/120%0/54
sample.js +
+
0%0/4100%0/00%0/10%0/4
student.js +
+
0%0/830%0/350%0/170%0/79
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/instructor.js.html b/coverage/lcov-report/src/engine/instructor.js.html new file mode 100644 index 000000000..04bff3f9a --- /dev/null +++ b/coverage/lcov-report/src/engine/instructor.js.html @@ -0,0 +1,592 @@ + + + + + + Code coverage report for src/engine/instructor.js + + + + + + + + + +
+
+

All files / src/engine instructor.js

+
+ +
+ 2.59% + Statements + 2/77 +
+ + +
+ 0% + Branches + 0/36 +
+ + +
+ 0% + Functions + 0/17 +
+ + +
+ 2.59% + Lines + 2/77 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {Configuration, EMPTY_MODULE} from "./configurations.js";
+import {$sk_mod_instructor} from "../skulpt_modules/sk_mod_instructor";
+import {$sk_mod_coverage} from "../skulpt_modules/coverage";
+import {$pedal_tracer} from "../skulpt_modules/pedal_tracer";
+import {chompSpecialFile} from "../files";
+ 
+const UTILITY_MODULE_CODE = "var $builtinmodule = " + $sk_mod_instructor.toString();
+const COVERAGE_MODULE_CODE = $sk_mod_coverage;
+ 
+export class InstructorConfiguration extends Configuration {
+    use(engine) {
+        super.use(engine);
+        // Instructors get 4 seconds
+        Sk.execLimitFunction = () =>
+            this.main.model.assignment.settings.disableTimeout() ? Infinity : 7000;
+        Sk.execLimit = Sk.execLimitFunction();
+        // Stepper! Executed after every statement.
+        Sk.afterSingleExecution = null; // 10 *1000
+        // Mute everything
+        this.main.model.display.mutePrinter(true);
+        // Disable input box
+        Sk.queuedInput = [];
+        // TODO Sk.inputfun = BlockPyEngine.inputMockFunction;
+        // TODO: Allow input function to disable the timer, somehow
+        // Disable the beforeCall checker unless specifically requested
+        Sk.beforeCallBackup = Sk.beforeCall;
+        Sk.beforeCall = null;
+        // Enable utility mode
+        Sk.builtinFiles.files["src/lib/utility/__init__.js"] = UTILITY_MODULE_CODE;
+        Sk.builtinFiles.files["src/lib/coverage.py"] = COVERAGE_MODULE_CODE;
+        // TODO: Check if this needs to be optimized
+        //const PEDAL_TRACER_MODULE_CODE = Sk.compile($pedal_tracer, "tracer.py", "exec", true, false);
+        Sk.builtinFiles.files["src/lib/pedal/sandbox/tracer.py"] = $pedal_tracer;
+        delete Sk.builtinFiles.files["src/lib/pedal/sandbox/tracer.js"];
+        // TODO: Mock Pedal's tracer module with the appropriate version
+        Sk.builtinFiles.files["./_instructor/__init__.js"] = EMPTY_MODULE;
+        // Reuse any existing sysmodules that we previously found, but not __main__ modules
+        this.sysmodules = this.clearExistingStudentImports();
+        // Horrific hack, to prevent Tifa from caching a bad version of the students' import
+        Sk.clearExistingStudentImports = this.clearExistingStudentImports;
+        return this;
+    }
+ 
+    print(value) {
+        super.print(value);
+        console.info("Printed:", value);
+    }
+ 
+    clearExistingStudentImports() {
+        let sysmodules = this.main.model.execution.instructor.sysmodules;
+        // Remove any existing __main__ modules
+        if (sysmodules !== undefined) {
+            for (let filename of this.getAllFilenames()) {
+                let skFilename = new Sk.builtin.str(filename);
+                /*if (sysmodules.quick$lookup(skFilename)) {
+                    sysmodules.pop$item(skFilename);
+                }*/
+                sysmodules.pop$item(skFilename);
+            }
+        }
+        return sysmodules;
+    }
+ 
+    getAllStudentFiles() {
+        const files = {
+            "answer.py": this.main.model.ui.files.getStudentCode()
+        };
+        // Skip special instructor files
+        this.main.model.assignment.extraInstructorFiles().forEach(file => {
+            if (!("!^$#".includes(file.filename()[0]))) {
+                files[chompSpecialFile(file.filename())] = file.contents();
+            }
+        });
+        // Include normal student extra files
+        this.main.model.submission.extraFiles().forEach(file => {
+            files[file.filename()] = file.contents();
+        });
+        return files;
+    }
+ 
+    getAllFilenames() {
+        function clean(filename) {
+            filename = chompSpecialFile(filename);
+            if (filename.endsWith(".py")) {
+                filename = filename.slice(0, -3);
+            }
+            return filename;
+        }
+        return [
+            "__main__",
+            "_instructor",
+            ...this.main.model.assignment.extraInstructorFiles().map(file => "_instructor." + clean(file.filename())),
+            ...this.main.model.submission.extraFiles().map(file => clean(file.filename())),
+        ];
+    }
+ 
+    getTimeoutPrompt(longTimeout) {
+        if (longTimeout) {
+            return "The instructor code has taken a REALLY long time to check your code (30 or more seconds). You might want to cancel and check your code (or get help from an instructor). Or, you can add more seconds to wait below.";
+        } else {
+            return "The instructor code is taking a little while to check your code; it might just need a little more time. How many more seconds would you like to wait?";
+        }
+    }
+ 
+    openFile(filename) {
+        let found = this.main.components.fileSystem.searchForFile(filename, false);
+        if (found === undefined) {
+            throw new Sk.builtin.OSError("File not found: "+filename);
+        } else {
+            return found.contents();
+        }
+    }
+ 
+    openURL(url, data, timeout) {
+        // TODO: Figure out why parameters are misaligned..?
+        if (data.v === "OPENAI") {
+            return this.main.components.server.openaiProxy(timeout.v);
+        } else {
+            return super.openURL(url, data, timeout);
+        }
+    }
+ 
+    importFile(filename) {
+        if (filename === "./answer.py") {
+            return this.main.model.submission.code();
+        } else if (filename === "./_instructor/on_run.py") {
+            return this.main.model.assignment.onRun();
+        } else if (filename === "./_instructor/on_eval.py") {
+            return this.main.model.assignment.onEval() || "";
+        } else if (filename === "./_instructor/__init__.js") {
+            return EMPTY_MODULE;
+        } else if (Sk.builtinFiles === undefined) {
+            throw new Sk.builtin.OSError("Built-in modules not accessible.");
+        } else if (Sk.builtinFiles["files"][filename] !== undefined) {
+            return Sk.builtinFiles["files"][filename];
+        } else {
+            let found = this.main.components.fileSystem.searchForFile(filename, false);
+            if (found === undefined) {
+                throw new Sk.builtin.OSError("File not found: '"+filename + "'");
+            } else {
+                return found.contents();
+            }
+        }
+    };
+ 
+    input(promptMessage) {
+        //return "ApplePie";
+        console.log(">>>", this.main.model.execution.input(), this.main.model.execution.inputIndex());
+        if (this.main.model.execution.inputIndex() < this.main.model.execution.input().length) {
+            let inputIndex = this.main.model.execution.inputIndex();
+            let nextInput = this.main.model.execution.input()[inputIndex];
+            this.main.model.execution.inputIndex(inputIndex+1);
+            return nextInput;
+        } else {
+            return "ApplePie";
+        }
+        /*return new Promise((resolve) => {
+            resolve(Sk.queuedInput.pop());
+        });*/
+    }
+ 
+    beforeCall(functionName, posargs, kwargs) {
+        let studentModel = this.main.model.execution.reports.student;
+        //console.log("HEY INSTRUCTOR CALL", functionName, studentModel.tracing);
+        if (studentModel.tracing && studentModel.tracing.length) {
+            super.beforeCall(functionName, posargs, kwargs);
+        }
+    }
+ 
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_change.js.html b/coverage/lcov-report/src/engine/on_change.js.html new file mode 100644 index 000000000..046468217 --- /dev/null +++ b/coverage/lcov-report/src/engine/on_change.js.html @@ -0,0 +1,121 @@ + + + + + + Code coverage report for src/engine/on_change.js + + + + + + + + + +
+
+

All files / src/engine on_change.js

+
+ +
+ 0% + Statements + 0/5 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13  +  +  +  +  +  +  +  +  +  +  +  + 
import {InstructorConfiguration} from "./instructor";
+ 
+export class OnChangeConfiguration extends InstructorConfiguration {
+    use(engine) {
+        super.use(engine);
+        this.filename = "on_change.py";
+        this.code = this.main.model.assignment.onChange();
+ 
+        clearTimeout(this.main.model.display.triggerOnChange);
+ 
+        return this;
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_eval.js.html b/coverage/lcov-report/src/engine/on_eval.js.html new file mode 100644 index 000000000..6444401f6 --- /dev/null +++ b/coverage/lcov-report/src/engine/on_eval.js.html @@ -0,0 +1,577 @@ + + + + + + Code coverage report for src/engine/on_eval.js + + + + + + + + + +
+
+

All files / src/engine on_eval.js

+
+ +
+ 2.08% + Statements + 1/48 +
+ + +
+ 0% + Branches + 0/12 +
+ + +
+ 0% + Functions + 0/4 +
+ + +
+ 2.08% + Lines + 1/48 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {InstructorConfiguration} from "./instructor";
+import {StatusState} from "../server";
+import {findActualInstructorOffset, INSTRUCTOR_MARKER, NEW_LINE_REGEX} from "./on_run";
+import {indent} from "../utilities";
+ 
+/**
+ * @return {string}
+ */
+export const WRAP_INSTRUCTOR_CODE = function (studentCode, instructorCode, quick, isSafe) {
+    let safeCode = JSON.stringify(studentCode);
+ 
+    return `
+from utility import *
+ 
+# Load in some commonly used tools
+from pedal.cait.cait_api import parse_program
+from pedal.sandbox.commands import *
+from pedal.core.commands import *
+ 
+# Backup the feedback
+on_run_feedback = []
+for feedback in MAIN_REPORT.feedback:
+    on_run_feedback.append(feedback)
+MAIN_REPORT.feedback.clear()
+ 
+from pedal.environments.blockpy import setup_environment
+# Add in evaluated stuff from last time
+student = get_sandbox()
+# TODO: What about new inputs since we last ran/evaled?
+# MAIN_REPORT.submission.files['evaluation'] = ${safeCode}
+evaluate(${safeCode}['evaluation'])
+ 
+# TODO: Refactor resolver to return instructions
+# Monkey-patch questions
+#from pedal import questions
+#questions.show_question = set_instructions
+ 
+${INSTRUCTOR_MARKER}
+${instructorCode}
+ 
+# Resolve everything
+from pedal.resolvers.simple import resolve
+final = resolve()
+SUCCESS = final.success
+SCORE = final.score
+CATEGORY = final.category
+LABEL = final.title
+MESSAGE = final.message
+DATA = final.data
+HIDE = final.hide_correctness
+ 
+# Handle questions
+if final.instructions:
+    set_instructions(final.instructions[-1].message)
+    
+# Handle positive feedback
+POSITIVE = []
+for positive in final.positives:
+    message = positive.message
+    if not positive:
+        message = positive.else_message
+    POSITIVE.append({
+        "title": positive.title,
+        "label": positive.label,
+        "message": message
+    })
+    
+# Handle system messages
+for system in final.systems:
+    if system.label == 'log':
+        console_log(system.title, system.message);
+    if system.label == 'debug':
+        console_debug(system.title, system.message);
+ 
+`;
+};
+ 
+export class OnEvalConfiguration extends InstructorConfiguration {
+    use(engine) {
+        super.use(engine);
+        this.filename = "_instructor.on_eval";
+        this.code = this.main.model.assignment.onEval() || "";
+ 
+        let disableTifa = this.main.model.assignment.settings.disableTifa();
+ 
+        let report = this.main.model.execution.reports;
+        //let studentCodeSafe = this.main.model.execution.reports.student.evaluation || "None";
+        let studentFiles = this.getAllStudentFiles();
+        studentFiles["evaluation"] = this.main.model.execution.reports.student.evaluation || "None";
+        this.dummyOutSandbox();
+        let instructorCode = this.code;
+        let isSafe = !report["parser"].empty && report["verifier"].success;
+        instructorCode = WRAP_INSTRUCTOR_CODE(studentFiles, instructorCode, disableTifa, isSafe);
+        console.log(">>>", instructorCode);
+        let lineOffset = findActualInstructorOffset(instructorCode); //instructorCode.split(NEW_LINE_REGEX).length;
+        report["instructor"] = {
+            "compliments": [],
+            "filename": "./_instructor/on_eval.py",
+            "code": instructorCode,
+            "lineOffset": lineOffset
+            //'complete': false // Actually, let's use undefined for now.
+        };
+        this.code = instructorCode;
+ 
+        super.use(engine);
+ 
+        //Sk.retainGlobals = false;
+        Sk.globals = this.main.model.execution.instructor.globals;
+ 
+        return this;
+    }
+ 
+    success(module) {
+        console.log("OnEval success");
+        // TODO: Actually parse results
+        this.main.model.execution.instructor.globals = Sk.globals;
+        this.main.model.execution.instructor.sysmodules = Sk.sysmodules;
+        console.log(module);
+        let results = module.$d.on_eval.$d;
+        console.log(module.$d);
+        this.main.components.feedback.presentFeedback(results);
+        this.main.model.execution.reports["instructor"]["success"] = true;
+        let success = Sk.ffi.remapToJs(results.SUCCESS);
+        this.main.model.submission.correct(success || this.main.model.submission.correct());
+        // Cannot exceed 1 point, cannot go below 0 points
+        let score = Sk.ffi.remapToJs(results.SCORE);
+        score = Math.max(0.0, Math.min(1.0, score));
+        let oldScore = this.main.model.submission.score();
+        this.main.model.submission.score(Math.max(oldScore, score));
+        // Hide status
+        let hide = Sk.ffi.remapToJs(results.HIDE);
+        // And fire the result!
+        this.main.components.server.updateSubmission(score, success, hide, false);
+        this.main.model.status.onExecution(StatusState.READY);
+        //after(module);
+ 
+        /*if (success && this.main.model.configuration.callbacks.success) {
+            this.main.model.configuration.callbacks.success(this.main.model.assignment.id());
+        }*/
+ 
+        if (!Sk.executionReports.instructor.scrolling) {
+            try {
+                this.main.components.console.scrollToBottom();
+            } catch (e) {
+            }
+        }
+    }
+ 
+    failure(error) {
+        console.log("OnEval failure", error);
+        let report = this.main.model.execution.reports;
+        if (error.tp$name === "GracefulExit") {
+            report["instructor"]["success"] = true;
+            this.main.model.status.onExecution(StatusState.READY);
+        } else {
+            this.main.model.status.onExecution(StatusState.FAILED);
+            //console.log(report["instructor"]["code"]);
+            this.main.components.feedback.presentInternalError(error, this.filename);
+            //report["instructor"]["success"] = false;
+            //report["instructor"]["error"] = error;
+            //TODO: report["instructor"]["line_offset"] = lineOffset;
+        }
+        //TODO: after(error);
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_run.js.html b/coverage/lcov-report/src/engine/on_run.js.html new file mode 100644 index 000000000..6aec0a8c5 --- /dev/null +++ b/coverage/lcov-report/src/engine/on_run.js.html @@ -0,0 +1,820 @@ + + + + + + Code coverage report for src/engine/on_run.js + + + + + + + + + +
+
+

All files / src/engine on_run.js

+
+ +
+ 5.76% + Statements + 3/52 +
+ + +
+ 0% + Branches + 0/12 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 5.76% + Lines + 3/52 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {indent} from "../utilities";
+import {StatusState} from "../server";
+import {InstructorConfiguration} from "./instructor";
+ 
+export function findActualInstructorOffset(instructorCode) {
+    const index = instructorCode.indexOf(INSTRUCTOR_MARKER);
+    const before = instructorCode.slice(0, index);
+    const match = before.match(NEW_LINE_REGEX);
+    return match ? (1+match.length) : 0;
+}
+ 
+export const INSTRUCTOR_MARKER = "###Run the actual instructor code###";
+export const NEW_LINE_REGEX = /\n/g;
+/**
+ * @return {string}
+ */
+export const WRAP_INSTRUCTOR_CODE = function (studentFiles, instructorCode, quick, isSafe) {
+    let safeCode = JSON.stringify(studentFiles);
+    let skip_tifa = quick ? "True": "False";
+ 
+    // TODO: Add in Sk.queuedInput to be passed in
+ 
+    return `
+# Support our sysmodules hack by clearing out any lingering old data
+from pedal.core.report import MAIN_REPORT
+MAIN_REPORT.clear()
+ 
+from bakery import student_tests
+student_tests.reset()
+ 
+from utility import *
+ 
+# Load in some commonly used tools
+from pedal.cait.cait_api import parse_program
+from pedal.sandbox.commands import *
+from pedal.core.commands import *
+ 
+from pedal.environments.blockpy import setup_environment
+# Do we execute student's code?
+skip_run = get_model_info('assignment.settings.disableInstructorRun')
+inputs = None if skip_run else get_model_info('execution.input')
+ 
+# Set the seed to the submission ID by default?
+from pedal.questions import set_seed
+set_seed(str(get_model_info("submission.id")))
+ 
+# Initialize the BlockPy environment
+pedal = setup_environment(skip_tifa=${skip_tifa},
+                          skip_run=skip_run,
+                          inputs=inputs,
+                          main_file='answer.py',
+                          files=${safeCode})
+student = pedal.fields['student']
+ 
+# TODO: Refactor resolver to return instructions
+# Monkey-patch questions
+#from pedal import questions
+#questions.show_question = set_instructions
+ 
+${INSTRUCTOR_MARKER}
+${instructorCode}
+ 
+# Resolve everything
+from pedal.resolvers.simple import resolve
+final = resolve()
+SUCCESS = final.success
+SCORE = final.score
+CATEGORY = final.category
+LABEL = final.title
+MESSAGE = final.message
+DATA = final.data
+HIDE = final.hide_correctness
+ 
+# Handle questions
+if final.instructions:
+    set_instructions(final.instructions[-1].message)
+    
+# Handle positive feedback
+POSITIVE = []
+for positive in final.positives:
+    message = positive.message
+    if not positive:
+        message = positive.else_message
+    POSITIVE.append({
+        "title": positive.title,
+        "label": positive.label,
+        "message": message
+    })
+    
+# Handle system messages
+for system in final.systems:
+    if system.label == 'log':
+        console_log(system.title, system.message);
+    if system.label == 'debug':
+        console_debug(system.title, system.message);
+ 
+`;
+};
+ 
+export class OnRunConfiguration extends InstructorConfiguration {
+    use(engine) {
+        super.use(engine);
+        this.filename = "_instructor.on_run";
+        this.code = this.main.model.assignment.onRun();
+ 
+        let disableTifa = this.main.model.assignment.settings.disableTifa();
+        // Put the input index back to the front, so we can replay inputs
+        this.main.model.execution.inputIndex(1);
+ 
+        let report = this.main.model.execution.reports;
+        //let studentCodeSafe = this.main.model.submission.code();
+        let studentFiles = this.getAllStudentFiles();
+        this.dummyOutSandbox();
+        let instructorCode = this.code;
+        let isSafe = !report["parser"].empty && report["verifier"].success;
+        instructorCode = WRAP_INSTRUCTOR_CODE(studentFiles, instructorCode, disableTifa, isSafe);
+        let lineOffset = findActualInstructorOffset(instructorCode); //instructorCode.split(NEW_LINE_REGEX).length;
+        //lineOffset = 0; //instructorCode.split(NEW_LINE_REGEX).length - lineOffset - 4;
+        report["instructor"] = {
+            "compliments": [],
+            "filename": "./_instructor/on_run.py",
+            "code": instructorCode,
+            "lineOffset": lineOffset
+            //'complete': false // Actually, let's use undefined for now.
+        };
+        /*
+        TODO: Interesting situation. If you have an instructor-file (not a student-file),
+        then it gets imported into sysmodules as `_instructor.MODULE_NAME`. But the instructor
+        script will attempt to import it as `MODULE_NAME`, and fail. UNLESS the *student* has
+        previously imported that module successfully. So there's a common case here where the
+        students' code fails to import the module THEREBY breaking the instructor code.
+         */
+ 
+        this.code = instructorCode;
+ 
+        Sk.retainGlobals = false;
+ 
+        return this;
+    }
+ 
+    success(module) {
+        // TODO Logging!!!!
+        //console.log("OnRun success");
+        // TODO: Actually parse results
+        this.main.model.execution.instructor.globals = Sk.globals;
+        this.main.model.execution.instructor.sysmodules = Sk.sysmodules;
+        Sk.globals = {};
+        let results = module.$d.on_run.$d;
+        this.main.components.feedback.presentFeedback(results);
+        this.main.model.execution.reports["instructor"]["success"] = true;
+        let success = Sk.ffi.remapToJs(results.SUCCESS);
+        this.main.model.submission.correct(success || this.main.model.submission.correct());
+        // Cannot exceed 1 point, cannot go below 0 points
+        let score = Sk.ffi.remapToJs(results.SCORE);
+        score = Math.max(0, Math.min(1, score));
+        let oldScore = this.main.model.submission.score();
+        score = Math.max(oldScore, score);
+        this.main.model.submission.score(score);
+        // Hide status
+        let hide = Sk.ffi.remapToJs(results.HIDE);
+        // And fire the result!
+        this.main.components.server.updateSubmission(score, success, hide, false);
+        this.main.model.status.onExecution(StatusState.READY);
+        //after(module);
+ 
+        /*if (success && this.main.model.configuration.callbacks.success) {
+            this.main.model.configuration.callbacks.success(this.main.model.assignment.id());
+        }*/
+ 
+        if (!Sk.executionReports.instructor.scrolling) {
+            try {
+                this.main.components.console.scrollToBottom();
+            } catch (e) {
+            }
+        }
+    }
+ 
+    failure(error) {
+        console.error("OnRun failure", error);
+        let report = this.main.model.execution.reports;
+        if (error.tp$name === "GracefulExit") {
+            report["instructor"]["success"] = true;
+            this.main.model.status.onExecution(StatusState.READY);
+        } else {
+            this.main.model.status.onExecution(StatusState.FAILED);
+            //console.log(report["instructor"]["code"]);
+            this.main.components.feedback.presentInternalError(error, this.filename);
+            //report["instructor"]["success"] = false;
+            //report["instructor"]["error"] = error;
+            //TODO: report["instructor"]["line_offset"] = lineOffset;
+        }
+        //TODO: after(error);
+    }
+}
+ 
+ 
+/*
+# The following is the old instructor code, leaving it here for now.
+ 
+from pedal.core.report import MAIN_REPORT
+# Support our sysmodules hack by clearing out any lingering old data
+MAIN_REPORT.clear()
+from pedal.core.commands import contextualize_report
+contextualize_report(${safeCode}, "answer.py")
+${tifaAnalysis}
+from pedal.sandbox.sandbox import Sandbox
+from pedal.sandbox import compatibility
+from utility import *
+student = MAIN_REPORT['sandbox']['run'] = Sandbox()
+student.report_exceptions_mode = True
+log(get_model_info('execution.input'))
+student.set_input(get_model_info('execution.input'))
+if not get_model_info('assignment.settings.disableInstructorRun'):
+    compatibility.run_student(raise_exceptions=False)
+#log(student.data)
+#student = get_student_data()
+#error, position = get_student_error()
+#compatibility.raise_exception(error, position)
+run_student = compatibility.run_student
+reset_output = compatibility.reset_output
+queue_input = compatibility.queue_input
+get_output = compatibility.get_output
+get_plots = compatibility.get_plots
+compatibility.trace_lines = trace_lines
+from pedal import questions
+questions.show_question = set_instructions
+# TODO: Remove the need for this hack!
+def capture_output(func, *args):
+   reset_output()
+   student.call(func.__name__, *args)
+   return get_output()
+compatibility.capture_output = capture_output
+ 
+from pedal.cait.cait_api import parse_program
+${instructorCode}
+from pedal.resolvers import simple
+final = simple.resolve()
+SUCCESS = final.success
+SCORE = final.score
+CATEGORY = final.category
+LABEL = final.title
+MESSAGE = final.message
+DATA = final.data
+HIDE = final.hide_correctness
+ 
+ */
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_sample.js.html b/coverage/lcov-report/src/engine/on_sample.js.html new file mode 100644 index 000000000..481018b78 --- /dev/null +++ b/coverage/lcov-report/src/engine/on_sample.js.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/engine/on_sample.js + + + + + + + + + +
+
+

All files / src/engine on_sample.js

+
+ +
+ 0% + Statements + 0/4 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11  +  +  +  +  +  +  +  +  +  + 
import {OnRunConfiguration} from "./on_run";
+ 
+export class OnSampleConfiguration extends OnRunConfiguration {
+    use(engine) {
+        super.use(engine);
+        this.filename = "on_run.py";
+        this.code = this.main.model.assignment.onRun();
+ 
+        return this;
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/run.js.html b/coverage/lcov-report/src/engine/run.js.html new file mode 100644 index 000000000..71aafd775 --- /dev/null +++ b/coverage/lcov-report/src/engine/run.js.html @@ -0,0 +1,388 @@ + + + + + + Code coverage report for src/engine/run.js + + + + + + + + + +
+
+

All files / src/engine run.js

+
+ +
+ 0% + Statements + 0/56 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 0% + Functions + 0/12 +
+ + +
+ 0% + Lines + 0/54 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {StudentConfiguration} from "./student";
+import {StatusState} from "../server";
+ 
+export class RunConfiguration extends StudentConfiguration {
+    use(engine) {
+        this.main.model.execution.feedback.message("Running...");
+        this.filename = "answer";
+        this.code = this.main.model.ui.files.getStudentCode();
+        if (this.main.model.assignment.settings.disableStudentRun()) {
+            this.code = "";
+        }
+        //this.code = this.main.model.submission.code();
+        this.main.components.server.saveFile("answer.py", this.main.model.submission.code(), null);
+        this.main.components.server.logEvent("Compile", "", "", "", "answer.py");
+        //console.log(this.code);
+        super.use(engine);
+ 
+        engine.reset();
+        this.updateParse();
+ 
+        this.main.model.execution.reports["verifier"] = {
+            "success": Boolean(this.code.trim()),
+            "code": this.code
+        };
+ 
+        if (typeof Sk.environ == "undefined") {
+            Sk.environ = new Sk.builtin.dict();
+        }
+        const printerTag = this.main.components.console.printerTag,
+            width = printerTag.width()-50,
+            height = Math.max(300, printerTag.height()-50);
+        Sk.environ.set$item(new Sk.builtin.str("DESIGNER_WINDOW_WIDTH"), new Sk.builtin.int_(Math.round(width)));
+        Sk.environ.set$item(new Sk.builtin.str("DESIGNER_WINDOW_HEIGHT"), new Sk.builtin.int_(Math.round(height)));
+ 
+        Sk.retainGlobals = false;
+ 
+        this.clearInput();
+ 
+        return this;
+    }
+ 
+    success(module) {
+        console.log("Run success");
+        let message = {
+            "inputs": this.main.model.execution.input().join("\n"),
+            "outputs": this.main.model.execution.output().map(line => line.content).join("\n"),
+        };
+        this.main.components.server.logEvent("Run.Program", "", "", JSON.stringify(message), "answer.py");
+        this.main.model.display.dirtySubmission(false);
+        this.main.components.console.finishTurtles();
+        this.main.model.status.onExecution(StatusState.READY);
+        this.main.model.execution.student.globals(Sk.globals);
+        Sk.globals = {};
+        let report = this.main.model.execution.reports;
+        let filename = this.filename;
+        this.main.model.execution.student.results = module;
+        if (!this.main.model.assignment.settings.hideEvaluate()) {
+            this.main.components.console.beginEval();
+        }
+        return new Promise((resolve, reject) => {
+            this.step(module.$d, module.$d,-1, 0, filename + ".py");
+            this.lastStep();
+            report["student"] = {
+                "success": true,
+                "trace": this.engine.executionBuffer.trace,
+                "lines": this.engine.executionBuffer.trace.map(x => x.line),
+                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
+                "results": module,
+                "output": this.main.model.execution.output,
+                "input": this.main.model.execution.input,
+                "calls": this.main.model.execution.student.calls,
+                "tracing": []
+            };
+            resolve();
+        });
+    }
+ 
+    failure(error) {
+        console.error("Run failure", error);
+        this.main.model.status.onExecution(StatusState.FAILED);
+        let report = this.main.model.execution.reports;
+        if (report.parser.success && report.verifier.success) {
+            this.main.components.server.logEvent("Compile.Error", "", "", error.toString(), "answer.py");
+        } else {
+            this.main.components.server.logEvent("Run.Program", "ProgramErrorOutput", "", error.toString(), "answer.py");
+        }
+        this.lastStep();
+        return new Promise((resolve, reject) => {
+            report["student"] = {
+                "success": false,
+                "error": error,
+                "trace": this.engine.executionBuffer.trace,
+                "lines": this.engine.executionBuffer.trace.map(x => x.line),
+                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
+                "input": this.main.model.execution.input,
+                "calls": this.main.model.execution.student.calls,
+                "tracing": []
+            };
+            resolve();
+        });
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/sample.js.html b/coverage/lcov-report/src/engine/sample.js.html new file mode 100644 index 000000000..909a5ccce --- /dev/null +++ b/coverage/lcov-report/src/engine/sample.js.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for src/engine/sample.js + + + + + + + + + +
+
+

All files / src/engine sample.js

+
+ +
+ 0% + Statements + 0/4 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12  +  +  +  +  +  +  +  +  +  +  + 
import {StudentConfiguration} from "./student";
+ 
+export class SampleConfiguration extends StudentConfiguration {
+    use(engine) {
+        super.use(engine);
+        // TODO: Fix to be the current sample submission
+        this.filename = "answer.py";
+        this.code = "print('Not ready yet!')";
+ 
+        return this;
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/student.js.html b/coverage/lcov-report/src/engine/student.js.html new file mode 100644 index 000000000..9a202070e --- /dev/null +++ b/coverage/lcov-report/src/engine/student.js.html @@ -0,0 +1,676 @@ + + + + + + Code coverage report for src/engine/student.js + + + + + + + + + +
+
+

All files / src/engine student.js

+
+ +
+ 0% + Statements + 0/83 +
+ + +
+ 0% + Branches + 0/35 +
+ + +
+ 0% + Functions + 0/17 +
+ + +
+ 0% + Lines + 0/79 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {Configuration, EMPTY_MODULE} from "./configurations";
+ 
+export class StudentConfiguration extends Configuration {
+    use(engine) {
+        super.use(engine);
+        // Limit execution to 4 seconds
+        let settings = this.main.model.settings;
+        Sk.execLimitFunction = () =>
+            this.main.model.assignment.settings.disableTimeout() ? Infinity : 5000;
+        Sk.execLimit = Sk.execLimitFunction();
+        // Stepper! Executed after every statement.
+        Sk.afterSingleExecution = this.step.bind(this);
+ 
+        // Unmute everything
+        this.main.model.display.mutePrinter(false);
+ 
+        // Function to call after each step
+        // afterSingleExecution
+ 
+        Sk.builtinFiles.files["src/lib/utility/__init__.js"] = EMPTY_MODULE;
+ 
+        return this;
+    }
+ 
+    openFile(filename) {
+        let found = this.main.components.fileSystem.searchForFile(filename, true);
+        //console.log(filename, found);
+        if (found === undefined) {
+            if (Sk.builtinFiles && Sk.builtinFiles["files"][filename] !== undefined) {
+                return Sk.builtinFiles["files"][filename];
+            } else {
+                throw new Sk.builtin.OSError("File not found: " + filename);
+            }
+        } else {
+            return found.contents();
+        }
+    }
+ 
+    importFile(filename) {
+        if (this.isForbidden(filename)) {
+            throw "File not accessible: '" + filename + "'";
+        } else if (filename === "./answer.py") {
+            return this.main.model.submission.code();
+        } else if (Sk.builtinFiles === undefined) {
+            throw new Sk.builtin.OSError("Built-in modules not accessible.");
+        } else if (Sk.builtinFiles["files"][filename] !== undefined) {
+            return Sk.builtinFiles["files"][filename];
+        } else {
+            let found = this.main.components.fileSystem.searchForFile(filename, true);
+            if (found === undefined) {
+                throw new Sk.builtin.OSError("File not found: '"+filename + "'");
+            } else {
+                return found.contents();
+            }
+        }
+    }
+ 
+    input(promptMessage) {
+        return this.main.components.console.input(promptMessage);
+    }
+ 
+    isForbidden(filename) {
+        return filename.startsWith("src/lib/utility/") ||
+            filename.startsWith("src/lib/pedal/") ||
+            filename.startsWith("./_instructor/");
+    }
+ 
+    /**
+     * "Steps" the execution of the code, meant to be used as a callback to the Skulpt
+     * environment.
+     *
+     * @param {Object} globals - Hash that maps the names of global variables (Strings) to their Skulpt representation.
+     * @param {Object} locals - Hash that maps the names of local variables (Strings) to their Skulpt representation.
+     * @param {Number} lineNumber - The corresponding line number in the source code that is being executed.
+     * @param {Number} columnNumber - The corresponding column number in the source code that is being executed.
+     *                                Think of it as the "X" position to the lineNumber's "Y" position.
+     * @param {String} filename - The name of the python file being executed (e.g., "__main__.py").
+     * @param {Boolean} isDocstring - Whether or not this is an actual line or a docstring.
+     */
+    step(globals, locals, lineNumber, columnNumber, filename, isDocstring, astName) {
+        if (filename === "answer.py") {
+            /*if (execStack) {
+                console.log(execStack.map(([n, o]) => [n, {...o}]));
+            }*/
+            let currentStep = this.engine.executionBuffer.step;
+            globals = this.main.components.trace.parseGlobals({...globals, ...locals});
+            // TODO: Trace local variables properly
+            //let locals = this.main.components.trace.parseGlobals(locals);
+            //Object.assign(globals, locals);
+            this.engine.executionBuffer.trace.push({
+                "step": currentStep,
+                "filename": filename,
+                //'block': highlightMap[lineNumber-1],
+                "line": lineNumber,
+                "column": columnNumber,
+                "properties": globals.properties,
+                "modules": globals.modules,
+                "isDocstring": isDocstring,
+                "ast": astName
+            });
+            this.engine.executionBuffer.step = currentStep + 1;
+            this.engine.executionBuffer.line = lineNumber;
+        }
+    };
+ 
+ 
+ 
+    /**
+     * Called at the end of the Skulpt execution to terminate the executionBuffer
+     * and hand it off to the execution trace in the model.
+     */
+    lastStep() {
+        let execution = this.main.model.execution;
+        execution.student.currentTraceData(this.engine.executionBuffer.trace);
+        execution.student.currentStep(this.engine.executionBuffer.step);
+        execution.student.lastStep(this.engine.executionBuffer.step);
+        execution.student.currentLine(this.engine.executionBuffer.line);
+        execution.student.lastLine(this.engine.executionBuffer.line);
+        execution.student.currentTraceStep(this.engine.executionBuffer.step);
+    };
+ 
+    getLines(ast) {
+        let visitedLines = new Set();
+        let visitBody = (node) => {
+            if (node.lineno !== undefined) {
+                visitedLines.add(node.lineno);
+            }
+            if (node.body) {
+                node.body.forEach((statement) => visitBody(statement));
+            }
+            if (node.orelse) {
+                node.orelse.forEach((statement) => visitBody(statement));
+            }
+            if (node.finalbody) {
+                node.finalbody.forEach((statement) => visitBody(statement));
+            }
+        };
+        visitBody(ast);
+        return Array.from(visitedLines);
+    }
+ 
+    /**
+     * Ensure that the parse information is up-to-date
+     */
+    updateParse() {
+        let report = this.main.model.execution.reports;
+        // Hold all the actually discovered lines from the parse
+        let lines = [];
+        // Attempt a parse
+        let ast;
+        try {
+            let parse = Sk.parse(this.filename, this.code);
+            ast = Sk.astFromParse(parse.cst, this.filename, parse.flags);
+            lines = this.getLines(ast);
+        } catch (error) {
+            // Report the error
+            report["parser"] = {
+                "success": false,
+                "error": error,
+                "empty": true,
+                "lines": lines
+            };
+            console.error(error);
+            console.log(this.filename, this.code);
+            return false;
+        }
+        // Successful parse
+        report["parser"] = {
+            "success": true,
+            "ast": ast,
+            "empty": ast.body.length === 0,
+            "lines": lines
+        };
+        return true;
+    }
+ 
+    showErrors() {
+        let report = this.main.model.execution.reports;
+        if (report["student"].success) {
+            this.main.components.feedback.clear("Execution finished. No errors to report.");
+        } else {
+            this.main.components.feedback.presentRunError(report.student.error);
+        }
+    }
+ 
+    provideSecretError() {
+        let report = this.main.model.execution.reports;
+        let feedback = this.main.components.feedback;
+        if (!report["student"].success) {
+            let errorButton = this.main.model.configuration.container.find(".blockpy-student-error");
+            let message = feedback.presentRunError(report.student.error, true);
+            errorButton.attr("title", "Click to see Original Error");
+            errorButton.tooltip({"trigger": "hover", "container": this.main.model.configuration.attachmentPoint});
+            errorButton.click(() => this.main.components.dialog.ERROR_SHOW_STUDENT_ERROR(message));
+            errorButton.show();
+        }
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/feedback.js.html b/coverage/lcov-report/src/feedback.js.html new file mode 100644 index 000000000..99b732f5b --- /dev/null +++ b/coverage/lcov-report/src/feedback.js.html @@ -0,0 +1,1456 @@ + + + + + + Code coverage report for src/feedback.js + + + + + + + + + +
+
+

All files / src feedback.js

+
+ +
+ 5.23% + Statements + 10/191 +
+ + +
+ 0% + Branches + 0/96 +
+ + +
+ 7.14% + Functions + 2/28 +
+ + +
+ 4.81% + Lines + 9/187 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +5x +  +5x +  +5x +5x +5x +5x +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {arrayMove, capitalize, pyStr} from "./utilities";
+ 
+export let FEEDBACK_HTML = `
+ 
+<span class='blockpy-floating-feedback text-muted-less pull-right position-sticky sticky-top'
+    aria-hidden="true" role="presentation" aria-label="New Feedback Alert">
+    New feedback &uarr;
+</span>
+ 
+<div class='blockpy-feedback blockpy-panel'
+            role="region" aria-label="Feedback"
+            aria-live="polite"
+            data-bind="class: ui.console.size">
+ 
+    <div>
+    <!-- Feedback/Trace Visibility Control -->
+    <!-- ko ifnot: ui.secondRow.hideTraceButton -->
+    <button type='button'
+            class='btn btn-sm btn-outline-secondary float-right'
+            data-bind="click: ui.secondRow.advanceState">
+        <span class='fas fa-eye'></span>
+        <span data-bind="text: ui.secondRow.switchLabel"></span>
+    </button>
+    <!-- /ko -->
+ 
+    <!-- Actual Feedback Region -->    
+    <div>
+        <strong>Feedback: </strong>
+        <span class='badge blockpy-feedback-category feedback-badge'
+            data-bind="css: ui.feedback.badge,
+                       text: ui.feedback.category">Feedback Kind</span>
+        <small data-bind="text: (100*submission.score())+'%',
+                          visible: display.instructor() && execution.feedback.label()"
+            class="text-muted"></small>
+        <small data-bind="click: ui.feedback.resetScore,
+                          visible: display.instructor() && execution.feedback.label() && submission.score() > 0"
+            class="text-muted" style="cursor: pointer"><u>(reset)</u></small>
+    </div>
+    <div>
+        <strong class="blockpy-feedback-label"
+            data-bind="text: execution.feedback.label"></strong>
+        <div class="blockpy-feedback-message"
+            data-bind="html: execution.feedback.message"></div>
+    </div>
+    </div>
+    <div style="position: relative;">
+        <!-- The thank you message will appear above the span -->
+        <span class="blockpy-feedback-thank-you">Thank you!</span>
+    </div>
+    <small class="blockpy-feedback-response-full" style="text-align: right"
+        data-bind="visible: ui.feedback.provideRatings() && execution.feedback.label() && display.showRating()">
+        <span style="cursor: pointer;" class="far fa-minus-square"
+            data-bind="click: ui.feedback.flipRating"></span>
+        Rate this Feedback:
+        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-thumbs-up"
+            data-bind="click: ()=>ui.feedback.rate('thumbs-up'),
+                        css: ui.feedback.hasRatedClass"></span>
+<!--        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-meh"-->
+<!--            data-bind="click: ()=>ui.feedback.rate('meh'),-->
+<!--                        css: ui.feedback.hasRatedClass"></span>-->
+        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-thumbs-down"
+            data-bind="click: ()=>ui.feedback.rate('thumbs-down', true),
+                        css: ui.feedback.hasRatedClass"></span>
+    </small>
+    <!-- Positive Feedback Region -->
+    <div class="blockpy-feedback-positive" style="text-align: right">
+    </div>
+    <small class="blockpy-feedback-response-collapsed" 
+        style="position: absolute; right: 0; bottom: 0"
+        data-bind="visible: execution.feedback.label() && !display.showRating()">
+        <span style="cursor: pointer; vertical-align: middle" class="far fa-plus-square"
+            data-bind="click: ui.feedback.flipRating"></span> Rate
+    </small>
+</div>            
+`;
+ 
+export class BlockPyFeedback {
+ 
+    /**
+     * An object that manages the feedback area, where users are told the state of their
+     * program's execution and given guidance. Also manages the creation of the Trace Table.
+     *
+     * @constructor
+     * @this {BlockPyFeedback}
+     * @param {Object} main - The main BlockPy instance
+     * @param {HTMLElement} tag - The HTML object this is attached to.
+     */
+    constructor(main, tag) {
+        this.main = main;
+        this.tag = tag;
+ 
+        this.feedbackModel = this.main.model.execution.feedback;
+ 
+        this.category = this.tag.find(".blockpy-feedback-category");
+        this.label = this.tag.find(".blockpy-feedback-label");
+        this.message = this.tag.find(".blockpy-feedback-message");
+        this.positive = this.tag.find(".blockpy-feedback-positive");
+ 
+        // TODO: If they change the student extra files, also update the dirty flag
+        this.main.model.submission.code.subscribe(() => this.main.model.display.dirtySubmission(true));
+    };
+ 
+    /**
+     * Moves the screen (takes 1 second) to make the Feedback area visible.
+     */
+    scrollIntoView() {
+        $("html, body").animate({
+            scrollTop: this.tag.offset().top
+        }, 700);
+    };
+ 
+    /**
+     * Determines if the feedback area is currently visible
+     * @returns {boolean}
+     */
+    isFeedbackVisible() {
+        let visibilityBuffer = 100;
+        let topOfElement = this.tag.offset().top;
+        //let bottomOfElement = this.tag.offset().top + this.tag.outerHeight();
+        let bottomOfElement = topOfElement + visibilityBuffer;
+        let bottomOfScreen = $(window).scrollTop() + $(window).height();
+        let topOfScreen = $(window).scrollTop();
+        //bottom_of_element -= 40; // User friendly padding
+        return (
+            (topOfElement < bottomOfScreen) &&
+            (topOfScreen < bottomOfElement));
+    };
+ 
+    /**
+     * Clears any output currently in the feedback area. Also resets the printer and
+     * any highlighted lines in the editor.
+     */
+    clear(message="Ready") {
+        this.feedbackModel.message(message);
+        this.feedbackModel.category(null);
+        this.feedbackModel.label(null);
+        this.feedbackModel.hidden(false);
+        this.feedbackModel.linesError.removeAll();
+        this.feedbackModel.linesUncovered.removeAll();
+        this.clearPositiveFeedback();
+        this.category.off("click");
+        this.main.model.display.hasRated(false);
+    };
+ 
+    static findFirstErrorLine(feedbackData) {
+        if (feedbackData.quick$lookup) {
+            let location = feedbackData.quick$lookup(new Sk.builtin.str("location"));
+            if (location) {
+                let line = location.tp$getattr(new Sk.builtin.str("line"));
+                if (line) {
+                    return Sk.ffi.remapToJs(line);
+                }
+            }
+        }
+        return null;
+        /*for (let i = feedbackData.length-1; i >= 0; i-= 1) {
+            if ("position" in feedbackData[i]) {
+                return feedbackData[i].position.line;
+            }
+        }
+        return null;*/
+    };
+ 
+    updateRegularFeedback() {
+ 
+    }
+ 
+    /**
+     * Updates the model with these new execution results
+     * @param executionResults
+     */
+    updateFeedback(executionResults) {
+        // Parse out data
+        let message = Sk.ffi.remapToJs(executionResults.MESSAGE);
+        let category = Sk.ffi.remapToJs(executionResults.CATEGORY);
+        let label = Sk.ffi.remapToJs(executionResults.LABEL);
+        let hide = Sk.ffi.remapToJs(executionResults.HIDE);
+        let data = executionResults.DATA;
+        let positives = Sk.ffi.remapToJs(executionResults.POSITIVE);
+ 
+        // Override based on assignments' settings
+        let hideScore = this.main.model.assignment.hidden();
+        if (hideScore && category.toLowerCase() === "complete") {
+            category = "no errors";
+            label = "No errors";
+            message = "No errors reported.";
+        }
+ 
+        // Remap to expected BlockPy labels
+        if (category.toLowerCase() === "instructor" && label.toLowerCase() === "explain") {
+            label = "Instructor Feedback";
+        }
+ 
+        // Don't present a lack of error as being incorrect
+        if (category === "Instructor" && label === "No errors") {
+            category = "no errors";
+        }
+ 
+        // Update model accordingly
+        message = this.main.utilities.markdown(message).replace(/<pre>\n/g, "<pre>\n\n");
+        this.feedbackModel.message(message);
+        this.feedbackModel.category(category);
+        this.feedbackModel.label(label);
+        //let highlightTimeout = setTimeout(() => {
+        this.message.find("pre code").map( (i, block) => {
+            window.hljs.highlightBlock(block);
+        });
+        //}, 400);
+        // TODO: Instead of tracking student file, let's track the instructor file
+        this.main.components.server.logEvent("Intervention", category, label, message, "answer.py");
+ 
+        // Clear out any previously highlighted lines
+        this.main.components.pythonEditor.bm.clearHighlightedLines();
+ 
+        // Find the first error on a line and report that
+        let line = BlockPyFeedback.findFirstErrorLine(data);
+        this.feedbackModel.linesError.removeAll();
+        if (line !== null && line !== undefined) {
+            this.feedbackModel.linesError.push(line);
+        }
+ 
+        // Invert the set of traced lines
+        let studentReport = this.main.model.execution.reports.student;
+        this.feedbackModel.linesUncovered.removeAll();
+        if (studentReport.success) {
+            let uncoveredLines = [];
+            this.main.model.execution.reports.parser.lines.forEach((line) => {
+                if (studentReport.lines.indexOf(line) === -1) {
+                    uncoveredLines.push(line);
+                }
+            });
+            this.feedbackModel.linesUncovered(uncoveredLines);
+        }
+ 
+        for (let i=0; i<positives.length; i+=1) {
+            let positiveData = positives[i];
+            this.addPositiveFeedback(positiveData.message, "star", "green", () => this.main.components.dialog.POSITIVE_FEEDBACK_FULL(positiveData.title, positiveData.message));
+        }
+    }
+ 
+    clearPositiveFeedback() {
+        this.positive.empty();
+        this.main.model.configuration.container.find(".blockpy-student-error").hide();
+    }
+ 
+    addPositiveFeedback(text, icon, color, onclick, toEnd) {
+        let positive = $("<span></span>");
+        positive.addClass("blockpy-feedback-positive-icon fas fa-"+icon);
+        positive.css("color", color);
+        positive.attr("title", text);
+        if (toEnd) {
+            this.positive.append(positive);
+        } else {
+            this.positive.prepend(positive);
+        }
+        positive.tooltip({"trigger": "hover", "container": this.main.model.configuration.attachmentPoint});
+        if (onclick !== undefined) {
+            positive.click(onclick);
+        }
+        positive.hover(() => {
+            this.main.components.server.logEvent("X-Feedback", "positive", "hover", text, "");
+        });
+    }
+ 
+    /**
+     * Present any accumulated feedback
+     */
+    presentFeedback(executionResults) {
+        this.updateFeedback(executionResults);
+ 
+        this.category.off("click");
+        if (this.main.model.display.instructor()) {
+            this.updateFullFeedback(executionResults);
+        }
+ 
+        // TODO: Logging
+        //this.main.components.server.logEvent("feedback", category+"|"+label, message);
+ 
+        this.notifyFeedbackUpdate();
+    };
+ 
+    processSingleFeedback(element) {
+        const title = element.tp$getattr(new pyStr("title")).toString();
+        const category = capitalize(element.tp$getattr(new pyStr("category")).toString());
+        const kind = element.tp$getattr(new pyStr("kind")).toString();
+        const active = Sk.misceval.isTrue(element);
+        let message = element.tp$getattr(new pyStr("message")).toString();
+        const unused_message = element.tp$getattr(new pyStr("unused_message")).toString();
+        message = message === "None" ? unused_message : message;
+        const justification = element.tp$getattr(new pyStr("justification")).toString();
+        const parent = element.tp$getattr(new pyStr("parent"));
+        const hasParent = !Sk.builtin.checkNone(parent);
+        let score = element.tp$getattr(new pyStr("resolved_score"));
+        score = score === Sk.builtin.none.none$ ? ""
+            : score.tp$name === "float"
+                ? "+" + Math.round(score.v*100).toString() + "%"
+                : score.toString();
+        return [element, parent, `
+        <div class="list-group-item flex-column align-items-start" ${hasParent ? "style='margin-left: 50px;'" : ""}>
+            <div class="d-flex w-100 justify-content-between align-items-center">
+                <span><strong class="mb-1" style="${active ? "" : "text-decoration: line-through;"}">${title}</strong> (${category} - ${kind})</span>
+                <span class="badge badge-info badge-pill">${score}</span>
+            </div>
+            ${active ? "" : "<div>(Muted - Not shown to student)</div>"}
+            <div class="mb-1 p-1 feedback-expand-on-click feedback-shrunk">
+                ${message}
+            </div>
+            <small style="white-space: pre">${justification}</small>
+        </div>
+        `];
+    }
+ 
+    updateFullFeedback(executionResults) {
+        console.log(executionResults);
+        if (!("MAIN_REPORT" in executionResults)) {
+            return;
+        }
+        let mainReport = executionResults.MAIN_REPORT;
+        const feedback = mainReport.tp$getattr(new pyStr("feedback"));
+        if (!feedback) {
+            return;
+        }
+        let feedbacks = [];
+        Sk.misceval.iterFor(feedback.tp$iter(), (element) => {
+            feedbacks.push(this.processSingleFeedback(element));
+        });
+        Sk.misceval.iterFor(mainReport.tp$getattr(new pyStr("ignored_feedback")).tp$iter(), (element) => {
+            feedbacks.push(this.processSingleFeedback(element));
+        });
+        const parents = new Map();
+        for (let i = 0; i < feedbacks.length; i += 1) {
+            const [element, parent, text] = feedbacks[i];
+            const hasParent = !Sk.builtin.checkNone(parent);
+            if (hasParent) {
+                if (!parents.has(parent)) {
+                    parents.set(parent, []);
+                }
+                parents.get(parent).push(text);
+            } else {
+                if (!parents.has(element)) {
+                    parents.set(element, []);
+                }
+                parents.get(element).unshift(text);
+            }
+        }
+        feedbacks = [...parents.values()].flat();
+        this.category.on("click", () => {
+            this.main.components.dialog.show("Full Feedback Information", '<div class="list-group">'+
+                feedbacks.join("\n") + "</div>");
+            $(".feedback-expand-on-click").on("click", (event) => {
+                $(event.target).toggleClass("feedback-shrunk");
+            });
+        });
+    }
+ 
+    notifyFeedbackUpdate() {
+        if (!this.isFeedbackVisible()) {
+            this.tag.find(".blockpy-floating-feedback").show().fadeOut(7000);
+            if (this.shouldScrollIntoView()) {
+                this.scrollIntoView();
+            }
+        }
+    };
+ 
+    shouldScrollIntoView() {
+        return !this.main.model.ui.smallLayout();
+    }
+ 
+    presentRunError(error, just_return) {
+        if (just_return === undefined) {
+            just_return = false;
+        }
+        let message, label, category, lineno;
+        label = error.tp$name;
+        category = "runtime";
+        message = this.convertSkulptError(error);
+ 
+        if (just_return) {
+            return message;
+        }
+        this.feedbackModel.message(message);
+        this.feedbackModel.category(category);
+        this.feedbackModel.label(label);
+        this.feedbackModel.linesError.removeAll();
+        if (lineno !== undefined && lineno !== null) {
+            this.feedbackModel.linesError.push(lineno);
+        }
+    }
+ 
+    buildTraceback(error, filenameExecuted) {
+        return error.traceback.map(frame => {
+            if (!frame) {
+                return "??";
+            }
+            let lineno = frame.lineno;
+            if (frame.filename.slice(0, -3) === filenameExecuted) {
+                lineno -= this.main.model.execution.reports.instructor.lineOffset;
+            }
+            let file = `File <code class="filename">"${frame.filename}"</code>, `;
+            let line = `on line <code class="lineno">${lineno}</code>, `;
+            let scope = (frame.scope !== "<module>" &&
+            frame.scope !== undefined) ? `in scope ${frame.scope}` : "";
+            let source = "";
+            if (frame.source !== undefined) {
+                source = `\n<pre><code>${frame.source}</code></pre>`;
+            }
+            return file + line + scope + source;
+        });
+    }
+ 
+    convertSkulptError(error, filenameExecuted, isInstructor) {
+        let name = error.tp$name;
+        let args = Sk.ffi.remapToJs(error.args);
+        let top = `${name}: ${args[0]}\n<br>\n<br>`;
+        let traceback = "";
+        if (name === "TimeoutError") {
+            if (error.err && error.err.traceback && error.err.traceback.length) {
+                const allFrames = this.buildTraceback(error.err, filenameExecuted);
+                const result = ["Traceback:"];
+                if (allFrames.length > 5) {
+                    result.push(...allFrames.slice(0, 3),
+                                `... Hiding ${allFrames.length - 3} other stack frames ...,`,
+                                ...allFrames.slice(-3, -2));
+                } else {
+                    result.push(...allFrames);
+                }
+                traceback = result.join("\n<br>");
+            }
+        } else {
+            if (isInstructor) {
+                top = "Error in instructor feedback. Please show the following to an instructor:<br>\n"+top;
+            }
+            if (error.traceback && error.traceback.length) {
+                traceback = "Traceback:<br>\n" + this.buildTraceback(error, filenameExecuted).join("\n<br>");
+            }
+        }
+        return top+"\n"+traceback;
+    }
+ 
+    presentInternalError(error, filenameExecuted) {
+        if (error.tp$name === "TimeoutError") {
+            this.main.model.execution.feedback.category("runtime");
+            this.main.model.execution.feedback.label("Timeout Error");
+        } else {
+            this.main.model.execution.feedback.category("internal");
+            this.main.model.execution.feedback.label("Internal Error");
+        }
+        let message = this.convertSkulptError(error, filenameExecuted, true);
+        this.main.model.execution.feedback.message(message);
+ 
+        this.notifyFeedbackUpdate();
+ 
+        this.main.components.server.logEvent("X-System.Error", "internal", "Internal Error", message, filenameExecuted);
+    }
+ 
+ 
+ 
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/files.js.html b/coverage/lcov-report/src/files.js.html new file mode 100644 index 000000000..688edeee0 --- /dev/null +++ b/coverage/lcov-report/src/files.js.html @@ -0,0 +1,2296 @@ + + + + + + Code coverage report for src/files.js + + + + + + + + + +
+
+

All files / src files.js

+
+ +
+ 6.81% + Statements + 19/279 +
+ + +
+ 2.63% + Branches + 4/152 +
+ + +
+ 1.81% + Functions + 1/55 +
+ + +
+ 7.03% + Lines + 19/270 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738  +  +  +  +4x +36x +4x +  +36x +36x +36x +32x +32x +  +36x +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +4x +  +4x +  +  +  +  +  +4x +  +4x +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {firstDefinedValue} from "utilities.js";
+ 
+// ${makeTab("?mock_urls.blockpy", "URL Data", true)}
+ 
+const makeTab = function(filename, friendlyName, hideIfEmpty, notInstructor) {
+    if (friendlyName === undefined) {
+        friendlyName = filename;
+    }
+    let instructorFileClass = "";
+    let hideIfNotInstructor = "true";
+    if (!notInstructor) {
+        instructorFileClass = "blockpy-file-instructor";
+        hideIfNotInstructor = "display.instructor()";
+    }
+    return `
+    <li class="nav-item ${instructorFileClass}">
+        <a class="nav-link" href="#"
+            data-toggle="tab"
+            data-bind="css: {active: display.filename() === '${filename}'},
+                click: display.filename.bind($data, '${filename}'),
+                visible: (!${hideIfEmpty} || ui.files.hasContents('${filename}')) && ${hideIfNotInstructor}">
+            ${friendlyName}</a>
+    </li>`;
+};
+ 
+export let FILES_HTML = `
+<div class="blockpy-panel blockpy-files"
+    data-bind="visible: ui.files.visible, class: ui.files.width">
+<ul class="nav nav-tabs" role="tablist">
+ 
+    <li class="nav-item">
+        <strong>View: </strong>
+    </li>
+ 
+    ${makeTab("answer.py", undefined, undefined, true)}
+    ${makeTab("!instructions.md", "Instructions")}
+    ${makeTab("!assignment_settings.blockpy", "Settings")}
+    ${makeTab("^starting_code.py", "Starting Code")}
+    ${makeTab("!on_run.py", "On Run")}
+    ${makeTab("!on_change.py", "On Change", true)}
+    ${makeTab("!on_eval.py", "On Eval", true)}
+    ${makeTab("!sample_submissions.blockpy", "Sample Submissions", true)}
+    ${makeTab("!tags.blockpy", "Tags", true)}
+    
+    <!-- ko foreach: assignment.extraInstructorFiles -->
+        <li class="nav-item"
+            data-bind="css: {'blockpy-file-instructor': !filename().startsWith('&')},
+                       visible: filename().startsWith('&') || $root.display.instructor() ">
+            <a class="nav-link" href="#"
+                data-toggle="tab"
+                data-bind="css: {active: $root.display.filename() === filename(),
+                                 uneditable: filename().startsWith('&')},
+                            click: $root.display.filename.bind($data, filename()),
+                            text: $root.ui.files.displayFilename(filename())">
+            </a>        
+        </li>
+    <!-- /ko -->
+    <!-- ko foreach: assignment.extraStartingFiles -->
+        <li class="nav-item blockpy-file-instructor"
+            data-bind="visible: $root.display.instructor()">
+            <a class="nav-link" href="#"
+                data-toggle="tab"
+                data-bind="css: {active: $root.display.filename() === filename()},
+                            click: $root.display.filename.bind($data, filename()),
+                            text: filename">
+            </a>        
+        </li>
+    <!-- /ko -->
+    
+    <!-- ko foreach: submission.extraFiles -->
+        <li class="nav-item">
+            <a class="nav-link" href="#"
+                data-toggle="tab"
+                data-bind="css: {active: $root.display.filename() === filename()},
+                            click: $root.display.filename.bind($data, filename()),
+                            text: $root.ui.files.displayFilename(filename())">
+            </a>
+        </li>
+    <!-- /ko -->
+  
+    <li class="nav-item dropdown" data-bind="visible: ui.files.addIsVisible">
+        <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"
+         role="button" aria-haspopup="true" aria-expanded="false">Add New</a>
+        <!-- ko if: $root.display.instructor() -->
+        <div class="dropdown-menu dropdown-menu-right">
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('?mock_urls.blockpy'),
+                           click: ui.files.add.bind($data, '?mock_urls.blockpy')">URL Data</a>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('images.blockpy'),
+                           click: ui.files.add.bind($data, 'images.blockpy')">Images</a>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('?toolbox.blockpy'),
+                           click: ui.files.add.bind($data, '?toolbox.blockpy')">Toolbox</a>
+            
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('!tags.blockpy')">Tags</a>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('!sample_submissions.blockpy'),
+                           click: ui.files.add.bind($data, '!sample_submissions.blockpy')">Sample Submissions</a>
+            <div class="dropdown-divider"></div>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: assignment.onChange,
+                           click: ui.files.add.bind($data, '!on_change.py')">On Change</a>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: assignment.onEval,
+                           click: ui.files.add.bind($data, '!on_eval.py')">On Eval</a>
+            <div class="dropdown-divider"></div>
+           <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('!answer_prefix.py'),
+                           click: ui.files.add.bind($data, '!answer_prefix.py')">Answer Prefix</a>
+           <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="hidden: ui.files.hasContents('!answer_suffix.py'),
+                           click: ui.files.add.bind($data, '!answer_suffix.py')">Answer Suffix</a>
+            <div class="dropdown-divider"></div>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="click: ui.files.add.bind($data, 'starting')">Starting File</a>
+            <a class="dropdown-item blockpy-file-instructor" href="#"
+                data-bind="click: ui.files.add.bind($data, 'instructor')">Instructor File</a>
+            <a class="dropdown-item" href="#"
+                data-bind="click: ui.files.add.bind($data, 'student')">Student File</a>
+        </div>
+        <!-- /ko -->
+        <!-- ko ifnot: $root.display.instructor() -->
+        <div class="dropdown-menu dropdown-menu-right">
+        <a class="dropdown-item" href="#"
+                data-bind="click: ui.files.add.bind($data, 'student')">Student File</a>
+        </div>
+        <!-- /ko -->
+    </li>
+  
+</ul>
+</div>
+`;
+ 
+const NEW_INSTRUCTOR_FILE_DIALOG_HTML = `
+<form>
+<div class="form-group row">
+    <div>
+        <p>This dialog box is for creating text files (e.g., Python code, Markdown, etc.) that will be
+        accessible from Python. If you want to upload a binary file (e.g., an image, a sqlite database),
+        then you should use the "Images" or "URL Data" options.</p>
+        
+        <p>Students will not be able to see file tabs unless you change the "Hide Files" setting to be unchecked.</p>
+    </div>
+    <!-- Filename -->
+    <div class="col-sm-2 text-right">
+        <label for="blockpy-instructor-file-dialog-filename">Filename:</label>
+    </div>
+    <div class="col-sm-10">
+        <input type="text" class="form-control blockpy-instructor-file-dialog-filename"
+            id="blockpy-instructor-file-dialog-filename">    
+    </div>
+    <!-- Filetype -->
+    <div class="col-sm-2 text-right mt-2">
+        <label for="blockpy-instructor-file-dialog-filetype">Filetype: </label>
+    </div>
+    <div class="col-sm-10">
+        <span class="blockpy-instructor-file-dialog-filetype"
+            id="blockpy-instructor-file-dialog-filetype"></span>    
+    </div>
+    <!-- Inaccessible to student? -->
+    <div class="col-sm-2 text-right mt-2">
+        <label for="blockpy-instructor-file-dialog-namespace">Namespace: </label>
+    </div>
+    <div class="col-sm-4">
+        <select class="form-control blockpy-instructor-file-dialog-namespace"
+            id="blockpy-instructor-file-dialog-namespace">
+            <option value="!">Completely inaccessible</option>
+            <option value="?">Hidden from student, accessible programatically</option>
+            <option value="&">Visible to student, but not editable</option>
+        </select>
+    </div>
+</div>
+</form>
+`;
+ 
+/**
+ * Filenames live in one of five possible namespaces:
+ *  Instructor (!): Invisible to the student under all circumstances
+ *  Start Space (^): Used to reset the student namespace
+ *  Student Space (): Visible to the student when display.hideFiles is not true, able to be edited
+ *  Hidden Space (?): Not directly visible to the student, but accessible programmatically
+ *  Read-only Space (&): An instructor file type visible to the student, but is uneditable by them
+ *  Secret Space ($): Not visible from the menu at all, some other mechanism controls it
+ *  Generated Space (*): Visible to the student, but destroyed after Engine.Clear. Can shadow an actual file.
+ *  Concatenated Space (#): Used when bundling a space for the server.
+ */
+ 
+export let STARTING_FILES = [
+    // Submission
+    "answer.py",
+    // Instructor files
+    "!instructions.md",
+    "!assignment_settings.blockpy",
+    "^starting_code.py",
+    "!on_run.py",
+    "$settings.blockpy",
+];
+ 
+export const BASIC_NEW_FILES = [
+    "!on_change.py",
+    "!on_eval.py",
+    "?mock_urls.blockpy",
+    "?toolbox.blockpy",
+    "!tags.blockpy",
+    "!sample_submissions.blockpy",
+    "!answer_prefix.py",
+    "!answer_suffix.py"
+];
+ 
+export function chompSpecialFile(filename) {
+    if ("!^?&$*#".includes(filename[0])) {
+        return filename.slice(1);
+    } else {
+        return filename;
+    }
+}
+ 
+const INSTRUCTOR_DIRECTORY = "_instructor/";
+const STUDENT_DIRECTORY = "_student/";
+ 
+const SearchModes = {
+    EVERYWHERE: "EVERYWHERE",
+    START_WITH_INSTRUCTOR: "START_WITH_INSTRUCTOR",
+    ONLY_STUDENT_FILES: "ONLY_STUDENT_FILES"
+};
+ 
+const DELETABLE_SIMPLE_FILES = ["!on_change.py", "!on_eval.py"];
+ 
+export const UNDELETABLE_FILES = ["answer.py", "!instructions.md", "!assignment_settings.py",
+                                  "^starting_code.py", "!on_run.py", "$settings.blockpy"];
+ 
+export const UNRENAMABLE_FILES = ["answer.py", "!instructions.md", "!assignment_settings.py",
+                                  "^starting_code.py", "!on_run.py", "$settings.blockpy",
+                                  "!on_change.py", "!on_eval.py",
+                                  "?mock_urls.blockpy", "?toolbox.blockpy",
+                                  "!tags.blockpy", "!sample_submissions.blockpy",
+                                  "!answer_prefix.py", "!answer_suffix.py"];
+ 
+class BlockPyFile {
+    constructor(main, filename, contents) {
+        this.main = main;
+        this.filename = filename;
+        this.contents = contents || "";
+        this.owner = null;
+        this.handle = null;
+    }
+}
+ 
+export function makeModelFile(filename, contents) {
+    return {"filename": ko.observable(filename), contents: ko.observable(contents || "")};
+}
+ 
+function makeMockModelFile(filename, contents) {
+    return { filename: () => filename, contents: () => contents };
+}
+ 
+export function loadConcatenatedFile(concatenatedFile, modelFileList) {
+    if (concatenatedFile) {
+        let files = JSON.parse(concatenatedFile);
+        let modelFiles = [];
+        for (let filename in files) {
+            if (files.hasOwnProperty(filename)) {
+                modelFiles.push(makeModelFile(filename, files[filename]));
+            }
+        }
+        //files = files.map(file => makeModelFile(file.filename, file.contents));
+        if (modelFileList) {
+            modelFileList(modelFiles);
+        } else {
+            return modelFiles;
+        }
+    } else {
+        if (modelFileList) {
+            modelFileList([]);
+        } else {
+            return [];
+        }
+    }
+}
+ 
+export function createConcatenatedFile(modelFileList) {
+    return JSON.stringify(modelFileList().map(file => {
+        return {
+            filename: file.filename(),
+            contents: file.contents()
+        };
+    }));
+}
+ 
+export function observeConcatenatedFile(modelFileList) {
+    return ko.pureComputed(() => {
+        let result = {};
+        modelFileList().forEach(file =>
+            result[file.filename()] = file.contents());
+        return JSON.stringify(result);
+    });
+}
+ 
+/**
+ * Abstracts away database logic
+ */
+export class BlockPyFileSystem {
+    constructor(main) {
+        this.main = main;
+        this.files_ = {};
+        this.mountFiles();
+ 
+        this.watchModel();
+        this.watches_ = {};
+ 
+        this.remoteFiles_ = {};
+        this.filesToUrls = {};
+ 
+        /*main.model.configuration.container.find(".blockpy-file-instructor").toggle(this.main.model.display.instructor());
+        this.main.model.display.instructor.subscribe((visiblity)=> {
+            main.model.configuration.container.find(".blockpy-file-instructor").toggle(visiblity);
+        });*/
+    }
+ 
+    watchFile(filename, callback) {
+        if (!(filename in this.watches_)) {
+            this.watches_[filename] = [];
+        }
+        this.watches_[filename].push(callback);
+    }
+ 
+    stopWatchingFile(filename) {
+        delete this.watches_[filename];
+    }
+ 
+    watchModel() {
+        let filesystem = this;
+        [this.main.model.submission.extraFiles,
+         this.main.model.assignment.extraStartingFiles,
+         this.main.model.assignment.extraInstructorFiles].forEach(fileArray =>
+            fileArray.subscribe(function(changes) {
+                changes.sort((first, second) => second.status.localeCompare(first.status))
+                    .forEach(function (change) {
+                        let modelFile = change.value;
+                        if (change.status === "added") {
+                            // Track new file
+                            let file = filesystem.newFile(modelFile.filename(), modelFile.contents(), modelFile.contents);
+                            filesystem.notifyWatches(file);
+                        } else if (change.status === "deleted") {
+                            // Delete file
+                            let file = filesystem.deleteFileLocally_(modelFile.filename());
+                            if (filesystem.main.model.display.filename() === modelFile.filename()) {
+                                filesystem.main.model.display.filename("answer.py");
+                            }
+                        }
+                    });
+            }, this, "arrayChange")
+        );
+    }
+ 
+    // answer.py
+    //   => subscribe to first element of submission.code)
+    // !on_run.py, !on_change.py, !on_eval.py
+    //   => subscribe to relevant assignment.<whatever>
+    // ^starting_code.py
+    //   => subscribe to first element of assignment.startingCode
+    // ^whatever
+    //   => subscribe to rest of the elements of assignment.startingCode
+    // !whatever or ?whatever
+    //   => subscribe to elements of assignment.extraFiles
+    // Otherwise:
+    //   => subscribe to rest of the elements of submission.code
+    /**
+     * New special files need to be registered here
+     * @param file {BlockPyFile}
+     * @private
+     */
+    observeFile_(file) {
+        if (file.filename === "answer.py") {
+            file.handle = this.main.model.submission.code;
+        } else if (file.filename === "!on_run.py") {
+            file.handle = this.main.model.assignment.onRun;
+        } else if (file.filename === "!on_change.py") {
+            file.handle = this.main.model.assignment.onChange;
+        } else if (file.filename === "!on_eval.py") {
+            file.handle = this.main.model.assignment.onEval;
+        } else if (file.filename === "!instructions.md") {
+            file.handle = this.main.model.assignment.instructions;
+        } else if (file.filename === "^starting_code.py") {
+            file.handle = this.main.model.assignment.startingCode;
+        } else if (file.filename === "?mock_urls.blockpy") {
+            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
+        } else if (file.filename === "?toolbox.blockpy") {
+            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
+        } else if (file.filename === "!answer_prefix.py") {
+            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
+        } else if (file.filename === "!answer_suffix.py") {
+            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
+        } else if (file.filename === "!tags.blockpy") {
+            file.handle = this.main.model.assignment.tags;
+        } else if (file.filename === "!assignment_settings.blockpy") {
+            file.handle = this.main.model.assignment.settings;
+        } else if (file.filename === "!sample_submissions.blockpy") {
+            file.handle = this.main.model.assignment.sampleSubmissions;
+        } else if (file.filename === "$settings.blockpy") {
+            file.handle = this.main.model.display;
+        } else if (file.filename.startsWith("^")) {
+            this.observeInArray_(file, this.main.model.assignment.extraStartingFiles);
+        } else if (file.filename.startsWith("!") ||
+                   file.filename.startsWith("?") ||
+                   file.filename.startsWith("&")) {
+            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
+        } else {
+            this.observeInArray_(file, this.main.model.submission.extraFiles);
+        }
+    }
+ 
+    observeInArray_(file, array) {
+        file.owner = array;
+        let codeBundle = file.owner();
+        for (let i=0; i < codeBundle.length; i++) {
+            if (codeBundle[i].filename() === file.filename) {
+                file.handle = codeBundle[i].contents;
+            }
+        }
+        if (file.handle === null) {
+            let newFile = makeModelFile(file.filename);
+            file.handle = newFile.contents;
+            array.push(newFile);
+        }
+    }
+ 
+    mountFiles() {
+        this.newFile("answer.py");
+        this.newFile("^starting_code.py");
+        this.newFile("!on_run.py");
+        this.newFile("!instructions.md");
+        this.newFile("!assignment_settings.blockpy");
+    }
+ 
+    dismountExtraFiles() {
+        for (let name in this.files_) {
+            if (this.files_.hasOwnProperty(name)) {
+                if (UNDELETABLE_FILES.indexOf(name) === -1) {
+                    delete this.files_[name];
+                    delete this.watches_[name];
+                }
+            }
+        }
+        // submission.codeTODO: Shouldn't we notify the UI that the file was deleted?
+    }
+ 
+    newFile(filename, contents, modelFile) {
+        if (filename in this.files_) {
+            // File already exists! Just update its handle
+            let existingFile = this.files_[filename];
+            if (modelFile === undefined) {
+                this.observeFile_(existingFile);
+            } else {
+                existingFile.handle = modelFile;
+            }
+            existingFile.handle(contents || "");
+            return existingFile;
+        } else {
+            // File does not exist
+            let newFile = new BlockPyFile(this.main, filename);
+            this.files_[filename] = newFile;
+            if (modelFile === undefined) {
+                this.observeFile_(newFile);
+            } else {
+                newFile.handle = modelFile;
+            }
+            if (contents !== undefined) {
+                newFile.handle(contents);
+            }
+            return newFile;
+        }
+    }
+ 
+    writeFile(filename, contents) {
+        contents = contents || "";
+        this.files_[filename].handle(contents);
+    }
+ 
+    readFile(filename) {
+        return this.files_[filename].handle();
+    }
+ 
+    getFile(filename) {
+        return this.files_[filename];
+    }
+ 
+    /**
+     *
+     * @param filename
+     * @returns {boolean|object} The info about the file, or false if it could not be deleted
+     */
+    deleteFile(filename) {
+        if (DELETABLE_SIMPLE_FILES.indexOf(filename) !== -1) {
+            let file = this.deleteFileLocally_(filename);
+            file.handle(null);
+            return true;
+        } else if (this.files_[filename].owner === null) {
+            return false;
+        } else {
+            // Triggers a callback to eventually call deleteFileLocally_
+            let found = this.files_[filename].owner.remove(modelFile => modelFile.filename() === filename);
+            return found || false;
+        }
+    }
+ 
+    deleteFileLocally_(filename) {
+        let file = this.files_[filename];
+        delete this.files_[filename];
+        if (filename in this.watches_) {
+            this.watches_[filename].forEach(callback => callback.deleted());
+        }
+        return file;
+    }
+ 
+    renameFile(source, destination) {
+        if (UNRENAMABLE_FILES.indexOf(source) !== -1) {
+            return false;
+        } else if (this.files_[filename].owner === null) {
+            return false;
+        } else {
+            // Triggers a callback to eventually call deleteFileLocally_
+            let found = this.files_[filename].owner.remove(modelFile => modelFile.filename() === filename);
+            return found || false;
+        }
+    }
+ 
+    notifyWatches(file) {
+        if (file.filename in this.watches_) {
+            this.watches_[file.filename].forEach(callback => callback.updated(file));
+        }
+    }
+ 
+    searchForFile(name, studentSearch) {
+        /*
+        TODO: This is called quite a bit by the Import mechanism, might need
+              to optimize it some more. Do timing tests.
+ 
+        files.*
+        _instructor/files.*
+        _student/files.*
+ 
+        If a student searches for a file, it checks the "?", "&", "*", "" namespaces
+            import helper => "./helper.py"
+            open("external.json") => "external.json"
+        If an instructor searches for a file, it checks "!", "^", "?", "&", "*", "" namespaces
+            To explicitly search instructor namespaces first
+                import _instructor.helper => "./instructor/helper.py"
+                open("_instructor/external.json") => "_instructor/external.json"
+            to allow student files to override:
+                import helper => "./helper.py"
+                open("external.json") => "external.json"
+            to only check student files, prepend with _student
+         */
+        // Chop off starting "./"
+        if (name.startsWith("./")) {
+            name = name.slice(2);
+        }
+        let searchMode = SearchModes.EVERYWHERE;
+        // Should the search be start with instructor side?
+        if (name.startsWith(INSTRUCTOR_DIRECTORY)) {
+            name = name.slice(INSTRUCTOR_DIRECTORY.length);
+            searchMode = SearchModes.START_WITH_INSTRUCTOR;
+        }
+        // Should the search be limited to the student mode?
+        if (name.startsWith(STUDENT_DIRECTORY)) {
+            name = name.slice(STUDENT_DIRECTORY.length);
+            searchMode = SearchModes.ONLY_STUDENT_FILES;
+        } else if (studentSearch) {
+            searchMode = SearchModes.ONLY_STUDENT_FILES;
+        }
+        // Shortcut for instructor versions
+        let extraStudentFiles = this.main.model.submission.extraFiles();
+        let extraInstructorFiles = this.main.model.assignment.extraInstructorFiles();
+        let extraStartingFiles = this.main.model.assignment.extraStartingFiles();
+        // Check special files (TODO: how would an instructor access "./_instructor/answer.py"?
+        let specialFile = this.searchForSpecialFiles_(name, searchMode);
+        if (specialFile !== undefined) {
+            return specialFile;
+        }
+        // Start looking through possible files
+        let studentVersion = this.searchForFileInList_(extraStudentFiles, name);
+        let generatedVersion = this.searchForFileInList_(extraStudentFiles, "*"+name);
+        let defaultVersion = this.searchForFileInList_(extraInstructorFiles, "&"+name);
+        let hiddenVersion = this.searchForFileInList_(extraInstructorFiles, "?"+name);
+        let remoteVersion = this.remoteFiles_[name];
+        if (searchMode === SearchModes.ONLY_STUDENT_FILES) {
+            return firstDefinedValue(hiddenVersion, defaultVersion, studentVersion, generatedVersion, remoteVersion);
+        }
+        let instructorVersion = this.searchForFileInList_(extraInstructorFiles, "!"+name);
+        let startingVersion = this.searchForFileInList_(extraStartingFiles, "^"+name);
+        if (searchMode === SearchModes.START_WITH_INSTRUCTOR) {
+            return firstDefinedValue(instructorVersion, hiddenVersion, startingVersion,
+                                     defaultVersion, studentVersion, generatedVersion, remoteVersion);
+        } else if (searchMode === SearchModes.EVERYWHERE) {
+            return firstDefinedValue(defaultVersion, studentVersion, generatedVersion,
+                                     instructorVersion, hiddenVersion, startingVersion, remoteVersion);
+        }
+    }
+ 
+    searchForFileInList_(modelList, filename) {
+        for (let i=0; i < modelList.length; i++) {
+            if (modelList[i].filename() === filename) {
+                return modelList[i];
+            }
+        }
+        return undefined;
+    }
+ 
+    searchForSpecialFiles_(filename, searchMode) {
+        if (searchMode === SearchModes.ONLY_STUDENT_FILES) {
+            if (filename === "answer.py") {
+                return makeMockModelFile("_instructor/answer.py", this.main.model.submission.code());
+            }
+            return undefined;
+        }
+        switch (filename) {
+            case "answer.py":
+                return makeMockModelFile("_instructor/answer.py", this.main.model.submission.code());
+            case "on_run.py":
+                return makeMockModelFile("_instructor/on_run.py", this.main.model.assignment.onRun());
+            case "on_change.py":
+                return makeMockModelFile("_instructor/on_change.py", this.main.model.assignment.onChange());
+            case "on_eval.py":
+                return makeMockModelFile("_instructor/on_eval.md", this.main.model.assignment.onEval());
+            case "instructions.md":
+                return makeMockModelFile("_instructor/instructions.md", this.main.model.assignment.instructions());
+            case "starting_code.py":
+                return makeMockModelFile("_instructor/starting_code.py", this.main.model.assignment.startingCode());
+        }
+        return undefined;
+    }
+ 
+    newFileDialog(kind) {
+        let body = $(NEW_INSTRUCTOR_FILE_DIALOG_HTML);
+        let filename = body.find(".blockpy-instructor-file-dialog-filename");
+        let filetype = body.find(".blockpy-instructor-file-dialog-filetype");
+        let namespace = body.find(".blockpy-instructor-file-dialog-namespace");
+        let extensionRegex = /(?:\.([^.]+))?$/;
+        filename.on("input", () => {
+            let extension = extensionRegex.exec(filename.val())[1];
+            extension = extension === undefined ? "No extension" : extension;
+            //TODO: this.main.components.editors.getEditorFromExtension(extension);
+            filetype.text(extension);
+        });
+        let yes = () => {
+            let prefix = "";
+            if (kind === "instructor") {
+                prefix = namespace.val();
+            } else if (kind === "starting") {
+                prefix = "^";
+            }
+ 
+            if (filename.val()) {
+                filename = prefix+filename.val();
+                this.newFile(filename);
+            }
+        };
+        body.submit((e) => {
+            e.preventDefault();
+            yes();
+            this.main.components.dialog.close();
+        });
+        this.main.components.dialog.confirm("Make New File", body, yes, ()=>{}, "Add");
+    }
+ 
+    loadRemoteFiles(files=null) {
+        // Clear existing remote files (?)
+        /*
+        Object.getOwnPropertyNames(this.remoteFiles_).forEach(function (prop) {
+            delete this.remoteFiles_[prop];
+        });*/
+        let model = this.main.model;
+ 
+        const preloadFiles = model.assignment.settings.preloadFiles() || model.assignment.settings.preloadAllFiles();
+        if (!preloadFiles && !files) {
+            return null;
+        }
+        if (model.assignment.settings.preloadFiles()) {
+            try {
+                files = JSON.parse(preloadFiles);
+            } catch (e) {
+                console.error("Failed to preload files, invalid structure: ", e);
+                return null;
+            }
+            this.downloadRemoteFiles(files);
+        } else if (files) {
+            this.downloadRemoteFiles(this.reorganizeFiles(files));
+        } else {
+            this.main.components.server.listUploadedFiles((data) => {
+                this.downloadRemoteFiles(this.reorganizeFiles(data.files));
+            });
+        }
+    }
+ 
+    reorganizeFiles(files) {
+        const organized = {};
+        Object.entries(files).forEach(([placement, placedFiles]) => {
+            placedFiles.forEach(([filename, url]) => {
+                const searchParams = new URL(url, window.location.origin).searchParams;
+                const directory = searchParams.get("directory");
+                const placement = searchParams.get("placement");
+                if (!(placement in organized)) {
+                    organized[placement] = {};
+                }
+                if (!(directory in organized[placement])) {
+                    organized[placement][directory] = {};
+                }
+                organized[placement][directory][filename] = true;
+                this.filesToUrls[filename] = url;
+            });
+        });
+        return organized;
+    }
+ 
+    downloadRemoteFiles(files) {
+        const oldRemainingFiles = Object.keys(this.remoteFiles_);
+        Object.entries(files).forEach(([placement, placementData]) => {
+            Object.entries(placementData).forEach(([directory, directoryData]) => {
+                Object.entries(directoryData).forEach(([filename, renamedFile]) => {
+                    if (renamedFile === true) {
+                        renamedFile = filename;
+                    }
+                    if (!(renamedFile in this.remoteFiles_)) {
+                        this.main.components.server.downloadFile(placement, directory, filename, (data) => {
+                            this.newFile("images.blockpy", "{}");
+                            this.remoteFiles_[renamedFile] = makeMockModelFile(renamedFile, data);
+                            delete oldRemainingFiles[renamedFile];
+                        });
+                    }
+                });
+            });
+        });
+        // TODO: Clean up the old files after all the new ones are loaded
+    }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/footer.js.html b/coverage/lcov-report/src/footer.js.html new file mode 100644 index 000000000..a3a4b62ee --- /dev/null +++ b/coverage/lcov-report/src/footer.js.html @@ -0,0 +1,205 @@ + + + + + + Code coverage report for src/footer.js + + + + + + + + + +
+
+

All files / src footer.js

+
+ +
+ 100% + Statements + 1/1 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 1/1 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
//TODO: Move get link down to footer, remove vertical bar from quick-menu
+export let FOOTER_HTML = `
+<div class="col-md-12 blockpy-panel blockpy-status">
+    <div>
+        <label class="badge" data-bind="class: ui.server.status('loadAssignment')">Load Assignment
+            <!-- ko if: display.instructor -->
+            <input type="file"
+            class="blockpy-force-load-assignment-file blockpy-hidden-file"
+            accept="application/JSON"
+            data-bind="event: {change: ui.server.force.loadAssignment}">
+            <!-- /ko -->
+        </label>, 
+        <span class="badge" data-bind="class: ui.server.status('saveAssignment')">Save Assignment</span>, 
+        <span class="badge" data-bind="class: ui.server.status('loadFile')">Load File</span>, 
+        <span class="badge" data-bind="class: ui.server.status('saveFile')">Save File</span>, 
+        <span class="badge" data-bind="class: ui.server.status('loadDataset')">Load Dataset</span>, 
+        <span class="badge" data-bind="class: ui.server.status('logEvent')">Log Event</span>, 
+        <span class="badge" data-bind="class: ui.server.status('updateSubmission'),
+                                        click: ui.server.force.updateSubmission">Update Submission</span>, 
+        <span class="badge" data-bind="class: ui.server.status('onExecution')">Execution</span>
+    </div>
+    <div
+        <span data-bind="text: ui.server.messages"></span>
+    </div>
+    <div>
+        <span>User: <span data-bind="text: user.id"></span> (<span data-bind="text: user.name"></span>, <span data-bind="text: user.role"></span>)</span>, 
+        <span>Course: <span data-bind="text: user.courseId"></span></span>,
+        <span>Group: <span data-bind="text: user.groupId"></span></span>,
+        <span>Assignment: <span data-bind="text: assignment.id"></span></span>,
+        <span>Assignment Version: <span data-bind="text: assignment.version"></span></span>,
+        <span>Submission: 
+            <span data-bind="text: submission.id"></span>
+            <span data-bind="if: submission.ownerId() != user.id()">
+                (Owner ID: <span data-bind="text: submission.ownerId()"></span>)
+            </span>
+        </span>, 
+        <span>Submission Version: <span data-bind="text: submission.version"></span></span>,
+        <span>Editor Version: <span data-bind="text: display.editorVersion"></span></span>
+    </div>
+</div>
+`;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/history.js.html b/coverage/lcov-report/src/history.js.html new file mode 100644 index 000000000..a531c1a63 --- /dev/null +++ b/coverage/lcov-report/src/history.js.html @@ -0,0 +1,694 @@ + + + + + + Code coverage report for src/history.js + + + + + + + + + +
+
+

All files / src history.js

+
+ +
+ 7.35% + Statements + 5/68 +
+ + +
+ 0% + Branches + 0/25 +
+ + +
+ 0% + Functions + 0/18 +
+ + +
+ 7.35% + Lines + 5/68 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  + 
// TODO: Should disable buttons if we can't activate them.
+ 
+export const HISTORY_TOOLBAR_HTML = `
+<div class="blockpy-history-toolbar col-md-12" data-bind="visible: display.historyMode">
+ 
+    <form class="form-inline">
+        <button class="blockpy-history-start btn btn-outline-secondary mr-2" type="button"
+            data-bind="click: ui.editors.python.history.start">
+            <span class='fas fa-step-backward'></span> Start
+        </button>
+        <button class="btn btn-outline-secondary mr-2" type="button"
+            data-bind="click: ui.editors.python.history.previous">
+            <span class='fas fa-backward'></span> Previous
+        </button>
+        <select class="blockpy-history-selector form-control custom-select mr-2" aria-title="History Selector">
+        </select>
+        <button class="btn btn-outline-secondary mr-2" type="button"
+            data-bind="click: ui.editors.python.history.use">
+            <span class='fas fa-file-import'></span> Use
+        </button>
+        <button class="btn btn-outline-secondary mr-2" type="button"
+            data-bind="click: ui.editors.python.history.next">
+            <span class='fas fa-forward'></span> Next
+        </button>
+        <button class="btn btn-outline-secondary" type="button"
+            data-bind="click: ui.editors.python.history.mostRecent">
+            <span class='fas fa-step-forward'></span> Most Recent
+        </button>
+    </form>
+</div>
+`;
+ 
+/**
+ * An object for displaying the user's coding logs (their history).
+ * A lightweight component, its only job is to open a dialog.
+ *
+ * @constructor
+ * @this {BlockPyHistory}
+ * @param {Object} main - The main BlockPy instance
+ */
+export class BlockPyHistory {
+    constructor(main, tag) {
+        this.main = main;
+        this.tag = tag;
+        this.currentId = null;
+        this.history = [];
+        this.editEvents = [];
+    }
+ 
+    load(history) {
+        this.history = history;
+        this.editEvents = [];
+        this.selector = $(".blockpy-history-selector").empty();
+        let editId = 0;
+        history
+            .filter((entry) => (
+                !entry.file_path.startsWith("_instructor.") &&
+                    entry.event_type !== "Compile" &&
+                    entry.event_type !== "Intervention" &&
+                    (!this.main.model.assignment.hidden() || entry.event_type !== "X-Submission.LMS")
+            ))
+            .forEach((entry, index) => {
+                let event_type = REMAP_EVENT_TYPES[entry.event_type] || entry.event_type;
+                let displayed = prettyPrintDateTime(entry.client_timestamp) +" - "+event_type;
+                let disable = (entry.event_type !== "File.Edit");
+                let option = $("<option></option>", {text: displayed, disabled: disable});
+                if (this.isEditEvent(entry)) {
+                    option.attr("value", editId);
+                    this.editEvents.push(entry);
+                    editId += 1;
+                }
+                this.selector.append(option);
+            });
+        this.selector.val(Math.max(0, editId-1));
+        this.selector.change((evt) => {
+            this.updateEditor();
+        });
+    }
+ 
+    moveToStart() {
+        this.selector.val(0);
+        this.updateEditor();
+    }
+ 
+    movePrevious() {
+        let currentId = parseInt(this.selector.val(), 10);
+        this.selector.val(Math.max(0, currentId-1));
+        this.updateEditor();
+    }
+ 
+    moveNext() {
+        let currentId = parseInt(this.selector.val(), 10);
+        this.selector.val(Math.min(this.editEvents.length-1, currentId+1));
+        this.updateEditor();
+    }
+ 
+    moveToMostRecent() {
+        this.selector.val(this.editEvents.length-1);
+        this.updateEditor();
+    }
+ 
+    updateEditor() {
+        if (this.editEvents.length) {
+            let currentId = parseInt(this.selector.val(), 10);
+            this.main.components.pythonEditor.bm.setCode(this.editEvents[currentId].message);
+        }
+    }
+ 
+    use() {
+        if (this.editEvents.length) {
+            let currentId = parseInt(this.selector.val(), 10);
+            let code = this.editEvents[currentId].message;
+            this.main.model.ui.editors.python.turnOffHistoryMode();
+            this.main.components.pythonEditor.file.handle(code);
+        }
+    }
+ 
+    isEditEvent(entry) {
+        return ((entry.event_type === "File.Edit" ||
+                 entry.event_type === "File.Create") &&
+                this.main.model.display.filename() === entry.file_path);
+    }
+ 
+}
+ 
+const REMAP_EVENT_TYPES = {
+    "Session.Start": "Began session",
+    "X-IP.Change": "Changed IP address",
+    "File.Edit": "Edited code",
+    "File.Create": "Started assignment",
+    "Run.Program": "Ran program",
+    "Compile.Error": "Syntax error",
+    "X-Submission.LMS": "Updated grade"
+};
+ 
+const monthNames = [
+    "Jan", "Feb", "Mar",
+    "Apr", "May", "June", "July",
+    "Aug", "Sept", "Oct",
+    "Nov", "Dec"
+];
+const weekDays = [
+    "Sun", "Mon", "Tue",
+    "Wed", "Thu", "Fri",
+    "Sat"
+];
+ 
+function isSameDay(first, second) {
+    return first.getDate() === second.getDate() &&
+        first.getMonth() === second.getMonth() &&
+        first.getFullYear() === second.getFullYear();
+}
+ 
+/**
+ * Helper function to parse a date/time string and rewrite it as something
+ * more human readable.
+ * @param {String} timeString - the string representation of time ("YYYYMMDD HHMMSS")
+ * @returns {String} - A human-readable time string.
+ */
+function prettyPrintDateTime(timeString) {
+    /*let year = timeString.slice(0, 4),
+        month = parseInt(timeString.slice(4, 6), 10)-1,
+        day = timeString.slice(6, 8),
+        hour = timeString.slice(9, 11),
+        minutes = timeString.slice(11, 13),
+        seconds = timeString.slice(13, 15);*/
+    // TODO: Handle timezones correctly
+    if (timeString === undefined) {
+        return "Undefined Time";
+    }
+    let now = new Date();
+    let past = new Date(parseInt(timeString, 10));
+    if (isSameDay(now, past)) {
+        return "Today at "+past.toLocaleTimeString();
+    } else {
+        let dayStr = weekDays[past.getDay()];
+        let monthStr = monthNames[past.getMonth()];
+        let date = dayStr + ", " + monthStr + " " + past.getDate();
+        if (now.getFullYear() === past.getFullYear()) {
+            return date + " at "+past.toLocaleTimeString();
+        } else {
+            return date + ", "+past.getFullYear() + " at "+past.toLocaleTimeString();
+        }
+    }
+}
+ 
+ 
+/**
+ * Opens the history dialog box. This requires a trip to the server and
+ * occurs asynchronously. The users' code is shown in preformatted text
+ * tags (no code highlighting currently) along with the timestamp.
+ */
+BlockPyHistory.prototype.openDialog = function() {
+    var dialog = this.main.components.dialog;
+    var body = "<pre>a = 0</pre>";
+    this.main.components.server.getHistory(function (data) {
+        body = data.reverse().reduce(function (complete, elem) { 
+            var complete_str = prettyPrintDateTime(elem.time);
+            var new_line = "<b>"+complete_str+"</b><br><pre>"+elem.code+"</pre>";
+            return complete+"\n"+new_line;
+        }, "");
+        dialog.show("Work History", body, function() {});
+    });
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/index.html b/coverage/lcov-report/src/index.html new file mode 100644 index 000000000..32d1619e4 --- /dev/null +++ b/coverage/lcov-report/src/index.html @@ -0,0 +1,341 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 8% + Statements + 168/2098 +
+ + +
+ 1.87% + Branches + 18/961 +
+ + +
+ 3.72% + Functions + 18/483 +
+ + +
+ 7.94% + Lines + 164/2065 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
blockpy.js +
+
0.23%1/4330%0/3010%0/1340.23%1/432
console.js +
+
1.81%4/2200%0/580%0/571.83%4/218
corgis.js +
+
10%6/600%0/100%0/1410%6/60
dialog.js +
+
40.25%31/770%0/1210.71%3/2840.25%31/77
editors.js +
+
10.2%5/490%0/1812.5%1/88.69%4/46
engine.js +
+
0%0/770%0/240%0/200%0/77
feedback.js +
+
5.23%10/1910%0/967.14%2/284.81%9/187
files.js +
+
6.81%19/2792.63%4/1521.81%1/557.03%19/270
footer.js +
+
100%1/1100%0/0100%0/0100%1/1
history.js +
+
7.35%5/680%0/250%0/187.35%5/68
interface.js +
+
31.81%7/2225%1/433.33%3/931.81%7/22
server.js +
+
8.71%32/3670%0/1310%0/658.79%32/364
storage.js +
+
70.96%22/3125%1/450%6/1270.96%22/31
toolbar.js +
+
0%0/500%0/60%0/120%0/50
trace.js +
+
4.54%2/440%0/460%0/34.54%2/44
utilities.js +
+
17.82%23/12916.21%12/7410%2/2017.79%21/118
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/interface.js.html b/coverage/lcov-report/src/interface.js.html new file mode 100644 index 000000000..75b2b5868 --- /dev/null +++ b/coverage/lcov-report/src/interface.js.html @@ -0,0 +1,784 @@ + + + + + + Code coverage report for src/interface.js + + + + + + + + + +
+
+

All files / src interface.js

+
+ +
+ 31.81% + Statements + 7/22 +
+ + +
+ 25% + Branches + 1/4 +
+ + +
+ 33.33% + Functions + 3/9 +
+ + +
+ 31.81% + Lines + 7/22 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +3x +3x +1x +  +  +1x +1x +  +  +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * @fileoverview Contains main HTML of BlockPy interface, and helper functions.
+ * Combines a lot of HTML from components.
+ *
+ * Here's the layout:
+ *  Row 1: Header and Quick Menu
+ *  Row 2: Console and Feedback
+ *  Row 3: File Navigation
+ *  Row 4: View Row
+ *  Row 5: Footer Row
+ */
+ 
+import {TRACE_HTML} from "trace.js";
+import {DIALOG_HTML} from "dialog.js";
+import {FEEDBACK_HTML} from "feedback.js";
+import {FILES_HTML} from "files.js";
+import {FOOTER_HTML} from "footer.js";
+import {EDITORS_HTML} from "editors.js";
+import {CONSOLE_HTML} from "console.js";
+ 
+/**
+ * The different layout options of the panes in the second row of the layout.
+ * @enum {String}
+ */
+export let SecondRowSecondPanelOptions = {
+    FEEDBACK: "feedback",
+    TRACE: "trace",
+    NONE: "none"
+};
+ 
+/**
+ * Setup any additional Knockout subscriptions to fire on interface changes.
+ * @param self
+ * @param model
+ */
+export function makeExtraInterfaceSubscriptions(self, model) {
+    // Highlight Markdown when instructions update
+    let highlightTimeout = null;
+    model.ui.instructions.current.subscribe(() => {
+        Iif (highlightTimeout !== null) {
+            clearTimeout(highlightTimeout);
+        }
+        highlightTimeout = setTimeout(() => {
+            model.configuration.container.find(".blockpy-instructions pre code").map( (i, block) => {
+                window.hljs.highlightBlock(block);
+            });
+        }, 400);
+    });
+    // Provide Fullscreen support
+    model.display.fullscreen.subscribe((isFullscreen) => {
+        self.components.server.logEvent("X-Display.Fullscreen.Request", "", "",
+                                        isFullscreen.toString(), "");
+        if (isFullscreen) {
+            // NOTE: navigationUI could allow us to force controls to show
+            model.configuration.container.parent()[0].requestFullscreen().catch(err => {
+                let message = `Error attempting to enable full-screen mode: ${err.message} (${err.name})`;
+                self.components.server.logEvent("X-Display.Fullscreen.Error", "", "",
+                                                message,  "");
+                alert(message);
+            }).then(() => {
+                self.components.server.logEvent("X-Display.Fullscreen.Success", "", "",
+                                                "", "");
+                model.display.fullscreen(true);
+                model.configuration.container.css("overflow-y", "auto");
+            });
+        } else {
+            document.exitFullscreen().then(() => {
+                self.components.server.logEvent("X-Display.Fullscreen.Exit", "", "",
+                                                isFullscreen.toString(), "");
+                model.display.fullscreen(false);
+            });
+        }
+    });
+}
+ 
+// TODO: Get shareable link button
+ 
+export function makeInterface(main) {
+    return `
+<div class='blockpy-content container-fluid'>
+ 
+    <!-- Dialog -->
+    ${DIALOG_HTML}
+    
+    <!-- Hidden Capture Canvas -->
+    <canvas id='capture-canvas' class='d-none' role="presentation" aria-hidden="true"></canvas>
+    
+    <!-- Row 1: Header and Quick Menu -->
+    <div class='row' data-bind="hidden: ui.smallLayout()">
+         
+         <!-- Description -->
+         <div class='col-md-9 blockpy-panel blockpy-header'
+               role='heading' aria-label='Assignment Description'>
+         
+            <!-- Assignment Name -->
+            <span role='heading' aria-level='1'
+                  class="blockpy-name">
+                <strong>BlockPy: </strong> 
+                <span data-bind='text: assignment.name'></span>
+            </span>
+            
+            <!-- Reset Instructions Button -->
+            <div class="blockpy-instructions-reset"
+                data-bind="visible: ui.instructions.isChanged">
+                <a class="float-right"
+                    data-bind="click: ui.instructions.reset"
+                    href="">
+                    Reset instructions</a>
+            </div>
+            
+            <!-- Instructions -->
+            <div class='blockpy-instructions'
+                 data-bind="html: ui.instructions.current">
+            </div>
+        </div>
+        
+        <div class='col-md-3 blockpy-panel blockpy-quick-menu'
+             role='menubar' aria-label='Quick Menu' title="Quick Menu">
+            <!-- Get Shareable Link -->
+            <!--<button class="btn btn-outline-secondary btn-sm">
+                Get shareable link</button>-->
+            <span data-bind="visible: ui.menu.isSubmitted">
+                Your submission is ready to be reviewed!</span>
+            <button class="btn btn-outline-secondary btn-sm"
+                data-bind="visible: ui.menu.canMarkSubmitted,
+                           text: ui.menu.textMarkSubmitted,
+                           click: ui.menu.clickMarkSubmitted"></button>
+            <!-- View as instructor -->
+            <div class="form-check"
+                 data-bind="visible: ui.role.isGrader">
+                <input class="form-check-input" type="checkbox" value="" id="blockpy-as-instructor"
+                    data-bind="checked: display.instructor">
+                <label class="form-check-label" for="blockpy-as-instructor">
+                    View as instructor
+                </label>
+            </div>
+            <!-- Readonly mode for spying -->
+            <div data-bind="if: submission.ownerId() != user.id()">
+                Owner: <span data-bind="text: submission.ownerId"></span>
+                <div class="form-check">
+                    <input class="form-check-input" type="checkbox" value="blockpy-read-only"
+                        data-bind="checked: display.readOnly">
+                    <label class="form-check-label" for="blockpy-read-only">
+                        Readonly?
+                    </label>
+                </div>
+            </div>
+            
+            
+            <!-- Fullscreen button -->
+            <button class="btn btn-outline-secondary btn-sm"
+                data-bind="click: ui.menu.clickFullscreen"
+                title="Full Screen">
+                <span class='fas' data-bind="class: ui.menu.textFullscreen"></span>
+            </button>
+            <!-- Edit Queued Inputs -->
+            <button class="btn btn-outline-secondary btn-sm"
+                data-bind="click: ui.menu.editInputs, visible: ui.menu.showQueuedInputs" title="Edit Inputs">
+                <span class='fas fa-list-alt'></span>
+            </button>
+            <!-- Toggle Image Rendering -->
+            <button class="btn btn-outline-secondary btn-sm"
+                data-toggle="button"
+                data-bind="click: ui.menu.toggleImages" title="Toggle Images">
+                <span class="fas fa-images"></span>
+            </button>
+            <!-- Get Shareable Link Dialog -->
+            <button class="btn btn-outline-secondary btn-sm"
+                data-bind="click: ()=>ui.menu.startShare(false), visible: ui.menu.canShare"
+                title="Get Shareable Link for Instructors or TAs">
+                <span class="fas fa-link"></span>
+            </button>
+            <!-- Pink Bug for actual errors -->
+            <span class="blockpy-student-error fas fa-bug"></span>
+            <span data-bind="hidden: ui.menu.showClock" class="blockpy-menu-clock"></span>
+        </div>
+         
+    </div>
+    
+    <!-- ko if: ui.smallLayout() -->
+    <!-- Small layout View as instructor -->
+    <div class="form-check"
+         data-bind="visible: ui.role.isGrader">
+        <input class="form-check-input" type="checkbox" value="" id="blockpy-as-instructor"
+            data-bind="checked: display.instructor">
+        <label class="form-check-label" for="blockpy-as-instructor">
+            View as instructor
+        </label>
+    </div>
+    <!-- ko if: ui.files.visible() -->
+    ${FILES_HTML}
+    <!-- /ko -->
+    <!-- /ko -->
+    
+    <div class='row'>
+    <!-- Row 2: Console and Feedback -->
+    <!-- ko if: ui.secondRow.isAllVisible -->
+    <div data-bind="class: ui.secondRow.width">
+    <div class='row'>
+        <!-- Console -->
+        ${CONSOLE_HTML}
+        <!-- Feedback -->
+        <!-- ko if: ui.secondRow.isFeedbackVisible -->
+        ${FEEDBACK_HTML}
+        <!-- /ko -->
+        <!-- Trace -->
+        <!-- ko if: ui.secondRow.isTraceVisible -->
+        ${TRACE_HTML}
+        <!-- /ko -->
+    </div>
+    </div>
+    <!-- /ko -->
+    
+    <!-- Row 3: File Navigation -->
+    <!-- ko if: ui.files.visible() && !ui.smallLayout() -->
+    ${FILES_HTML}
+    <!-- /ko -->
+    
+    <!-- Row 4: View Row -->
+    ${EDITORS_HTML}
+    
+    </div>
+    
+    
+    <!-- Row 5: Footer Row -->    
+    <!-- ko if: ui.footer.visible -->
+    <div class="row">
+        ${FOOTER_HTML}
+    </div>
+    <!-- /ko -->
+    
+</div>
+    `;
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/server.js.html b/coverage/lcov-report/src/server.js.html new file mode 100644 index 000000000..9236d665b --- /dev/null +++ b/coverage/lcov-report/src/server.js.html @@ -0,0 +1,2164 @@ + + + + + + Code coverage report for src/server.js + + + + + + + + + +
+
+

All files / src server.js

+
+ +
+ 8.71% + Statements + 32/367 +
+ + +
+ 0% + Branches + 0/131 +
+ + +
+ 0% + Functions + 0/65 +
+ + +
+ 8.79% + Lines + 32/364 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  + 
import {LocalStorageWrapper} from "./storage";
+import {loadAssignmentSettings, saveAssignmentSettings} from "./editor/assignment_settings";
+ 
+/**
+ *
+ * @enum {string}
+ */
+export let StatusState = {
+    READY: "ready",
+    ACTIVE: "active",
+    RETRYING: "retrying",
+    FAILED: "failed",
+    OFFLINE: "offline"
+};
+ 
+/**
+ * Object for communicating with the external servers. This includes functionality for
+ * saving and loading files, logging events, saving completions, and retrieving history.
+ *
+ * @constructor
+ * @this {BlockPyServer}
+ * @param {Object} main - The main BlockPy instance
+ */
+export function BlockPyServer(main) {
+    this.main = main;
+ 
+    // Save URLs locally for quicker access
+    this.urls = main.model.configuration.urls;
+ 
+    // Add the LocalStorage connection
+    this.storage = new LocalStorageWrapper("BLOCKPY");
+ 
+    // FaultResistantCache
+    this.queue = {
+        "logEvent": JSON.parse(this.storage.getDefault("logEvent", "[]")),
+        "updateSubmission": JSON.parse(this.storage.getDefault("updateSubmission", "[]"))
+    };
+    this.MAX_QUEUE_SIZE = {
+        "logEvent": 200,
+        "updateSubmission": 50
+    };
+ 
+    this.TIMER_DELAY = 1000;
+    this.FAIL_DELAY = 2000;
+ 
+    this.timers = {};
+ 
+    this.overlay = null;
+    this.blockingAttempts = 0;
+ 
+    this.cachedFilenames = [];
+    this.createSubscriptions();
+    this.checkCaches();
+ 
+    this.altLogEntry = null;
+}
+ 
+/**
+ * Checks whether the IP address has changed, logging an event if that occurs.
+ * @param response
+ */
+BlockPyServer.prototype.checkIP = function (response) {
+    if (response.success) {
+        if (this.storage.has("IP")) {
+            let oldIP = this.storage.get("IP");
+            if (oldIP !== response.ip) {
+                let message = JSON.stringify({
+                    "old": oldIP,
+                    "new": response.ip
+                });
+                if (this.altLogEntry) {
+                    this.altLogEntry("X-IP.Change", undefined, undefined, message);
+                } else {
+                    this.logEvent("X-IP.Change", undefined, undefined, message);
+                }
+                this.storage.set("IP", response.ip);
+            }
+        } else {
+            this.storage.set("IP", response.ip);
+        }
+    }
+};
+ 
+/**
+ * Determines if there have been previous failures cached, and if so retries them.
+ * TODO: update
+ */
+BlockPyServer.prototype.checkCaches = function () {
+    if (this.storage.has("saveAssignment")) {
+        let data = JSON.parse(this.storage.get("saveAssignment"));
+        this._postLatestRetry(data, "assignment",
+                              "saveAssignment", this.TIMER_DELAY);
+    }
+    this.cachedFilenames.forEach((filename) => {
+        if (this.storage.has("saveFile" + filename)) {
+            let data = JSON.parse(this.storage.get("saveFile" + filename));
+            this._postLatestRetry(data, filename, "saveFile", this.TIMER_DELAY);
+        }
+    });
+    var server = this;
+    Object.keys(this.queue).forEach(function (endpoint) {
+        (function pushAnyQueued(response) {
+            if (response.success) {
+                if (server.queue[endpoint].length) {
+                    var data = JSON.parse(server.queue[endpoint].pop());
+                    var url = server.urls[endpoint];
+                    server._postRetry(data, endpoint, 1000, pushAnyQueued);
+                }
+            }
+        })({"success": true});
+    });
+};
+ 
+BlockPyServer.prototype.createFileSubscription = function (model, filename) {
+    model.subscribe((contents) =>
+        this.main.model.display.autoSave() ? this.saveFile(filename, contents) : false, this);
+    this.cachedFilenames.push(filename);
+};
+ 
+/**
+ * TODO: fix
+ */
+BlockPyServer.prototype.createSubscriptions = function () {
+    let model = this.main.model;
+    this.createFileSubscription(model.submission.code, "answer.py");
+    this.createFileSubscription(model.assignment.onRun, "!on_run.py");
+    this.createFileSubscription(model.assignment.onEval, "!on_eval.py");
+    this.createFileSubscription(model.assignment.onChange, "!on_change.py");
+    this.createFileSubscription(model.assignment.instructions, "!instructions.md");
+    this.createFileSubscription(model.assignment.startingCode, "^starting_code.py");
+    this.createFileSubscription(model.ui.files.extraStudentFiles, "#extra_student_files.blockpy");
+    this.createFileSubscription(model.ui.files.extraStartingFiles, "#extra_starting_files.blockpy");
+    this.createFileSubscription(model.ui.files.extraInstructorFiles, "#extra_instructor_files.blockpy");
+};
+ 
+BlockPyServer.prototype.createEventLogs = function() {
+    window.onblur = () => {
+        this.logEvent("Session.End", undefined, undefined, undefined);
+    };
+    window.onfocus = () => {
+        this.logEvent("Session.Start", undefined, undefined, undefined);
+    };
+ 
+    // TODO: Add in beacon?
+};
+ 
+/**
+ *
+ * Some subscriptions have to happen after other things have been loaded.
+ * Right now this is just after CORGIS libraries have been loaded, but maybe
+ * we'll add more later and this will need to be refactored.
+ *
+ * TODO: fix
+ *
+ */
+BlockPyServer.prototype.finalizeSubscriptions = function () {
+    //this.main.model.assignment.settings.datasets.subscribe(this.saveAssignment.bind(this));
+};
+ 
+BlockPyServer.prototype.authorizeHeader = function(currentSettings) {
+    if (!currentSettings) {
+        currentSettings = {};
+    }
+    const accessToken = this.main.model.configuration.accessToken();
+    if (accessToken) {
+        if (!currentSettings.headers) {
+            currentSettings.headers = {};
+        }
+        currentSettings.headers["Authorization"] = "Bearer " + accessToken;
+    }
+    return currentSettings;
+};
+ 
+/**
+ * Creates the default payload for any communication with the server API
+ * @returns {{assignment_id: *, course_id: *, group_id: *, user_id: *, timezone: *, version: *, timestamp: *}}
+ */
+BlockPyServer.prototype.createServerData = function () {
+    let assignment = this.main.model.assignment;
+    let user = this.main.model.user;
+    let submission = this.main.model.submission;
+    let display = this.main.model.display;
+    const configuration = this.main.model.configuration;
+    let now = new Date();
+    let microseconds = now.getTime();
+    let result = {
+        "assignment_id": assignment.id(),
+        "assignment_group_id": user.groupId(),
+        "course_id": user.courseId(),
+        "submission_id": submission.id(),
+        "user_id": user.id(),
+        "version": assignment.version(),
+        "timestamp": microseconds,
+        "timezone": now.getTimezoneOffset(),
+        "passcode": display.passcode(),
+        "part_id": configuration.partId()
+    };
+    return result;
+};
+ 
+/**
+ * Updates the status and message for the relevant endpoint.
+ * @param endpoint {string} one of the URL endpoints
+ * @param status {StatusState}
+ * @param message {string?}
+ */
+BlockPyServer.prototype.setStatus = function (endpoint, status, message) {
+    if (endpoint in this.main.model.status) {
+        this.main.model.status[endpoint](status);
+        this.main.model.status[endpoint + "Message"](message || "");
+    }
+};
+ 
+/**
+ * Renders an overlay on the screen that blocks operation until the system is ready.
+ * The overlay gets progressively darker to indicate repeated failures.
+ */
+BlockPyServer.prototype.showOverlay = function (attempt) {
+    this.blockingAttempts += 1;
+    if (!document.getElementsByClassName("blockpy-overlay").length) {
+        this.overlay = $('<div class="blockpy-overlay"> </div>');
+        this.overlay.appendTo(document.body);
+    }
+    switch (attempt) {
+        case 0:
+            this.overlay.css("background-color", "#988");
+            break;
+        case 1:
+            this.overlay.css("background-color", "#655");
+            break;
+        case 2:
+            this.overlay.css("background-color", "#333");
+            break;
+        default:
+            this.overlay.css("background-color", "black");
+            break;
+    }
+};
+ 
+/**
+ * Undo a level of overlay; if this was the last level, removes it from the screen.
+ */
+BlockPyServer.prototype.hideOverlay = function () {
+    this.blockingAttempts -= 1;
+    if (this.blockingAttempts <= 0) {
+        this.overlay.remove();
+    }
+};
+ 
+BlockPyServer.prototype._enqueueData = function (cache, data) {
+    // Ensure we have not overfilled the queue
+    let length = this.queue[cache].length;
+    let max = this.MAX_QUEUE_SIZE[cache];
+    if (length > max) {
+        this.queue[cache] = this.queue[cache].slice(length - max, max);
+    }
+    // Only add the element if it's new
+    let key = JSON.stringify(data);
+    let index = this.queue[cache].indexOf(key);
+    if (index === -1) {
+        this.queue[cache].push(key);
+        this.storage.set(cache, JSON.stringify(this.queue[cache]));
+    }
+};
+ 
+BlockPyServer.prototype._dequeueData = function (cache, data) {
+    let key = JSON.stringify(data);
+    let index = this.queue[cache].indexOf(key);
+    if (index >= 0) {
+        this.queue[cache].splice(index);
+        this.storage.set(cache, JSON.stringify(this.queue[cache]));
+    }
+};
+ 
+ 
+BlockPyServer.prototype._postRetry = function (data, endpoint, delay, callback) {
+    // Trigger request
+    let postRequest = () => {
+        // Make a backup of the current post
+        this._enqueueData(endpoint, data);
+        $.ajax({url: this.urls[endpoint], type: "post", data: data, ...this.authorizeHeader()})
+            .done((response) => {
+                this._dequeueData(endpoint, data);
+                if (response.success) {
+                    this.setStatus(endpoint, StatusState.READY);
+                } else {
+                    console.error(response);
+                    this.setStatus(endpoint, StatusState.FAILED, response.message);
+                }
+                if (callback) {
+                    callback(response);
+                }
+                if (response.success) {
+                    this.checkIP(response.ip);
+                }
+            })
+            // If server request is the latest one, then let's try it again in a bit
+            .fail((error, textStatus) => {
+                this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
+                this._postRetry(data, endpoint, delay + this.FAIL_DELAY, callback);
+            });
+    };
+    if (delay === null) {
+        postRequest();
+    } else {
+        setTimeout(postRequest, delay);
+    }
+};
+ 
+/**
+ * Make a AJAX request that, upon failure, will check to see if this was the
+ * latest attempt for this `cache` marker. If so, it will attempt again until
+ * successful; otherwise, it gives up the request.
+ *
+ * @param {Object} data - The AJAX-ready data to be posted
+ * @param {String} filename - The unique name given to the relevant timer
+ * @param {String} endpoint - The unique name given to the relevant cache entry
+ * @param {Integer} delay - The current number of milliseconds to wait before
+ trying the request again.
+ */
+BlockPyServer.prototype._postLatestRetry = function (data, filename, endpoint, delay, failureFunction, doneFunction) {
+    let cache = endpoint + filename;
+    let request = () => {
+        // Make a backup of the current post
+        this.storage.set(cache, JSON.stringify(data));
+        let time = this.storage.getTime(cache);
+        // Send the request
+        $.ajax({url: this.urls[endpoint], data: data, type: "post", ...this.authorizeHeader()})
+            .done((response) => {
+                if (response.success) {
+                    this.checkIP(response);
+                    // If server request is the latest one, clear it from the cache
+                    let cachedTime = this.storage.getTime(cache);
+                    if (time >= cachedTime) {
+                        this.storage.remove(cache);
+                    }
+                    this.setStatus(endpoint, StatusState.READY);
+                } else {
+                    // This connected but failed, don't try again but let the user know why.
+                    this.setStatus(endpoint, StatusState.FAILED, response.message);
+                    if (response.success === false) {
+                        // If we're the latest one, clear it from the cache
+                        let cachedTime = this.storage.getTime(cache);
+                        if (time >= cachedTime) {
+                            this.storage.remove(cache);
+                        }
+                        if (failureFunction) {
+                            failureFunction(response);
+                        }
+                    }
+                }
+            })
+            .fail((error, textStatus) => {
+                this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
+                // If server request is the latest one, then let's try it again in a bit
+                let cachedTime = this.storage.getTime(cache);
+                if (time >= cachedTime) {
+                    this._postLatestRetry(data, filename, endpoint, delay + this.FAIL_DELAY);
+                }
+            })
+            .done(doneFunction);
+    };
+    clearTimeout(this.timers[cache]);
+    if (delay === null) {
+        return request();
+    } else {
+        this.timers[cache] = setTimeout(request, delay);
+    }
+};
+ 
+BlockPyServer.prototype._postBlocking = function (endpoint, data, attempts, success, failure, extraSettings={}) {
+    this.showOverlay(attempts);
+    return $.ajax({
+        type: "POST",
+        url: this.urls[endpoint],
+        data: data,
+        ...this.authorizeHeader(extraSettings)
+    })
+        .done((response) => {
+            this.hideOverlay();
+            this.setStatus(endpoint, StatusState.READY);
+            success(response);
+            this.checkIP(response);
+        })
+        .fail((e, textStatus, errorThrown) => {
+            if (attempts <= 0) {
+                this.hideOverlay();
+                this.setStatus(endpoint, StatusState.FAILED, textStatus.toString());
+                if (failure) {
+                    failure(e, textStatus, errorThrown);
+                }
+            } else {
+                setTimeout(() => {
+                    this.hideOverlay();
+                    this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
+                    this._postBlocking(endpoint, data, attempts - 1, success, failure, extraSettings);
+                }, this.FAIL_DELAY);
+            }
+        });
+};
+ 
+ 
+BlockPyServer.prototype.loadAssignment = function (assignment_id) {
+    let model = this.main.model;
+    if (model.ui.server.isEndpointConnected("loadAssignment")) {
+        let data = this.createServerData();
+        data["assignment_id"] = assignment_id;
+        this._postBlocking("loadAssignment", data, 4,
+                           (response) => {
+                               if (response.success) {
+                                   this.main.loadAssignmentData_(response);
+                               } else {
+                                   this.setStatus("loadAssignment", StatusState.FAILED, response.message);
+                                   this.main.components.dialog.ERROR_LOADING_ASSIGNMNENT(response.message);
+                               }
+                           },
+                           (e, textStatus, errorThrown) => {
+                               this.main.components.dialog.ERROR_LOADING_ASSIGNMNENT(textStatus);
+                               console.error(e, textStatus, errorThrown);
+                           });
+    } else {
+        this.setStatus("loadAssignment", StatusState.OFFLINE);
+    }
+};
+ 
+BlockPyServer.prototype.saveAssignment = function () {
+    let model = this.main.model;
+    if (model.ui.server.isEndpointConnected("saveAssignment")) {
+        let data = this.createServerData();
+        data["hidden"] = model.assignment.hidden();
+        data["reviewed"] = model.assignment.reviewed();
+        data["public"] = model.assignment.public();
+        data["url"] = model.assignment.url();
+        data["points"] = model.assignment.points();
+        data["ip_ranges"] = model.assignment.ipRanges();
+        data["name"] = model.assignment.name();
+        data["settings"] = saveAssignmentSettings(model);
+ 
+        this._postBlocking("saveAssignment", data, 3,
+                           this.startPossibleFork.bind(this),
+                           (e, textStatus, errorThrown) => {
+                               this.main.components.dialog.ERROR_SAVING_ASSIGNMNENT(textStatus);
+                               console.error(e, textStatus, errorThrown);
+                           });
+    } else {
+        this.setStatus("saveAssignment", StatusState.OFFLINE, "Server is not connected! (Save Assignment)");
+    }
+};
+ 
+BlockPyServer.prototype.loadHistory = function (callback) {
+    if (this.main.model.ui.server.isEndpointConnected("loadHistory")) {
+        let model = this.main.model;
+        let data = this.createServerData();
+        this._postBlocking("loadHistory", data, 2, callback,
+                           (e, textStatus, errorThrown) => {
+                               this.main.components.dialog.ERROR_LOADING_HISTORY();
+                               console.error(e, textStatus, errorThrown);
+                           });
+    }
+};
+ 
+BlockPyServer.prototype.listUploadedFiles = function (callback) {
+    if (this.main.model.ui.server.isEndpointConnected("listUploadedFiles")) {
+        let model = this.main.model;
+        let data = this.createServerData();
+        this._postBlocking("listUploadedFiles", data, 2, callback,
+                           (e, textStatus, errorThrown) => {
+                               this.main.components.dialog.ERROR_LISTING_UPLOADED_FILES(textStatus);
+                               console.error(e, textStatus, errorThrown);
+                           });
+    }
+};
+ 
+BlockPyServer.prototype.uploadFile = function (placement, directory, filename, contents, callback, deleteInstead=false) {
+    let model = this.main.model;
+    if (model.ui.server.isEndpointConnected("uploadFile")) {
+        let data = this.createServerData();
+        data["placement"] = placement;
+        data["directory"] = directory;
+        data["filename"] = filename;
+        data["contents"] = contents;
+        if (deleteInstead) {
+            data["delete"] = true;
+        }
+        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
+        return this._postBlocking("uploadFile", fd, 3,
+                                  callback,
+                                  (e, textStatus, errorThrown) => {
+                                      if (deleteInstead) {
+                                          this.main.components.dialog.ERROR_DELETING_FILE(textStatus);
+                                      } else {
+                                          this.main.components.dialog.ERROR_UPLOADING_FILE(textStatus);
+                                      }
+                                      console.error(e, textStatus, errorThrown);
+                                  }, {processData: false, contentType: false});
+    } else {
+        this.setStatus("uploadFile", StatusState.OFFLINE, "Server is not connected! (Upload File)");
+    }
+};
+ 
+BlockPyServer.prototype.downloadFile = function (placement, directory, filename, callback) {
+    let model = this.main.model;
+    if (model.ui.server.isEndpointConnected("downloadFile")) {
+        let data = this.createServerData();
+        data["placement"] = placement;
+        data["directory"] = directory;
+        data["filename"] = filename;
+        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
+        return this._postBlocking("downloadFile", fd, 3,
+                                  callback,
+                                  (e, textStatus, errorThrown) => {
+                                      this.main.components.dialog.ERROR_DOWNLOADING_FILE(textStatus);
+                                      console.error(e, textStatus, errorThrown);
+                                  }, {processData: false, contentType: false, dataType: "text"});
+    } else {
+        this.setStatus("uploadFile", StatusState.OFFLINE, "Server is not connected! (Upload File)");
+    }
+};
+ 
+BlockPyServer.prototype.renameFile = function (placement, directory, old_filename, new_filename, callback) {
+    let model = this.main.model;
+    if (model.ui.server.isEndpointConnected("renameFile")) {
+        let data = this.createServerData();
+        data["placement"] = placement;
+        data["directory"] = directory;
+        data["old_filename"] = old_filename;
+        data["new_filename"] = new_filename;
+        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
+        return this._postBlocking("renameFile", fd, 3,
+                                  callback,
+                                  (e, textStatus, errorThrown) => {
+                                      this.main.components.dialog.ERROR_UPLOADING_FILE(textStatus);
+                                      console.error(e, textStatus, errorThrown);
+                                  }, {processData: false, contentType: false});
+    } else {
+        this.setStatus("renameFile", StatusState.OFFLINE, "Server is not connected! (Rename File)");
+    }
+};
+ 
+BlockPyServer.prototype.logEvent = function (event_type, category, label, message, file_path) {
+    if (this.main.model.display.readOnly()) {
+        this.setStatus("logEvent", StatusState.OFFLINE);
+        return;
+    }
+    if (this.main.model.ui.server.isEndpointConnected("logEvent")) {
+        let data = this.createServerData();
+        data["event_type"] = event_type;
+        data["category"] = category;
+        data["label"] = label;
+        data["message"] = message;
+        data["file_path"] = file_path;
+        this.setStatus("logEvent", StatusState.ACTIVE);
+        // Trigger request
+        this._postRetry(data, "logEvent", 0, () => {
+        });
+    } else {
+        this.setStatus("logEvent", StatusState.OFFLINE);
+    }
+};
+ 
+BlockPyServer.prototype.saveImage = function (directory, image) {
+    if (this.main.model.display.readOnly()) {
+        this.setStatus("saveImage", StatusState.OFFLINE);
+        return;
+    }
+    if (this.main.model.ui.server.isEndpointConnected("saveImage")) {
+        let data = this.createServerData();
+        data["directory"] = directory;
+        data["image"] = image;
+        this.setStatus("saveImage", StatusState.ACTIVE);
+        // Trigger request
+        this._postLatestRetry(data, "turtle_output", "saveImage", 0);
+    } else {
+        this.setStatus("saveImage", StatusState.OFFLINE);
+    }
+};
+ 
+BlockPyServer.prototype.updateSubmissionStatus = function(newStatus) {
+    if (this.main.model.display.readOnly()) {
+        this.setStatus("updateSubmissionStatus", StatusState.OFFLINE);
+        return;
+    }
+    if (this.main.model.ui.server.isEndpointConnected("updateSubmissionStatus")) {
+        let data = this.createServerData();
+        data["status"] = newStatus;
+        let postStatusChange = (data) => {
+            if (data.success) {
+                this.main.model.submission.submissionStatus(newStatus);
+            }
+        };
+        this._postBlocking("updateSubmissionStatus", data, 2, postStatusChange,
+                           (e, textStatus, errorThrown) => {
+                               this.main.components.dialog.ERROR_UPDATING_SUBMISSION_STATUS();
+                               console.error(e, textStatus, errorThrown);
+                           });
+    }
+};
+ 
+/**
+ * This function can be used to load files and web resources.
+ *
+ * DEPRECATED
+ */
+BlockPyServer.prototype.loadFile = function (filename, type, callback, errorCallback) {
+    var model = this.main.model;
+    var server = this;
+    if (model.ui.server.isEndpointConnected("load_file")) {
+        var data = this.createServerData();
+        data["filename"] = filename;
+        data["type"] = type;
+        this._postBlocking(this.urls.load_file, data, 5,
+                           function (response) {
+                               if (response.success) {
+                                   callback(response.data);
+                               } else {
+                                   errorCallback(response.message);
+                                   server.setStatus("loadFile", StatusState.FAILED, response.message);
+                               }
+                           },
+                           function (e, textStatus, errorThrown) {
+                               errorCallback("Server failure! Report to instructor");
+                               console.error(errorThrown);
+                           });
+    } else {
+        errorCallback("No file server available.");
+        this.setStatus("loadFile", StatusState.OFFLINE, "Server is not connected! (Load File)");
+    }
+};
+ 
+BlockPyServer.prototype.saveFile = function (filename, contents, delay) {
+    if (delay === undefined) {
+        delay = this.TIMER_DELAY;
+    }
+    let model = this.main.model;
+    if (model.display.readOnly()) {
+        this.setStatus("saveFile", StatusState.OFFLINE);
+        return;
+    }
+    if (model.ui.server.isEndpointConnected("saveFile")) {
+        let data = this.createServerData();
+        data["filename"] = filename;
+        data["code"] = contents;
+        this.setStatus("saveFile", StatusState.ACTIVE);
+        return this._postLatestRetry(data, filename, "saveFile", delay, this.startPossibleFork.bind(this));
+    } else {
+        return this.setStatus("saveFile", StatusState.OFFLINE);
+    }
+};
+ 
+BlockPyServer.prototype.startPossibleFork = function (response) {
+    if (!response.success && response.forkable) {
+        this.main.components.dialog.OFFER_FORK();
+    }
+};
+ 
+BlockPyServer.prototype.updateSubmission = function (score, correct, hiddenOverride, forceUpdate) {
+    if (this.main.model.display.readOnly()) {
+        this.setStatus("updateSubmission", StatusState.OFFLINE);
+        return;
+    }
+    let callback = this.main.model.configuration.callbacks.success;
+    if (this.main.model.ui.server.isEndpointConnected("updateSubmission")) {
+        let data = this.createServerData();
+        data["score"] = score;
+        data["correct"] = correct;
+        data["hidden_override"] = hiddenOverride;
+        data["force_update"] = forceUpdate;
+        this.main.components.pythonEditor.bm.blockEditor.getPngFromBlocks((pngData, img) => {
+            data["image"] = pngData;
+            if (img.remove) {
+                img.remove();
+            }
+            this._postRetry(data, "updateSubmission", 0,
+                            (response) => {
+                                if (response.success) {
+                                    this.setStatus("updateSubmission", StatusState.READY);
+                                } else {
+                                    this.setStatus("updateSubmission", StatusState.FAILED, response.message);
+                                }
+                                if (!hiddenOverride && correct && callback) {
+                                    callback(data["assignment_id"]);
+                                }
+                            });
+        });
+    }
+};
+ 
+BlockPyServer.prototype.openaiProxy = function (openai_data) {
+    var model = this.main.model;
+    var server = this;
+    var data = this.createServerData();
+    data["openai_data"] = openai_data;
+    return this._postBlocking(this.urls.openai_proxy, data);
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/storage.js.html b/coverage/lcov-report/src/storage.js.html new file mode 100644 index 000000000..22efc8ce8 --- /dev/null +++ b/coverage/lcov-report/src/storage.js.html @@ -0,0 +1,412 @@ + + + + + + Code coverage report for src/storage.js + + + + + + + + + +
+
+

All files / src storage.js

+
+ +
+ 70.96% + Statements + 22/31 +
+ + +
+ 25% + Branches + 1/4 +
+ + +
+ 50% + Functions + 6/12 +
+ + +
+ 70.96% + Lines + 22/31 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110  +3x +3x +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +3x +2x +2x +  +  +  +  +  +  +  +3x +1x +1x +  +  +  +  +  +  +  +3x +1x +  +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +3x +1x +  +  +1x +1x +  +  +  +  +  +  +  +  +3x +2x +  +  +  +  +  +  +  +  +  +  +3x +  +  +  + 
let LOCAL_STORAGE_REF;
+try {
+    LOCAL_STORAGE_REF = localStorage;
+    let mod = "BLOCKPY_LOCALSTORAGE_TEST";
+    LOCAL_STORAGE_REF.setItem(mod, mod);
+    LOCAL_STORAGE_REF.removeItem(mod);
+} catch(e) {
+    LOCAL_STORAGE_REF = {
+        _data       : {},
+        setItem     : function(id, val) { return this._data[id] = String(val); },
+        getItem     : function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : null; },
+        removeItem  : function(id) { return delete this._data[id]; },
+        clear       : function() { return this._data = {}; }
+    };
+}
+ 
+/**
+ * Helper object for interfacing with the LocalStorage. The LocalStorage
+ * browser API allows for offline storage. That API is very unsophisticated,
+ * and is essentially a lame key-value store. This object sits on top
+ * and provides a number of useful utilities, including rudimentarycache
+ * cache expiration.
+ *
+ * @constructor
+ * @this {LocalStorageWrapper}
+ * @param {String} namespace - A namespace to use in grouping access to localstorage. This keeps access clean and organized, while also making it possible to have multiple LocalStorage connections.
+ */
+export function LocalStorageWrapper(namespace) {
+    this.namespace = namespace;
+}
+/**
+ * A method for adding a key/value pair to LocalStorage.
+ * Note that both parameters must be strings (JSON.stringify is your friend).
+ *
+ * @param {String} key - The name of the key.
+ * @param {String} value - The value.
+ */
+LocalStorageWrapper.prototype.set =  function(key, value) {
+    LOCAL_STORAGE_REF.setItem(this.namespace+"_"+key+"_value", value);
+    LOCAL_STORAGE_REF.setItem(this.namespace+"_"+key+"_timestamp", $.now());
+};
+ 
+/**
+ * A method for removing a key from LocalStorage.
+ *
+ * @param {String} key - The name of the key to remove.
+ */
+LocalStorageWrapper.prototype.remove = function(key) {
+    LOCAL_STORAGE_REF.removeItem(this.namespace+"_"+key+"_value");
+    LOCAL_STORAGE_REF.removeItem(this.namespace+"_"+key+"_timestamp");
+};
+ 
+/**
+ * A method for retrieving the value associated with the given key.
+ *
+ * @param {String} key - The name of the key to retrieve the value for.
+ */
+LocalStorageWrapper.prototype.get = function(key) {
+    return LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_value");
+};
+ 
+/**
+ * A method for retrieving the time associated with the given key.
+ *
+ * @param {String} key - The name of the key to retrieve the time for.
+ * @returns {Integer} - The timestamp (local epoch) when the key was last set.
+ */
+LocalStorageWrapper.prototype.getTime = function(key) {
+    return parseInt(LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_timestamp"));
+};
+ 
+/**
+ * A method for retrieving the value associated with the given key.
+ * If the key does not exist, then the default value is used instead.
+ * This default will be set.
+ *
+ * @param {String} key - The name of the key to retrieve the value for.
+ * @param {String} defaultValue - The default value to use. Must be a string.
+ */
+LocalStorageWrapper.prototype.getDefault = function(key, defaultValue) {
+    Iif (this.has(key)) {
+        return this.get(key);
+    } else {
+        this.set(key, defaultValue);
+        return defaultValue;
+    }
+};
+ 
+/**
+ * A test for whether the given key is in LocalStorage.
+ *
+ * @param {String} key - The key to test existence for.
+ */
+LocalStorageWrapper.prototype.has = function(key) {
+    return LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_value") !== null;
+};
+ 
+/**
+ * A test for whether the server has the newer version. This function
+ * assumes that the server trip takes about 5 seconds. This method
+ * is largely deprecated.
+ *
+ * @param {String} key - The key to check.
+ * @param {Integer} server_time - The server's time as an epoch (in milliseconds)
+ */
+LocalStorageWrapper.prototype.is_new = function(key, server_time) {
+    var stored_time = LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_timestamp");
+    return (server_time >= stored_time+5000);
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/toolbar.js.html b/coverage/lcov-report/src/toolbar.js.html new file mode 100644 index 000000000..3edb7aa77 --- /dev/null +++ b/coverage/lcov-report/src/toolbar.js.html @@ -0,0 +1,574 @@ + + + + + + Code coverage report for src/toolbar.js + + + + + + + + + +
+
+

All files / src toolbar.js

+
+ +
+ 0% + Statements + 0/50 +
+ + +
+ 0% + Branches + 0/6 +
+ + +
+ 0% + Functions + 0/12 +
+ + +
+ 0% + Lines + 0/50 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * An object that manages the main toolbar, including the different mode buttons.
+ * This doesn't actually have many responsibilities after the initial load.
+ *
+ * @constructor
+ * @this {BlockPyToolbar}
+ * @param {Object} main - The main BlockPy instance
+ * @param {HTMLElement} tag - The HTML object this is attached to.
+ */
+function BlockPyToolbar(main, tag) {
+    this.main = main;
+    this.tag = tag;
+    
+    // Holds the HTMLElement tags for each of the toolbar items
+    this.tags = {};
+    this.tags.mode_set_text = this.tag.find(".blockpy-mode-set-text");
+    this.tags.filename_picker = this.tag.find(".blockpy-toolbar-filename-picker");
+    
+    // Actually set up the toolbar!
+    this.activateToolbar();
+}
+ 
+ 
+ 
+/**
+ * Register click events for more complex toolbar actions.
+ *
+ * Note: Pretty sure these are all deprecated!
+ */
+BlockPyToolbar.prototype.activateToolbar = function() {
+    var main = this.main;
+    this.tag.find(".blockpy-run").click(function(e) {
+        //main.components.server.logEvent('editor', 'run')
+        var backup = this;
+        main.components.feedback.clear();
+        $(this).removeClass("btn-success").addClass("btn-warning")
+        //.html("Running")
+        ;
+        //setTimeout(function() {
+        main.components.engine.on_run();
+        $(backup)
+            //.html('<span class="glyphicon glyphicon-play"></span> Run')
+            .removeClass("btn-warning")
+            .addClass("btn-success");
+        //}, 20);
+    });
+    this.tags.mode_set_text.click(function() {
+        main.components.server.logEvent("editor", "text");
+        main.model.settings.editor("Text");
+    });
+    this.tag.find(".blockpy-toolbar-reset").click(function() {
+        main.model.programs["__main__"](main.model.programs["starting_code"]());
+        //main.components.editor.updateBlocks();
+        main.components.server.logEvent("editor", "reset");
+        if (main.model.assignment.parsons()) {
+            main.components.editor.blockly.shuffle();
+        }
+    });
+    this.tag.find(".blockpy-mode-set-blocks").click(function(event) {
+        if (main.model.areBlocksUpdating()) {
+            main.components.server.logEvent("editor", "blocks");
+            main.model.settings.editor("Blocks");
+        } else {
+            event.preventDefault();
+            return false;
+        }
+    });
+    /*this.tag.find('.blockpy-mode-set-instructor').click(function() {
+        main.model.settings.editor("Instructor");
+        main.components.server.logEvent('editor', 'instructor')
+    });*/
+    this.tag.find(".blockpy-mode-set-split").click(function(event) {
+        if (main.model.areBlocksUpdating()) {
+            main.model.settings.editor("Split");
+            main.components.server.logEvent("editor", "split");
+        } else {
+            event.preventDefault();
+            return false;
+        }
+    });
+    this.tag.find(".blockpy-toolbar-import").click(function() {
+        main.components.corgis.openDialog();
+        main.components.server.logEvent("editor", "import");
+    });
+    this.tag.find(".blockpy-toolbar-history").click(function() {
+        main.components.history.openDialog();
+        main.components.server.logEvent("editor", "history");
+    });
+    var instructorDialog = this.main.model.constants.container.find(".blockpy-instructor-popup");
+    this.tag.find(".blockpy-toolbar-instructor").click(function() {
+        instructorDialog.modal({"backdrop": false}).modal("show");
+        instructorDialog.draggable({
+            "handle": ".modal-title"
+        });
+        main.components.server.logEvent("editor", "instructor");
+    });
+    this.tag.find(".blockpy-toolbar-english").click(function() {
+        main.components.english.openDialog();
+        main.components.server.logEvent("editor", "english");
+    });
+    /*
+    var uploadButton = this.tag.find(".blockpy-toolbar-upload");
+    uploadButton.change(function() {
+        var fr = new FileReader();
+        var files = uploadButton[0].files;
+        fr.onload = function(e) {
+            fn = e.target.fileName;
+            var code = e.target.result;
+            if (fn.endsWith(".ipynb")) {
+                ipynb = JSON.parse(code);
+                var makePython = function(cell) {
+                    if (cell.cell_type == "code") {
+                        return cell.source.join("\n");
+                    } else if (cell.cell_type == "markdown" ||
+                               cell.cell_type == "raw") {
+                        return "'''"+cell.source.join("\n")+"'''";
+                    }
+                };
+                var isUsable = function(cell) {
+                    if (cell.cell_type == "code") {
+                        return cell.source.length > 0 && 
+                               !cell.source[0].startsWith("%");
+                    } else {
+                        return cell.cell_type == "markdown" ||
+                               cell.cell_type == "raw";
+                    }
+                };
+                code = ipynb.cells.filter(isUsable).map(makePython).join("\n");
+            }
+            main.setCode(code);
+            main.components.server.logEvent("editor", "upload", code);
+            main.components.engine.on_run();
+        };
+        fr.fileName = files[0].name;
+        fr.readAsText(files[0]);
+        uploadButton.val("");
+    });*/
+ 
+    /*
+    var downloadButton = this.tag.find(".blockpy-toolbar-download");
+    downloadButton.click(function() {
+        var data = main.model.programs["__main__"]();
+        var filename="blockpy_"+main.model.assignment.name();
+        // Make safe
+        filename = filename.replace(/[^a-z0-9]/gi, "_").toLowerCase();
+        // Make the data download as a file
+        var blob = new Blob([data], {type: "text/plain"});
+        if(window.navigator.msSaveOrOpenBlob) {
+            window.navigator.msSaveBlob(blob, filename);
+        } else{
+            var elem = window.document.createElement("a");
+            elem.href = window.URL.createObjectURL(blob);
+            elem.download = filename;        
+            document.body.appendChild(elem);
+            elem.click();        
+            document.body.removeChild(elem);
+        }
+        main.components.server.logEvent("editor", "download");
+    });*/
+    
+    this.tag.find(".blockpy-toolbar-filename-picker label").click(function() {
+        main.model.settings.filename($(this).data("filename"));
+    });
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/trace.js.html b/coverage/lcov-report/src/trace.js.html new file mode 100644 index 000000000..90d241ecd --- /dev/null +++ b/coverage/lcov-report/src/trace.js.html @@ -0,0 +1,1114 @@ + + + + + + Code coverage report for src/trace.js + + + + + + + + + +
+
+

All files / src trace.js

+
+ +
+ 4.54% + Statements + 2/44 +
+ + +
+ 0% + Branches + 0/46 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 4.54% + Lines + 2/44 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +3444x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
export const TRACE_HTML = `
+ 
+<div class="blockpy-trace col-md-6 blockpy-panel"
+            role="region" aria-label="Trace">
+    
+    <div class="clearfix">
+        <strong>Trace: </strong>
+        
+        <!-- Feedback/Trace Visibility Control -->
+        <button type='button'
+                class='btn btn-sm btn-outline-secondary float-right blockpy-hide-trace'
+                data-bind="click: ui.secondRow.advanceState">
+            <span class='fas fa-eye'></span> Hide Trace
+        </button>
+    </div>
+ 
+    <div class="input-group mb-3 blockpy-trace-controls">
+        <div class="input-group-prepend">
+            <button type='button' class='btn btn-outline-secondary'
+                data-bind="click: ui.trace.first">
+                <span class='fas fa-step-backward'></span>
+            </button>
+            <button type='button' class='btn btn-outline-secondary'
+                data-bind="click: ui.trace.backward">
+                <span class='fas fa-backward'></span>
+            </button>
+            <span class="input-group-text">Step:</span>
+            <span class="input-group-text">
+                <span data-bind='text: execution.student.currentTraceStep'></span>
+                / <span data-bind='text: execution.student.lastStep'></span>
+            </span>
+        </div>
+        <div class="input-group-append">
+            <button type='button' class='btn btn-outline-secondary'
+                data-bind="click: ui.trace.forward">
+                <span class='fas fa-forward'></span>
+            </button>
+            <button type='button' class='btn btn-outline-secondary'
+                data-bind="click: ui.trace.last">
+                <span class='fas fa-step-forward'></span>
+            </button>
+            <span class="input-group-text">
+                <span data-bind='text: ui.trace.line'></span>
+            </span>
+        </div>
+    </div>
+    <p data-bind="text: ui.trace.ast"></p>
+    <p>Variables after this step:</p>
+    <table class='table table-sm table-striped table-bordered table-hover'>
+        <thead>
+            <tr><th>Name</th><th>Type</th><th>Value</th></tr>
+        </thead>
+        <tbody data-bind="foreach: ui.trace.data().properties">
+            <tr data-bind="visible: name != '__file__' && name != '__path__'">
+                <td data-bind="text: name"></td>
+                <td data-bind="text: type"></td>
+                <td>
+                    <code data-bind="text: value"></code>
+                    <!-- ko if: type == "List" -->
+                    
+                    <a href="" data-bind="click: //$root.viewExactValue(type, exact_value)">
+                    <span class='glyphicon glyphicon-new-window'></span>
+                    </a>
+                    <!-- /ko -->
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    
+</div>
+`;
+ 
+export const AST_DESCRIPTIONS = {
+    "Add": "An addition operator",
+    "And": "A boolean AND operator",
+    "AnnAssign": "An annotated assignment",
+    "Assert": "An assert statement",
+    "Assign": "An assignment statement",
+    "AsyncFor": "An asychronous for loop",
+    "AsyncFunctionDef": "An asychronous function definition",
+    "AsyncWith": "An asychronous with statement",
+    "Attribute": "An attribute lookup (access a field)",
+    "AugAssign": "An augmented assignment",
+    "AugLoad": "An augmented load",
+    "AugStore": "An augmented store",
+    "Await": "An await statement",
+    "BinOp": "A binary operator",
+    "BitAnd": "A bitwise AND operator",
+    "BitOr": "A bitwise OR operator",
+    "BitXor": "A bitwise XOR operator",
+    "BoolOp": "A boolean operator",
+    "Break": "A break statement",
+    "Bytes": "A literal bytes string",
+    "Call": "A function call",
+    "ClassDef": "A class definition",
+    "Compare": "A boolean comparison",
+    "Constant": "A literal value",
+    "Continue": "A continue statement",
+    "Del": "A delete statement",
+    "Delete": "A deletion",
+    "Dict": "A dictionary literal",
+    "DictComp": "A dictionary comprehension",
+    "Div": "A division operator",
+    "Ellipsis": "An ellipsis",
+    "Eq": "An equality comparison operator",
+    "ExceptHandler": "An except handler",
+    "Expr": "An expression used as a statement",
+    "Expression": "An evaluated expression",
+    "ExtSlice": "A multi-dimensional slice",
+    "FloorDiv": "An integer division operator",
+    "For": "A FOR loop",
+    "FormattedValue": "A formatted value in an f-string",
+    "FunctionDef": "A function definition",
+    "GeneratorExp": "A generator expression",
+    "Global": "A global statement",
+    "Gt": "A greater than comparison operator",
+    "GtE": "A greater than or equal to comparison operator",
+    "If": "An IF statement",
+    "IfExp": "An IF expression",
+    "Import": "An import statement",
+    "ImportFrom": "An import/from statement",
+    "In": "An IN operator",
+    "Index": "An index",
+    "Interactive": "An interactive expression",
+    "Invert": "An invert operator",
+    "Is": "An IS operator",
+    "IsNot": "An IS NOT operator",
+    "JoinedStr": "An f-string",
+    "LShift": "A left shift operator",
+    "Lambda": "A lambda expression",
+    "List": "A list literal",
+    "ListComp": "A list comprehension",
+    "Load": "A load",
+    "Lt": "A less than comparison operator",
+    "LtE": "A less than or equal to comparison operator",
+    "MatMult": "A matrix multiplication operator",
+    "Mod": "A modulo operator",
+    "Module": "A module",
+    "Mult": "A multiplication operator",
+    "Name": "A name",
+    "NameConstant": "A name constant",
+    "Nonlocal": "A nonlocal statement",
+    "Not": "A not operator",
+    "NotEq": "A not equal to comparison operator",
+    "NotIn": "A NOT IN operator",
+    "Num": "A numeric literal",
+    "Or": "A boolean OR operator",
+    "Param": "A parameter",
+    "Pass": "A pass statement",
+    "Pow": "A power operator",
+    "RShift": "A right shift operator",
+    "Raise": "A raise statement",
+    "Return": "A return statement",
+    "Set": "A set literal",
+    "SetComp": "A set comprehension",
+    "Slice": "A slice",
+    "Starred": "A starred argument",
+    "Store": "A store",
+    "Str": "A string literal",
+    "Sub": "A subtraction operator",
+    "Subscript": "A subscript",
+    "Suite": "A suite",
+    "Try": "A try statement",
+    "Tuple": "A tuple literal",
+    "TypeIgnore": " a type ignore",
+    "UAdd": "A unary addition operator",
+    "USub": "A unary subtraction operator",
+    "UnaryOp": "A unary operator",
+    "While": "A while loop",
+    "With": "A with statement",
+    "Yield": "A yield statement",
+    "YieldFrom": "A yield/from statement"
+};
+ 
+export class BlockPyTrace {
+ 
+    constructor(main, tag) {
+        this.main = main;
+        this.tag = tag;
+ 
+        this.IGNORED_GLOBALS = ["__name__", "__doc__", "__package__",
+                                "classmethod", "property", "staticmethod", "$free", "$cell"];
+ 
+        // this.trace.click(this.buildTraceTable.bind(this));
+    }
+ 
+    /**
+     * Consume a set of variables traced from the execution and parse out any
+     * global variables and modules.
+     *
+     * @param {Object} variables - a mapping of variable names to their Skupt value.
+     */
+    parseGlobals(variables) {
+        let result = [];
+        let modules = [];
+        //console.log(variables);
+        if (!this.main.model.display.traceExecution()) {
+            /*if ("$cell" in variables) {
+                variables = {...variables, ...variables.$cell};
+            }*/
+            /*if ("$free" in variables) {
+                variables = {...variables, ...variables.$free};
+            }*/
+            for (let property in variables) {
+                let value = variables[property];
+                if (this.IGNORED_GLOBALS.indexOf(property) === -1 && value !== undefined) {
+                    property = property.replace("_$rw$", "")
+                        .replace("_$rn$", "");
+                    let parsed;
+                    try {
+                        parsed = BlockPyTrace.parseValue(property, value);
+                    } catch {
+                        parsed = {"name": property, "type": "Unknown", "value": value.toString()};
+                    }
+                    if (parsed !== null) {
+                        result.push(parsed);
+                    } else if (value.constructor === Sk.builtin.module) {
+                        modules.push(value.$d.__name__.v);
+                    }
+                }
+            }
+        }
+        return {"properties": result, "modules": modules};
+    };
+ 
+    /**
+     * Convert a Skulpt value into a more easily printable object.
+     *
+     * @param {String} property
+     * @param {Object} value - the skulpt value
+     */
+    static parseValue(property, value, fullLength) {
+        if (value === undefined) {
+            return {"name": property,
+                "type": "Unknown",
+                "value": "Undefined"
+            };
+        }
+        switch (property) {
+            case "dataclass":
+                return {
+                    name: property,
+                    type: "Decorator",
+                    value: "<dataclass decorator>"
+                };
+        }
+        switch (value.constructor) {
+            case Sk.builtin.func:
+                return {"name": property,
+                    "type": "Function",
+                    "value":
+                        (value.func_code.co_varnames !== undefined ?
+                            " Parameters: "+value.func_code.co_varnames.join(", ") :
+                            " No parameters")
+                };
+            case Sk.builtin.module: return null;
+            case Sk.builtin.str:
+                if (fullLength || value.v.length <= 32) {
+                    return {"name": property,
+                        "type": "String",
+                        "value": value.$r().v
+                    };
+                } else {
+                    return {"name": property,
+                        "type": "String",
+                        "value": "["+value.sq$length()+" characters not shown]"
+                    };
+                }
+            case Sk.builtin.none:
+                return {"name": property,
+                    "type": "None",
+                    "value": "None"
+                };
+            case Sk.builtin.bool:
+                return {"name": property,
+                    "type": "Boolean",
+                    "value": value.$r().v
+                };
+            case Sk.builtin.nmber:
+                return {"name": property,
+                    "type": "int" === value.skType ? "Integer": "Float",
+                    "value": value.$r().v
+                };
+            case Sk.builtin.int_:
+                return {"name": property,
+                    "type": "Integer",
+                    "value": value.$r().v
+                };
+            case Sk.builtin.float_:
+                return {"name": property,
+                    "type": "Float",
+                    "value": value.$r().v
+                };
+            case Sk.builtin.tuple:
+                return {"name": property,
+                    "type": "Tuple",
+                    "value": value.$r().v
+                };
+            case Sk.builtin.list:
+                if (value.v.length <= 20) {
+                    return {"name": property,
+                        "type": "List",
+                        "value": value.$r().v,
+                        "exact_value": value
+                    };
+                } else {
+                    return {"name": property,
+                        "type": "List",
+                        "value": "[... "+value.v.length+" elements ...]",
+                        "exact_value": value
+                    };
+                }
+            case Sk.builtin.dict:
+                return {"name": property,
+                    "type": "Dictionary",
+                    "value": value.$r().v
+                };
+            case Number:
+                return {"name": property,
+                    "type": value % 1 === 0 ? "Integer" : "Float",
+                    "value": value
+                };
+            case String:
+                return {"name": property,
+                    "type": "String",
+                    "value": value
+                };
+            case Boolean:
+                return {"name": property,
+                    "type": "Boolean",
+                    "value": (value ? "True": "False")
+                };
+            default:
+                return {"name": property,
+                    "type": value.tp$name === undefined ? value : value.tp$name,
+                    "value": value.$r === undefined ? value : value.$r().v
+                };
+        }
+    };
+ 
+ 
+}
+ 
+// TODO: viewExactValue
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/src/utilities.js.html b/coverage/lcov-report/src/utilities.js.html new file mode 100644 index 000000000..d7c48f72d --- /dev/null +++ b/coverage/lcov-report/src/utilities.js.html @@ -0,0 +1,1123 @@ + + + + + + Code coverage report for src/utilities.js + + + + + + + + + +
+
+

All files / src utilities.js

+
+ +
+ 17.82% + Statements + 23/129 +
+ + +
+ 16.21% + Branches + 12/74 +
+ + +
+ 10% + Functions + 2/20 +
+ + +
+ 17.79% + Lines + 21/118 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347  +  +  +  +  +  +  +  +  +  +  +5x +5x +  +5x +2x +  +  +3x +11x +8x +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +6x +6x +6x +6x +  +6x +6x +6x +6x +6x +6x
/**
+ * Move an element from index in an array to a new index.
+ * O(n)
+ * Courtesy:
+ * https://stackoverflow.com/a/73877680/1718155
+ * @param arr
+ * @param oldIndex
+ * @param newIndex
+ * @returns {*}
+ */
+export function arrayMove(arr, oldIndex, newIndex) {
+    const length = arr.length;
+    const itemToMove = arr[oldIndex];
+ 
+    if (oldIndex === newIndex || oldIndex > length || newIndex > length) {
+        return arr;
+    }
+ 
+    return arr.reduce((acc, item, index) => {
+        if (index === oldIndex) {return acc;}
+        if (index === newIndex) {return oldIndex < newIndex ? [...acc, item, itemToMove] : [...acc, itemToMove, item];}
+        return [...acc, item];
+    }, []);
+}
+ 
+/**
+ * Determines if the element is in the list.
+ * @param {anything} needle - The element to look for.
+ * @param {Array} haystack - The list to search.
+ * @return {Boolean} Whether the element exists
+ */
+function arrayContains(needle, haystack) {
+    return haystack.indexOf(needle) > -1;
+}
+ 
+/**
+ * Remove duplicate values from an array, preserving order.
+ * Creates a new array, so is non-destructive.
+ * Courtesy:
+ * https://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript-and-de-duplicate-items
+ *
+ * @param {Array} array - The array to uniquify. Elements compared with ===.
+ */
+function arrayUnique(array) {
+    var a = array.concat();
+    for(var i=0; i<a.length; ++i) {
+        for(var j=i+1; j<a.length; ++j) {
+            if(a[i] === a[j]) {a.splice(j--, 1);}
+        }
+    }
+ 
+    return a;
+}
+ 
+/**
+ * A helper function for extending an array based
+ * on an "addArray" and "removeArray". Any element
+ * found in removeArray is removed from the first array
+ * and all the elements of addArray are added.
+ * Any duplicate items are removed.
+ * Creates a new array, so is non-destructive.
+ *
+ * @param {Array} array - the array to manipulate
+ * @param {Array} addArray - the elements to add to the array
+ * @param {Array} removeArray - the elements to remove from the array
+ * @return {Array} The modified array
+ */
+function expandArray(array, addArray, removeArray) {
+    var copyArray = array.filter(function(item) {
+        return removeArray.indexOf(item) === -1;
+    });
+    return arrayUnique(copyArray.concat(addArray));
+}
+ 
+/**
+ * Deeply clones a node
+ * @param {Node} node A node to clone
+ * @return {Node} A clone of the given node and all its children
+ */
+function cloneNode(node) {
+    // If the node is a text node, then re-create it rather than clone it
+    var clone = node.nodeType == 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false);
+ 
+    // Recurse     
+    var child = node.firstChild;
+    while(child) {
+        clone.appendChild(cloneNode(child));
+        child = child.nextSibling;
+    }
+     
+    return clone;
+}
+ 
+/**
+ * Indents the given string by 4 spaces. This correctly handles multi-line strings.
+ *
+ * @param {String} str - The string to be manipulated.
+ * @returns {String} The string with four spaces added at the start of every new line.
+ */
+export function indent(str) {
+    return str.replace(/^(?=.)/gm, "    ");
+}
+ 
+/**
+ * Turns spaces into underscores in the string, makes it lowercase.
+ * @param {String} str - the string to be manipulated
+ * @returns {string}
+ */
+export function slug(str) {
+    return str.replace(/\s/g, "_").toLowerCase();
+}
+ 
+/**
+ * Capitalize the first letter of a string.
+ * @param {String} s - The string to be capitalized.
+ * @returns {string}
+ */
+export function capitalize(s) {
+    if (typeof s !== "string") {
+        return "";
+    }
+    return s.charAt(0).toUpperCase() + s.slice(1);
+}
+ 
+/**
+ * Return a random integer between [`min`, `max`].
+ * 
+ * @param {number} min - The lowest possible integer.
+ * @param {number} max - The highest possible integer (inclusive).
+ * @returns {number} A random integer.
+ */
+function randomInteger(min,max) {
+    return Math.floor(Math.random()*(max-min+1)+min);
+}
+ 
+/**
+ * Encodes some text so that it can be safely written into an HTML box.
+ * This includes replacing special HTML characters (&, <, >, etc.).
+ *
+ * @param {string} str - The text to be converted.
+ * @return {string} The HTML-safe text.
+ */
+export function encodeHTML(str) {
+    return str.replace(/&/g, "&amp;")
+        .replace(/</g, "&lt;")
+        .replace(/>/g, "&gt;")
+        .replace(/"/g, "&quot;")
+        .replace(/'/g, "&apos;");
+}
+ 
+/**
+ * Shuffle the blocks in the workspace
+ */
+Iif (typeof Blockly !== "undefined") {
+    Blockly.WorkspaceSvg.prototype.shuffle = function() {
+        var metrics = this.getMetrics();
+        var width = metrics.viewWidth / 2,
+            height = metrics.viewHeight;
+        var blocks = this.getTopBlocks(false);
+        var y = 5, x = 0,
+            maximal_increase = height/blocks.length;
+        for (var i = 0; i < blocks.length; i++){
+            // Get a block
+            var block = blocks[i];
+            var properties = block.getRelativeToSurfaceXY();
+            if (i == 0) {
+                x = 5;
+            } else {
+                x = -properties.x+randomInteger(10, width);
+            }
+            block.moveBy(x, 
+                         -properties.y+y);
+            y = y + randomInteger(5, maximal_increase);
+        }
+    };
+}
+ 
+/**
+ * Move elements from one array to another based on a conditional check.
+ * https://stackoverflow.com/questions/31887967/javascript-move-objects-from-one-array-to-another-best-approach
+ */
+function moveElements(source, target, moveCheck) {
+    for (var i = 0; i < source.length; i++) {
+        var element = source[i];
+        if (moveCheck(element)) {
+            source.splice(i, 1);
+            target.push(element);
+            i--;
+        }
+    } 
+}
+ 
+ 
+export function firstDefinedValue() {
+    for (var i = 0; i < arguments.length; i++) {
+        if (arguments[i] != null) {
+            return arguments[i];
+        }
+    }
+    return undefined;
+}
+ 
+/**
+ * This function checks if the given object is one of the Sk.builtin objects
+ * TODO: make this so we don't have to explicitly put out every option
+ *          one possible thing we could do is get a string version of the 
+ *          of the constructor and look for the substring "return new Sk.builtin"
+ *          But I don't know how reliable that is.  Rather, it's kind of hackish.
+ *          Should tehoretically belong in Sk.ffi
+ * @param {object} obj - the object to be examined
+ * @return {boolean} true if the object is one of the Sk.builtin types
+**/
+function isSkBuiltin(obj){
+    return (obj instanceof Sk.builtin.dict) ||
+        (obj instanceof Sk.builtin.list) ||
+        (obj instanceof Sk.builtin.tuple) ||
+        (obj instanceof Sk.builtin.bool) ||
+        (obj instanceof Sk.builtin.int_) ||
+        (obj instanceof Sk.builtin.float_) ||
+        (obj instanceof Sk.builtin.str) ||
+        (obj instanceof Sk.builtin.lng);
+    //var cons_str = obj.constructor + "";
+    //return cons_str.indexOf("return new Sk.builtin") !== -1;
+}
+ 
+function isAstNode(obj){
+    return obj instanceof Object && "_astname" in obj;
+}
+ 
+const DEFAULT_SECTION_PATTERN = /^(##### Part (.+))$/gm;
+ 
+/**
+ * Finds the given Part ID using the pattern `#### Part whatever` (on its own separate line). If the pattern
+ * is not found, then null is returned. If no pattern is given (empty string or null), then the original text
+ * is returned without modifications.
+ * @param text
+ * @param partId
+ * @returns {null|*}
+ */
+export function extractPart(text, partId) {
+    if (partId === "" || partId == null) {
+        return text;
+    }
+    const parts = text.split(DEFAULT_SECTION_PATTERN);
+    for (let i=2; i < parts.length; i+=3) {
+        /* // Unnecessary assertion, but not bad to think about
+        if (!parts[i-1].startsWith("#### Part ")) {
+            throw "Error: part format is broken!";
+        }*/
+        if (parts[i] === partId) {
+            let body = parts[i+1];
+            if (body && body[0] === "\n") {
+                body = body.slice(1);
+            }
+            if (i !== parts.length - 3 && body && body.slice(-1) === "\n") {
+                body = body.slice(0, -1);
+            }
+            return body;
+        }
+    }
+    return null;
+}
+ 
+/**
+ * Should theoretically belong in Sk.ffi, but I put it here instead to not mess up the skulpt files
+ * like the normal Sk.ffi.remapToPy, it doesn't work for functions or more complex objects, but it handles
+ * cases where the types in obj are a mix of python SIMPLE objects and SIMPLE normal javascript objects
+ * @param {object} obj - the object to be converted
+ * @return {Sk.builtin.???} - returns the corresponding python object, dropping all functions and things it can't convert
+**/
+function mixedRemapToPy(obj){
+    var k;
+    var kvs;
+    var i;
+    var arr;
+    //@TODO: should theoretically check if the object is a pyhon dict or array with js objects
+    if (isSkBuiltin(obj)){
+        //object is already python ready
+        return obj;
+    } else if (Object.prototype.toString.call(obj) === "[object Array]") {
+        //object is actually a javascript array
+        arr = [];
+        for (i = 0; i < obj.length; ++i) {
+            //for each object, convert it to a python object if it isn't one already
+            var subval = obj[i];
+            if(!isSkBuiltin(subval)){
+                arr.push(mixedRemapToPy(subval));
+            }else{
+                arr.push(subval);
+            }
+        }
+        return new Sk.builtin.list(arr);
+    } else if (obj === null) {//null object
+        return Sk.builtin.none.none$;
+    } else if (typeof obj === "object") {
+        if(!isSkBuiltin(obj)){
+            //assuming it's a standard dictionary
+            kvs = [];//Sk.builtin.dict uses an array of key-value,key-value...
+            for (k in obj) {
+                //convert the key if it needs to be converted
+                kvs.push(mixedRemapToPy(k));
+                //covert corresponding value if it needs to be converted
+                kvs.push(mixedRemapToPy(obj[k]));
+            }
+            //create the new dictionary
+            return new Sk.builtin.dict(kvs);
+        }else{
+            return obj;
+        }
+    } else if (typeof obj === "string") {
+        return new Sk.builtin.str(obj);
+    } else if (typeof obj === "number") {
+        return Sk.builtin.assk$(obj);
+    } else if (typeof obj === "boolean") {
+        return new Sk.builtin.bool(obj);
+    } else if(typeof obj === "function") {
+        return new Sk.builtin.str(obj.name);
+    }
+}
+ 
+ 
+export function getCurrentTime() {
+    const today = new Date();
+    let h = Math.floor(today.getHours()%12);
+    let m = today.getMinutes();
+    //let s = today.getSeconds();
+    if (m < 10) {m = "0" + m;}
+    //if (s < 10) {s = "0" + s;}
+    let p = "am";
+    if (today.getHours()>=12) {
+        p = "pm";
+    }
+    return `${h}:${m}${p}`;
+}
+ 
+export const pyInt = Sk.builtin.int_;
+export const pyNone = Sk.builtin.none.none$;
+export const pyStr = Sk.builtin.str;
+export const pyTuple = Sk.builtin.tuple;
+export const pyCallOrSuspend = Sk.misceval.callsimOrSuspendArray;
+ 
+export const { isTrue, richCompareBool, chain } = Sk.misceval;
+export const { typeName, setUpModuleMethods, buildNativeClass } = Sk.abstr;
+export const { TypeError, ValueError, KeyError, IndexError, checkString, asnum$ } = Sk.builtin;
+export const { remapToPy, remapToJs } = Sk.ffi;
+export const { getAttr, setAttr } = Sk.generic;
+export const chainOrSuspend = chain;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 000000000..6e040291d --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,6030 @@ +TN: +SF:src/blockpy.js +FN:57,(anonymous_0) +FN:70,(anonymous_1) +FN:86,(anonymous_2) +FN:108,(anonymous_3) +FN:422,(anonymous_4) +FN:428,(anonymous_5) +FN:432,(anonymous_6) +FN:436,(anonymous_7) +FN:440,(anonymous_8) +FN:445,(anonymous_9) +FN:467,(anonymous_10) +FN:515,(anonymous_11) +FN:519,(anonymous_12) +FN:522,(anonymous_13) +FN:526,(anonymous_14) +FN:529,(anonymous_15) +FN:534,(anonymous_16) +FN:539,(anonymous_17) +FN:542,(anonymous_18) +FN:545,(anonymous_19) +FN:548,(anonymous_20) +FN:551,(anonymous_21) +FN:559,(anonymous_22) +FN:563,(anonymous_23) +FN:578,(anonymous_24) +FN:589,(anonymous_25) +FN:593,(anonymous_26) +FN:596,(anonymous_27) +FN:599,(anonymous_28) +FN:602,(anonymous_29) +FN:605,(anonymous_30) +FN:622,(anonymous_31) +FN:630,(anonymous_32) +FN:634,(anonymous_33) +FN:637,(anonymous_34) +FN:640,(anonymous_35) +FN:643,(anonymous_36) +FN:646,(anonymous_37) +FN:649,(anonymous_38) +FN:653,(anonymous_39) +FN:665,(anonymous_40) +FN:670,(anonymous_41) +FN:679,(anonymous_42) +FN:685,(anonymous_43) +FN:691,(anonymous_44) +FN:721,(anonymous_45) +FN:751,(anonymous_46) +FN:756,(anonymous_47) +FN:759,(anonymous_48) +FN:764,(anonymous_49) +FN:769,(anonymous_50) +FN:775,(anonymous_51) +FN:782,(anonymous_52) +FN:785,(anonymous_53) +FN:792,(anonymous_54) +FN:795,(anonymous_55) +FN:810,(anonymous_56) +FN:826,(anonymous_57) +FN:845,(anonymous_58) +FN:848,(anonymous_59) +FN:852,(anonymous_60) +FN:856,(anonymous_61) +FN:859,(anonymous_62) +FN:877,(anonymous_63) +FN:880,(anonymous_64) +FN:883,(anonymous_65) +FN:887,(anonymous_66) +FN:893,(anonymous_67) +FN:895,(anonymous_68) +FN:897,(anonymous_69) +FN:899,(anonymous_70) +FN:901,(anonymous_71) +FN:908,(anonymous_72) +FN:952,(anonymous_73) +FN:955,(anonymous_74) +FN:958,(anonymous_75) +FN:973,(anonymous_76) +FN:996,(anonymous_77) +FN:999,(anonymous_78) +FN:1003,(anonymous_79) +FN:1009,(anonymous_80) +FN:1013,(anonymous_81) +FN:1019,(anonymous_82) +FN:1021,(anonymous_83) +FN:1024,(anonymous_84) +FN:1029,(anonymous_85) +FN:1033,(anonymous_86) +FN:1037,(anonymous_87) +FN:1044,(anonymous_88) +FN:1046,(anonymous_89) +FN:1051,(anonymous_90) +FN:1052,(anonymous_91) +FN:1062,(anonymous_92) +FN:1070,(anonymous_93) +FN:1071,(anonymous_94) +FN:1072,(anonymous_95) +FN:1073,(anonymous_96) +FN:1074,(anonymous_97) +FN:1078,(anonymous_98) +FN:1079,(anonymous_99) +FN:1080,(anonymous_100) +FN:1081,(anonymous_101) +FN:1082,(anonymous_102) +FN:1083,(anonymous_103) +FN:1086,(anonymous_104) +FN:1089,(anonymous_105) +FN:1096,(anonymous_106) +FN:1099,(anonymous_107) +FN:1102,(anonymous_108) +FN:1112,(anonymous_109) +FN:1115,(anonymous_110) +FN:1125,(anonymous_111) +FN:1129,(anonymous_112) +FN:1132,(anonymous_113) +FN:1136,(anonymous_114) +FN:1150,(anonymous_115) +FN:1158,(anonymous_116) +FN:1166,(anonymous_117) +FN:1177,(anonymous_118) +FN:1185,(anonymous_119) +FN:1196,(anonymous_120) +FN:1200,(anonymous_121) +FN:1203,(anonymous_122) +FN:1207,(anonymous_123) +FN:1227,(anonymous_124) +FN:1232,(anonymous_125) +FN:1236,(anonymous_126) +FN:1237,(anonymous_127) +FN:1243,(anonymous_128) +FN:1248,(anonymous_129) +FN:1262,(anonymous_130) +FN:1266,(anonymous_131) +FN:1272,(anonymous_132) +FN:1277,(anonymous_133) +FNF:134 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,(anonymous_43) +FNDA:0,(anonymous_44) +FNDA:0,(anonymous_45) +FNDA:0,(anonymous_46) +FNDA:0,(anonymous_47) +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +FNDA:0,(anonymous_54) +FNDA:0,(anonymous_55) +FNDA:0,(anonymous_56) +FNDA:0,(anonymous_57) +FNDA:0,(anonymous_58) +FNDA:0,(anonymous_59) +FNDA:0,(anonymous_60) +FNDA:0,(anonymous_61) +FNDA:0,(anonymous_62) +FNDA:0,(anonymous_63) +FNDA:0,(anonymous_64) +FNDA:0,(anonymous_65) +FNDA:0,(anonymous_66) +FNDA:0,(anonymous_67) +FNDA:0,(anonymous_68) +FNDA:0,(anonymous_69) +FNDA:0,(anonymous_70) +FNDA:0,(anonymous_71) +FNDA:0,(anonymous_72) +FNDA:0,(anonymous_73) +FNDA:0,(anonymous_74) +FNDA:0,(anonymous_75) +FNDA:0,(anonymous_76) +FNDA:0,(anonymous_77) +FNDA:0,(anonymous_78) +FNDA:0,(anonymous_79) +FNDA:0,(anonymous_80) +FNDA:0,(anonymous_81) +FNDA:0,(anonymous_82) +FNDA:0,(anonymous_83) +FNDA:0,(anonymous_84) +FNDA:0,(anonymous_85) +FNDA:0,(anonymous_86) +FNDA:0,(anonymous_87) +FNDA:0,(anonymous_88) +FNDA:0,(anonymous_89) +FNDA:0,(anonymous_90) +FNDA:0,(anonymous_91) +FNDA:0,(anonymous_92) +FNDA:0,(anonymous_93) +FNDA:0,(anonymous_94) +FNDA:0,(anonymous_95) +FNDA:0,(anonymous_96) +FNDA:0,(anonymous_97) +FNDA:0,(anonymous_98) +FNDA:0,(anonymous_99) +FNDA:0,(anonymous_100) +FNDA:0,(anonymous_101) +FNDA:0,(anonymous_102) +FNDA:0,(anonymous_103) +FNDA:0,(anonymous_104) +FNDA:0,(anonymous_105) +FNDA:0,(anonymous_106) +FNDA:0,(anonymous_107) +FNDA:0,(anonymous_108) +FNDA:0,(anonymous_109) +FNDA:0,(anonymous_110) +FNDA:0,(anonymous_111) +FNDA:0,(anonymous_112) +FNDA:0,(anonymous_113) +FNDA:0,(anonymous_114) +FNDA:0,(anonymous_115) +FNDA:0,(anonymous_116) +FNDA:0,(anonymous_117) +FNDA:0,(anonymous_118) +FNDA:0,(anonymous_119) +FNDA:0,(anonymous_120) +FNDA:0,(anonymous_121) +FNDA:0,(anonymous_122) +FNDA:0,(anonymous_123) +FNDA:0,(anonymous_124) +FNDA:0,(anonymous_125) +FNDA:0,(anonymous_126) +FNDA:0,(anonymous_127) +FNDA:0,(anonymous_128) +FNDA:0,(anonymous_129) +FNDA:0,(anonymous_130) +FNDA:0,(anonymous_131) +FNDA:0,(anonymous_132) +FNDA:0,(anonymous_133) +DA:40,1 +DA:58,0 +DA:59,0 +DA:60,0 +DA:62,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:87,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:92,0 +DA:110,0 +DA:111,0 +DA:114,0 +DA:423,0 +DA:424,0 +DA:425,0 +DA:429,0 +DA:441,0 +DA:442,0 +DA:446,0 +DA:448,0 +DA:449,0 +DA:452,0 +DA:453,0 +DA:454,0 +DA:455,0 +DA:456,0 +DA:457,0 +DA:458,0 +DA:459,0 +DA:460,0 +DA:461,0 +DA:462,0 +DA:463,0 +DA:464,0 +DA:468,0 +DA:469,0 +DA:470,0 +DA:471,0 +DA:472,0 +DA:473,0 +DA:474,0 +DA:475,0 +DA:476,0 +DA:477,0 +DA:478,0 +DA:479,0 +DA:480,0 +DA:481,0 +DA:482,0 +DA:483,0 +DA:484,0 +DA:485,0 +DA:486,0 +DA:487,0 +DA:488,0 +DA:489,0 +DA:490,0 +DA:492,0 +DA:493,0 +DA:494,0 +DA:496,0 +DA:497,0 +DA:498,0 +DA:499,0 +DA:500,0 +DA:501,0 +DA:502,0 +DA:503,0 +DA:504,0 +DA:505,0 +DA:506,0 +DA:507,0 +DA:508,0 +DA:509,0 +DA:510,0 +DA:512,0 +DA:516,0 +DA:517,0 +DA:518,0 +DA:520,0 +DA:523,0 +DA:527,0 +DA:530,0 +DA:535,0 +DA:540,0 +DA:543,0 +DA:546,0 +DA:549,0 +DA:552,0 +DA:553,0 +DA:555,0 +DA:557,0 +DA:560,0 +DA:564,0 +DA:565,0 +DA:566,0 +DA:567,0 +DA:568,0 +DA:569,0 +DA:571,0 +DA:572,0 +DA:574,0 +DA:579,0 +DA:580,0 +DA:581,0 +DA:582,0 +DA:583,0 +DA:584,0 +DA:586,0 +DA:590,0 +DA:594,0 +DA:597,0 +DA:600,0 +DA:603,0 +DA:606,0 +DA:614,0 +DA:617,0 +DA:619,0 +DA:620,0 +DA:623,0 +DA:631,0 +DA:635,0 +DA:638,0 +DA:641,0 +DA:644,0 +DA:647,0 +DA:650,0 +DA:654,0 +DA:655,0 +DA:656,0 +DA:657,0 +DA:658,0 +DA:659,0 +DA:660,0 +DA:662,0 +DA:666,0 +DA:667,0 +DA:668,0 +DA:671,0 +DA:672,0 +DA:673,0 +DA:674,0 +DA:680,0 +DA:686,0 +DA:692,0 +DA:693,0 +DA:695,0 +DA:698,0 +DA:700,0 +DA:702,0 +DA:704,0 +DA:706,0 +DA:709,0 +DA:712,0 +DA:714,0 +DA:716,0 +DA:718,0 +DA:722,0 +DA:723,0 +DA:725,0 +DA:728,0 +DA:730,0 +DA:732,0 +DA:734,0 +DA:736,0 +DA:739,0 +DA:742,0 +DA:744,0 +DA:746,0 +DA:748,0 +DA:752,0 +DA:753,0 +DA:754,0 +DA:757,0 +DA:760,0 +DA:761,0 +DA:762,0 +DA:765,0 +DA:769,0 +DA:770,0 +DA:771,0 +DA:773,0 +DA:774,0 +DA:775,0 +DA:776,0 +DA:777,0 +DA:778,0 +DA:783,0 +DA:786,0 +DA:787,0 +DA:793,0 +DA:796,0 +DA:797,0 +DA:799,0 +DA:800,0 +DA:801,0 +DA:802,0 +DA:803,0 +DA:804,0 +DA:805,0 +DA:807,0 +DA:811,0 +DA:812,0 +DA:813,0 +DA:814,0 +DA:815,0 +DA:817,0 +DA:818,0 +DA:819,0 +DA:820,0 +DA:823,0 +DA:827,0 +DA:828,0 +DA:829,0 +DA:830,0 +DA:831,0 +DA:833,0 +DA:835,0 +DA:837,0 +DA:838,0 +DA:840,0 +DA:842,0 +DA:846,0 +DA:849,0 +DA:850,0 +DA:853,0 +DA:854,0 +DA:857,0 +DA:860,0 +DA:861,0 +DA:862,0 +DA:863,0 +DA:864,0 +DA:866,0 +DA:868,0 +DA:870,0 +DA:872,0 +DA:878,0 +DA:881,0 +DA:884,0 +DA:888,0 +DA:889,0 +DA:890,0 +DA:891,0 +DA:892,0 +DA:893,0 +DA:894,0 +DA:895,0 +DA:896,0 +DA:897,0 +DA:898,0 +DA:899,0 +DA:900,0 +DA:901,0 +DA:902,0 +DA:903,0 +DA:904,0 +DA:905,0 +DA:909,0 +DA:915,0 +DA:916,0 +DA:918,0 +DA:919,0 +DA:921,0 +DA:922,0 +DA:923,0 +DA:924,0 +DA:926,0 +DA:927,0 +DA:928,0 +DA:930,0 +DA:931,0 +DA:932,0 +DA:935,0 +DA:936,0 +DA:937,0 +DA:939,0 +DA:940,0 +DA:942,0 +DA:943,0 +DA:945,0 +DA:946,0 +DA:950,0 +DA:953,0 +DA:956,0 +DA:959,0 +DA:960,0 +DA:961,0 +DA:962,0 +DA:963,0 +DA:965,0 +DA:966,0 +DA:968,0 +DA:974,0 +DA:975,0 +DA:977,0 +DA:978,0 +DA:980,0 +DA:981,0 +DA:983,0 +DA:984,0 +DA:986,0 +DA:987,0 +DA:989,0 +DA:990,0 +DA:992,0 +DA:997,0 +DA:1000,0 +DA:1004,0 +DA:1010,0 +DA:1011,0 +DA:1012,0 +DA:1014,0 +DA:1015,0 +DA:1020,0 +DA:1022,0 +DA:1025,0 +DA:1030,0 +DA:1034,0 +DA:1035,0 +DA:1038,0 +DA:1039,0 +DA:1040,0 +DA:1041,0 +DA:1045,0 +DA:1047,0 +DA:1048,0 +DA:1049,0 +DA:1052,0 +DA:1053,0 +DA:1054,0 +DA:1055,0 +DA:1056,0 +DA:1058,0 +DA:1063,0 +DA:1064,0 +DA:1066,0 +DA:1070,0 +DA:1071,0 +DA:1072,0 +DA:1073,0 +DA:1074,0 +DA:1078,0 +DA:1079,0 +DA:1080,0 +DA:1081,0 +DA:1082,0 +DA:1083,0 +DA:1086,0 +DA:1090,0 +DA:1091,0 +DA:1097,0 +DA:1100,0 +DA:1103,0 +DA:1104,0 +DA:1105,0 +DA:1107,0 +DA:1109,0 +DA:1113,0 +DA:1116,0 +DA:1117,0 +DA:1118,0 +DA:1120,0 +DA:1122,0 +DA:1126,0 +DA:1130,0 +DA:1133,0 +DA:1137,0 +DA:1152,0 +DA:1154,0 +DA:1156,0 +DA:1157,0 +DA:1158,0 +DA:1159,0 +DA:1160,0 +DA:1162,0 +DA:1163,0 +DA:1164,0 +DA:1167,0 +DA:1168,0 +DA:1171,0 +DA:1178,0 +DA:1182,0 +DA:1187,0 +DA:1197,0 +DA:1201,0 +DA:1202,0 +DA:1203,0 +DA:1208,0 +DA:1209,0 +DA:1210,0 +DA:1213,0 +DA:1214,0 +DA:1215,0 +DA:1216,0 +DA:1217,0 +DA:1218,0 +DA:1219,0 +DA:1221,0 +DA:1222,0 +DA:1223,0 +DA:1224,0 +DA:1228,0 +DA:1233,0 +DA:1237,0 +DA:1238,0 +DA:1241,0 +DA:1242,0 +DA:1243,0 +DA:1244,0 +DA:1245,0 +DA:1248,0 +DA:1249,0 +DA:1250,0 +DA:1251,0 +DA:1252,0 +DA:1255,0 +DA:1256,0 +DA:1263,0 +DA:1267,0 +DA:1269,0 +DA:1273,0 +DA:1274,0 +LF:432 +LH:1 +BRDA:59,0,0,0 +BRDA:59,0,1,0 +BRDA:87,1,0,0 +BRDA:87,1,1,0 +BRDA:89,2,0,0 +BRDA:89,2,1,0 +BRDA:144,3,0,0 +BRDA:144,3,1,0 +BRDA:145,4,0,0 +BRDA:145,4,1,0 +BRDA:146,5,0,0 +BRDA:146,5,1,0 +BRDA:147,6,0,0 +BRDA:147,6,1,0 +BRDA:148,7,0,0 +BRDA:148,7,1,0 +BRDA:165,8,0,0 +BRDA:165,8,1,0 +BRDA:165,9,0,0 +BRDA:165,9,1,0 +BRDA:281,10,0,0 +BRDA:281,10,1,0 +BRDA:407,11,0,0 +BRDA:407,11,1,0 +BRDA:413,12,0,0 +BRDA:413,12,1,0 +BRDA:414,13,0,0 +BRDA:414,13,1,0 +BRDA:446,14,0,0 +BRDA:446,14,1,0 +BRDA:454,15,0,0 +BRDA:454,15,1,0 +BRDA:460,16,0,0 +BRDA:460,16,1,0 +BRDA:461,17,0,0 +BRDA:461,17,1,0 +BRDA:488,18,0,0 +BRDA:488,18,1,0 +BRDA:489,19,0,0 +BRDA:489,19,1,0 +BRDA:492,20,0,0 +BRDA:492,20,1,0 +BRDA:493,21,0,0 +BRDA:493,21,1,0 +BRDA:520,22,0,0 +BRDA:520,22,1,0 +BRDA:523,23,0,0 +BRDA:523,23,1,0 +BRDA:530,24,0,0 +BRDA:530,24,1,0 +BRDA:540,25,0,0 +BRDA:540,25,1,0 +BRDA:543,26,0,0 +BRDA:543,26,1,0 +BRDA:552,27,0,0 +BRDA:552,27,1,0 +BRDA:560,28,0,0 +BRDA:560,28,1,0 +BRDA:560,28,2,0 +BRDA:564,29,0,0 +BRDA:564,29,1,0 +BRDA:565,30,0,0 +BRDA:565,30,1,0 +BRDA:566,31,0,0 +BRDA:566,31,1,0 +BRDA:568,32,0,0 +BRDA:568,32,1,0 +BRDA:571,33,0,0 +BRDA:571,33,1,0 +BRDA:571,34,0,0 +BRDA:571,34,1,0 +BRDA:579,35,0,0 +BRDA:579,35,1,0 +BRDA:581,36,0,0 +BRDA:581,36,1,0 +BRDA:583,37,0,0 +BRDA:583,37,1,0 +BRDA:590,38,0,0 +BRDA:590,38,1,0 +BRDA:590,38,2,0 +BRDA:620,39,0,0 +BRDA:620,39,1,0 +BRDA:631,40,0,0 +BRDA:631,40,1,0 +BRDA:631,41,0,0 +BRDA:631,41,1,0 +BRDA:635,42,0,0 +BRDA:635,42,1,0 +BRDA:647,43,0,0 +BRDA:647,43,1,0 +BRDA:650,44,0,0 +BRDA:650,44,1,0 +BRDA:655,45,0,0 +BRDA:655,45,1,0 +BRDA:657,46,0,0 +BRDA:657,46,1,0 +BRDA:659,47,0,0 +BRDA:659,47,1,0 +BRDA:672,48,0,0 +BRDA:672,48,1,0 +BRDA:680,49,0,0 +BRDA:680,49,1,0 +BRDA:680,50,0,0 +BRDA:680,50,1,0 +BRDA:680,50,2,0 +BRDA:686,51,0,0 +BRDA:686,51,1,0 +BRDA:686,51,2,0 +BRDA:692,52,0,0 +BRDA:692,52,1,0 +BRDA:695,53,0,0 +BRDA:695,53,1,0 +BRDA:695,53,2,0 +BRDA:695,53,3,0 +BRDA:695,53,4,0 +BRDA:695,53,5,0 +BRDA:695,53,6,0 +BRDA:695,53,7,0 +BRDA:695,53,8,0 +BRDA:695,53,9,0 +BRDA:695,53,10,0 +BRDA:695,53,11,0 +BRDA:695,53,12,0 +BRDA:722,54,0,0 +BRDA:722,54,1,0 +BRDA:725,55,0,0 +BRDA:725,55,1,0 +BRDA:725,55,2,0 +BRDA:725,55,3,0 +BRDA:725,55,4,0 +BRDA:725,55,5,0 +BRDA:725,55,6,0 +BRDA:725,55,7,0 +BRDA:725,55,8,0 +BRDA:725,55,9,0 +BRDA:725,55,10,0 +BRDA:725,55,11,0 +BRDA:725,55,12,0 +BRDA:764,56,0,0 +BRDA:777,57,0,0 +BRDA:777,57,1,0 +BRDA:783,58,0,0 +BRDA:783,58,1,0 +BRDA:786,59,0,0 +BRDA:786,59,1,0 +BRDA:786,60,0,0 +BRDA:786,60,1,0 +BRDA:796,61,0,0 +BRDA:796,61,1,0 +BRDA:802,62,0,0 +BRDA:802,62,1,0 +BRDA:802,63,0,0 +BRDA:802,63,1,0 +BRDA:804,64,0,0 +BRDA:804,64,1,0 +BRDA:814,65,0,0 +BRDA:814,65,1,0 +BRDA:814,66,0,0 +BRDA:814,66,1,0 +BRDA:817,67,0,0 +BRDA:817,67,1,0 +BRDA:819,68,0,0 +BRDA:819,68,1,0 +BRDA:830,69,0,0 +BRDA:830,69,1,0 +BRDA:833,70,0,0 +BRDA:833,70,1,0 +BRDA:833,70,2,0 +BRDA:837,71,0,0 +BRDA:837,71,1,0 +BRDA:863,72,0,0 +BRDA:863,72,1,0 +BRDA:866,73,0,0 +BRDA:866,73,1,0 +BRDA:866,73,2,0 +BRDA:878,74,0,0 +BRDA:878,74,1,0 +BRDA:878,74,2,0 +BRDA:881,75,0,0 +BRDA:881,75,1,0 +BRDA:884,76,0,0 +BRDA:884,76,1,0 +BRDA:884,77,0,0 +BRDA:884,77,1,0 +BRDA:888,78,0,0 +BRDA:888,78,1,0 +BRDA:888,78,2,0 +BRDA:888,78,3,0 +BRDA:888,78,4,0 +BRDA:888,78,5,0 +BRDA:888,78,6,0 +BRDA:888,78,7,0 +BRDA:888,78,8,0 +BRDA:888,78,9,0 +BRDA:888,78,10,0 +BRDA:888,78,11,0 +BRDA:909,79,0,0 +BRDA:909,79,1,0 +BRDA:909,79,2,0 +BRDA:909,79,3,0 +BRDA:909,79,4,0 +BRDA:909,79,5,0 +BRDA:909,79,6,0 +BRDA:909,79,7,0 +BRDA:909,79,8,0 +BRDA:909,79,9,0 +BRDA:909,79,10,0 +BRDA:909,79,11,0 +BRDA:909,79,12,0 +BRDA:909,79,13,0 +BRDA:962,80,0,0 +BRDA:962,80,1,0 +BRDA:962,81,0,0 +BRDA:962,81,1,0 +BRDA:962,81,2,0 +BRDA:965,82,0,0 +BRDA:965,82,1,0 +BRDA:965,83,0,0 +BRDA:965,83,1,0 +BRDA:965,83,2,0 +BRDA:974,84,0,0 +BRDA:974,84,1,0 +BRDA:977,85,0,0 +BRDA:977,85,1,0 +BRDA:980,86,0,0 +BRDA:980,86,1,0 +BRDA:983,87,0,0 +BRDA:983,87,1,0 +BRDA:986,88,0,0 +BRDA:986,88,1,0 +BRDA:989,89,0,0 +BRDA:989,89,1,0 +BRDA:1000,90,0,0 +BRDA:1000,90,1,0 +BRDA:1000,91,0,0 +BRDA:1000,91,1,0 +BRDA:1004,92,0,0 +BRDA:1004,92,1,0 +BRDA:1004,93,0,0 +BRDA:1004,93,1,0 +BRDA:1004,93,2,0 +BRDA:1007,94,0,0 +BRDA:1007,94,1,0 +BRDA:1022,95,0,0 +BRDA:1022,95,1,0 +BRDA:1022,95,2,0 +BRDA:1025,96,0,0 +BRDA:1025,96,1,0 +BRDA:1025,96,2,0 +BRDA:1040,97,0,0 +BRDA:1040,97,1,0 +BRDA:1053,98,0,0 +BRDA:1053,98,1,0 +BRDA:1063,99,0,0 +BRDA:1063,99,1,0 +BRDA:1083,100,0,0 +BRDA:1083,100,1,0 +BRDA:1083,100,2,0 +BRDA:1100,101,0,0 +BRDA:1100,101,1,0 +BRDA:1103,102,0,0 +BRDA:1103,102,1,0 +BRDA:1104,103,0,0 +BRDA:1104,103,1,0 +BRDA:1104,104,0,0 +BRDA:1104,104,1,0 +BRDA:1113,105,0,0 +BRDA:1113,105,1,0 +BRDA:1116,106,0,0 +BRDA:1116,106,1,0 +BRDA:1117,107,0,0 +BRDA:1117,107,1,0 +BRDA:1117,108,0,0 +BRDA:1117,108,1,0 +BRDA:1133,109,0,0 +BRDA:1133,109,1,0 +BRDA:1133,109,2,0 +BRDA:1137,110,0,0 +BRDA:1137,110,1,0 +BRDA:1137,110,2,0 +BRDA:1137,110,3,0 +BRDA:1137,110,4,0 +BRDA:1137,110,5,0 +BRDA:1137,110,6,0 +BRDA:1137,110,7,0 +BRDA:1137,110,8,0 +BRDA:1137,110,9,0 +BRDA:1137,110,10,0 +BRDA:1137,110,11,0 +BRDA:1178,111,0,0 +BRDA:1178,111,1,0 +BRDA:1203,112,0,0 +BRDA:1203,112,1,0 +BRDA:1244,113,0,0 +BRDA:1244,113,1,0 +BRDA:1249,114,0,0 +BRDA:1249,114,1,0 +BRDA:1250,115,0,0 +BRDA:1250,115,1,0 +BRDA:1255,116,0,0 +BRDA:1255,116,1,0 +BRF:301 +BRH:0 +end_of_record +TN: +SF:src/console.js +FN:65,(anonymous_0) +FN:120,(anonymous_1) +FN:127,(anonymous_2) +FN:134,(anonymous_3) +FN:139,(anonymous_4) +FN:152,(anonymous_5) +FN:159,(anonymous_6) +FN:167,(anonymous_7) +FN:171,(anonymous_8) +FN:177,(anonymous_9) +FN:188,(anonymous_10) +FN:197,(anonymous_11) +FN:201,(anonymous_12) +FN:202,(anonymous_13) +FN:206,(anonymous_14) +FN:208,(anonymous_15) +FN:214,(anonymous_16) +FN:219,(anonymous_17) +FN:230,(anonymous_18) +FN:235,(anonymous_19) +FN:245,(anonymous_20) +FN:249,(anonymous_21) +FN:265,(anonymous_22) +FN:269,(anonymous_23) +FN:281,(anonymous_24) +FN:290,(anonymous_25) +FN:319,(anonymous_26) +FN:321,(anonymous_27) +FN:325,(anonymous_28) +FN:336,(anonymous_29) +FN:347,(anonymous_30) +FN:359,(anonymous_31) +FN:365,(anonymous_32) +FN:368,(anonymous_33) +FN:374,(anonymous_34) +FN:389,(anonymous_35) +FN:411,(anonymous_36) +FN:435,(anonymous_37) +FN:439,(anonymous_38) +FN:454,(anonymous_39) +FN:467,(anonymous_40) +FN:484,(anonymous_41) +FN:488,(anonymous_42) +FN:492,(anonymous_43) +FN:496,(anonymous_44) +FN:507,(anonymous_45) +FN:508,(anonymous_46) +FN:521,(anonymous_47) +FN:550,(anonymous_48) +FN:556,(anonymous_49) +FN:564,(anonymous_50) +FN:572,(anonymous_51) +FN:579,(anonymous_52) +FN:590,(anonymous_53) +FN:596,(anonymous_54) +FN:601,(anonymous_55) +FN:610,(anonymous_56) +FNF:57 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,(anonymous_43) +FNDA:0,(anonymous_44) +FNDA:0,(anonymous_45) +FNDA:0,(anonymous_46) +FNDA:0,(anonymous_47) +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +FNDA:0,(anonymous_54) +FNDA:0,(anonymous_55) +FNDA:0,(anonymous_56) +DA:7,4 +DA:16,4 +DA:22,4 +DA:45,4 +DA:71,0 +DA:76,0 +DA:81,0 +DA:86,0 +DA:96,0 +DA:108,0 +DA:113,0 +DA:121,0 +DA:128,0 +DA:135,0 +DA:136,0 +DA:140,0 +DA:141,0 +DA:143,0 +DA:145,0 +DA:153,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:160,0 +DA:161,0 +DA:162,0 +DA:163,0 +DA:172,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:183,0 +DA:184,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:202,0 +DA:203,0 +DA:207,0 +DA:208,0 +DA:215,0 +DA:216,0 +DA:220,0 +DA:221,0 +DA:222,0 +DA:223,0 +DA:231,0 +DA:232,0 +DA:236,0 +DA:237,0 +DA:246,0 +DA:250,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:255,0 +DA:256,0 +DA:257,0 +DA:258,0 +DA:266,0 +DA:270,0 +DA:271,0 +DA:272,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:282,0 +DA:283,0 +DA:292,0 +DA:294,0 +DA:296,0 +DA:298,0 +DA:299,0 +DA:300,0 +DA:302,0 +DA:303,0 +DA:304,0 +DA:305,0 +DA:306,0 +DA:308,0 +DA:311,0 +DA:312,0 +DA:314,0 +DA:316,0 +DA:321,0 +DA:322,0 +DA:324,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:328,0 +DA:329,0 +DA:330,0 +DA:331,0 +DA:332,0 +DA:333,0 +DA:335,0 +DA:336,0 +DA:337,0 +DA:338,0 +DA:341,0 +DA:342,0 +DA:343,0 +DA:344,0 +DA:345,0 +DA:346,0 +DA:347,0 +DA:348,0 +DA:349,0 +DA:350,0 +DA:351,0 +DA:354,0 +DA:360,0 +DA:366,0 +DA:367,0 +DA:368,0 +DA:369,0 +DA:370,0 +DA:375,0 +DA:390,0 +DA:391,0 +DA:392,0 +DA:394,0 +DA:395,0 +DA:396,0 +DA:397,0 +DA:399,0 +DA:401,0 +DA:402,0 +DA:412,0 +DA:414,0 +DA:415,0 +DA:416,0 +DA:418,0 +DA:419,0 +DA:420,0 +DA:423,0 +DA:424,0 +DA:431,0 +DA:432,0 +DA:436,0 +DA:440,0 +DA:441,0 +DA:442,0 +DA:444,0 +DA:445,0 +DA:446,0 +DA:447,0 +DA:448,0 +DA:451,0 +DA:456,0 +DA:458,0 +DA:459,0 +DA:462,0 +DA:463,0 +DA:468,0 +DA:469,0 +DA:470,0 +DA:471,0 +DA:472,0 +DA:473,0 +DA:474,0 +DA:475,0 +DA:476,0 +DA:485,0 +DA:489,0 +DA:493,0 +DA:497,0 +DA:508,0 +DA:509,0 +DA:510,0 +DA:512,0 +DA:524,0 +DA:525,0 +DA:527,0 +DA:528,0 +DA:529,0 +DA:531,0 +DA:532,0 +DA:533,0 +DA:535,0 +DA:537,0 +DA:538,0 +DA:539,0 +DA:540,0 +DA:542,0 +DA:543,0 +DA:544,0 +DA:545,0 +DA:551,0 +DA:552,0 +DA:553,0 +DA:557,0 +DA:558,0 +DA:559,0 +DA:561,0 +DA:565,0 +DA:566,0 +DA:567,0 +DA:569,0 +DA:573,0 +DA:574,0 +DA:575,0 +DA:576,0 +DA:580,0 +DA:581,0 +DA:582,0 +DA:591,0 +DA:592,0 +DA:597,0 +DA:598,0 +DA:602,0 +DA:603,0 +DA:611,0 +LF:218 +LH:4 +BRDA:140,0,0,0 +BRDA:140,0,1,0 +BRDA:160,1,0,0 +BRDA:160,1,1,0 +BRDA:189,2,0,0 +BRDA:189,2,1,0 +BRDA:220,3,0,0 +BRDA:220,3,1,0 +BRDA:236,4,0,0 +BRDA:236,4,1,0 +BRDA:250,5,0,0 +BRDA:250,5,1,0 +BRDA:252,6,0,0 +BRDA:252,6,1,0 +BRDA:252,7,0,0 +BRDA:252,7,1,0 +BRDA:270,8,0,0 +BRDA:270,8,1,0 +BRDA:292,9,0,0 +BRDA:292,9,1,0 +BRDA:303,10,0,0 +BRDA:303,10,1,0 +BRDA:337,11,0,0 +BRDA:337,11,1,0 +BRDA:343,12,0,0 +BRDA:343,12,1,0 +BRDA:418,13,0,0 +BRDA:418,13,1,0 +BRDA:440,14,0,0 +BRDA:440,14,1,0 +BRDA:444,15,0,0 +BRDA:444,15,1,0 +BRDA:456,16,0,0 +BRDA:456,16,1,0 +BRDA:456,17,0,0 +BRDA:456,17,1,0 +BRDA:462,18,0,0 +BRDA:462,18,1,0 +BRDA:468,19,0,0 +BRDA:468,19,1,0 +BRDA:469,20,0,0 +BRDA:469,20,1,0 +BRDA:473,21,0,0 +BRDA:473,21,1,0 +BRDA:509,22,0,0 +BRDA:509,22,1,0 +BRDA:524,23,0,0 +BRDA:524,23,1,0 +BRDA:528,24,0,0 +BRDA:528,24,1,0 +BRDA:532,25,0,0 +BRDA:532,25,1,0 +BRDA:542,26,0,0 +BRDA:542,26,1,0 +BRDA:557,27,0,0 +BRDA:557,27,1,0 +BRDA:565,28,0,0 +BRDA:565,28,1,0 +BRF:58 +BRH:0 +end_of_record +TN: +SF:src/corgis.js +FN:14,(anonymous_0) +FN:33,BlockPyCorgis +FN:40,(anonymous_2) +FN:46,(anonymous_3) +FN:53,(anonymous_4) +FN:57,(anonymous_5) +FN:60,(anonymous_6) +FN:77,(anonymous_7) +FN:86,(anonymous_8) +FN:91,(anonymous_9) +FN:110,(anonymous_10) +FN:113,(anonymous_11) +FN:119,(anonymous_12) +FN:127,(anonymous_13) +FNF:14 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,BlockPyCorgis +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +DA:5,1 +DA:6,1 +DA:14,1 +DA:15,0 +DA:34,0 +DA:36,0 +DA:37,0 +DA:40,1 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:53,0 +DA:55,0 +DA:56,0 +DA:58,0 +DA:59,0 +DA:61,0 +DA:77,1 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:83,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:89,0 +DA:91,0 +DA:92,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:98,0 +DA:100,0 +DA:110,1 +DA:111,0 +DA:112,0 +DA:113,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:121,0 +DA:122,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:133,0 +DA:140,0 +DA:142,0 +LF:60 +LH:6 +BRDA:47,0,0,0 +BRDA:47,0,1,0 +BRDA:47,1,0,0 +BRDA:47,1,1,0 +BRDA:79,2,0,0 +BRDA:79,2,1,0 +BRDA:111,3,0,0 +BRDA:111,3,1,0 +BRDA:124,4,0,0 +BRDA:124,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/dialog.js +FN:39,BlockPyDialog +FN:49,(anonymous_1) +FN:50,(anonymous_2) +FN:51,(anonymous_3) +FN:55,(anonymous_4) +FN:61,(anonymous_5) +FN:73,(anonymous_6) +FN:82,(anonymous_7) +FN:89,(anonymous_8) +FN:100,(anonymous_9) +FN:104,(anonymous_10) +FN:109,(anonymous_11) +FN:114,(anonymous_12) +FN:119,(anonymous_13) +FN:124,(anonymous_14) +FN:129,(anonymous_15) +FN:134,(anonymous_16) +FN:139,(anonymous_17) +FN:143,(anonymous_18) +FN:147,(anonymous_19) +FN:151,(anonymous_20) +FN:156,(anonymous_21) +FN:161,(anonymous_22) +FN:192,(anonymous_23) +FN:195,(anonymous_24) +FN:218,(anonymous_25) +FN:238,(anonymous_26) +FN:240,(anonymous_27) +FNF:28 +FNH:3 +FNDA:6,BlockPyDialog +FNDA:1,(anonymous_1) +FNDA:1,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +DA:3,5 +DA:40,6 +DA:41,6 +DA:43,6 +DA:44,6 +DA:45,6 +DA:46,6 +DA:47,6 +DA:49,6 +DA:50,6 +DA:51,6 +DA:52,0 +DA:53,0 +DA:55,6 +DA:56,0 +DA:61,5 +DA:62,0 +DA:73,5 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:82,0 +DA:83,0 +DA:84,0 +DA:89,5 +DA:90,0 +DA:91,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:100,5 +DA:101,0 +DA:104,5 +DA:105,0 +DA:109,5 +DA:110,0 +DA:114,5 +DA:115,0 +DA:119,5 +DA:120,0 +DA:124,5 +DA:125,0 +DA:129,5 +DA:130,0 +DA:134,5 +DA:135,0 +DA:139,5 +DA:140,0 +DA:143,5 +DA:144,0 +DA:147,5 +DA:151,5 +DA:152,0 +DA:156,5 +DA:157,0 +DA:161,5 +DA:162,0 +DA:163,0 +DA:164,0 +DA:192,5 +DA:193,0 +DA:194,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:201,0 +DA:218,5 +DA:219,0 +DA:224,0 +DA:238,0 +DA:240,0 +DA:241,0 +LF:77 +LH:31 +BRDA:83,0,0,0 +BRDA:83,0,1,0 +BRDA:83,1,0,0 +BRDA:83,1,1,0 +BRDA:90,2,0,0 +BRDA:90,2,1,0 +BRDA:163,3,0,0 +BRDA:163,3,1,0 +BRDA:194,4,0,0 +BRDA:194,4,1,0 +BRDA:219,5,0,0 +BRDA:219,5,1,0 +BRF:12 +BRH:0 +end_of_record +TN: +SF:src/editors.js +FN:49,(anonymous_0) +FN:65,(anonymous_1) +FN:72,(anonymous_2) +FN:76,(anonymous_3) +FN:87,(anonymous_4) +FN:91,(anonymous_5) +FN:101,(anonymous_6) +FN:113,(anonymous_7) +FNF:8 +FNH:1 +FNDA:40,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +DA:30,4 +DA:42,4 +DA:44,4 +DA:49,40 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:88,0 +DA:92,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:97,0 +DA:98,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:106,0 +DA:108,0 +DA:109,0 +DA:110,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:121,0 +DA:122,0 +DA:124,0 +DA:125,0 +DA:129,0 +DA:130,0 +DA:132,0 +LF:46 +LH:4 +BRDA:94,0,0,0 +BRDA:94,0,1,0 +BRDA:103,1,0,0 +BRDA:103,1,1,0 +BRDA:115,2,0,0 +BRDA:115,2,1,0 +BRDA:115,3,0,0 +BRDA:115,3,1,0 +BRDA:119,4,0,0 +BRDA:119,4,1,0 +BRDA:120,5,0,0 +BRDA:120,5,1,0 +BRDA:120,6,0,0 +BRDA:120,6,1,0 +BRDA:121,7,0,0 +BRDA:121,7,1,0 +BRDA:129,8,0,0 +BRDA:129,8,1,0 +BRF:18 +BRH:0 +end_of_record +TN: +SF:src/engine.js +FN:23,(anonymous_0) +FN:52,(anonymous_1) +FN:61,(anonymous_2) +FN:73,(anonymous_3) +FN:84,(anonymous_4) +FN:98,(anonymous_5) +FN:105,(anonymous_6) +FN:109,(anonymous_7) +FN:116,(anonymous_8) +FN:126,(anonymous_9) +FN:136,(anonymous_10) +FN:140,(anonymous_11) +FN:158,(anonymous_12) +FN:168,(anonymous_13) +FN:172,(anonymous_14) +FN:174,(anonymous_15) +FN:184,(anonymous_16) +FN:198,(anonymous_17) +FN:218,(anonymous_18) +FN:227,(anonymous_19) +FNF:20 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +DA:24,0 +DA:25,0 +DA:27,0 +DA:36,0 +DA:39,0 +DA:45,0 +DA:46,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:74,0 +DA:87,0 +DA:89,0 +DA:91,0 +DA:93,0 +DA:95,0 +DA:101,0 +DA:110,0 +DA:111,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:121,0 +DA:123,0 +DA:127,0 +DA:128,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:140,0 +DA:141,0 +DA:142,0 +DA:146,0 +DA:148,0 +DA:149,0 +DA:151,0 +DA:154,0 +DA:159,0 +DA:160,0 +DA:169,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:185,0 +DA:187,0 +DA:188,0 +DA:190,0 +DA:191,0 +DA:193,0 +DA:194,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:202,0 +DA:204,0 +DA:206,0 +DA:207,0 +DA:210,0 +DA:219,0 +DA:220,0 +DA:228,0 +DA:229,0 +LF:77 +LH:0 +BRDA:98,0,0,0 +BRDA:109,1,0,0 +BRDA:115,2,0,0 +BRDA:115,2,1,0 +BRDA:115,3,0,0 +BRDA:115,3,1,0 +BRDA:146,4,0,0 +BRDA:146,4,1,0 +BRDA:146,5,0,0 +BRDA:146,5,1,0 +BRDA:187,6,0,0 +BRDA:187,6,1,0 +BRDA:199,7,0,0 +BRDA:199,7,1,0 +BRDA:202,8,0,0 +BRDA:202,8,1,0 +BRDA:202,9,0,0 +BRDA:202,9,1,0 +BRDA:203,10,0,0 +BRDA:203,10,1,0 +BRDA:219,11,0,0 +BRDA:219,11,1,0 +BRDA:228,12,0,0 +BRDA:228,12,1,0 +BRF:24 +BRH:0 +end_of_record +TN: +SF:src/feedback.js +FN:88,(anonymous_0) +FN:100,(anonymous_1) +FN:106,(anonymous_2) +FN:116,(anonymous_3) +FN:133,(anonymous_4) +FN:145,(anonymous_5) +FN:164,(anonymous_6) +FN:172,(anonymous_7) +FN:205,(anonymous_8) +FN:227,(anonymous_9) +FN:237,(anonymous_10) +FN:241,(anonymous_11) +FN:246,(anonymous_12) +FN:260,(anonymous_13) +FN:268,(anonymous_14) +FN:282,(anonymous_15) +FN:313,(anonymous_16) +FN:324,(anonymous_17) +FN:327,(anonymous_18) +FN:347,(anonymous_19) +FN:350,(anonymous_20) +FN:356,(anonymous_21) +FN:365,(anonymous_22) +FN:369,(anonymous_23) +FN:390,(anonymous_24) +FN:391,(anonymous_25) +FN:411,(anonymous_26) +FN:440,(anonymous_27) +FNF:28 +FNH:2 +FNDA:5,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +DA:3,5 +DA:89,5 +DA:90,5 +DA:92,5 +DA:94,5 +DA:95,5 +DA:96,5 +DA:97,5 +DA:100,5 +DA:107,0 +DA:117,0 +DA:118,0 +DA:120,0 +DA:121,0 +DA:122,0 +DA:124,0 +DA:134,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:140,0 +DA:141,0 +DA:142,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:151,0 +DA:155,0 +DA:174,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:178,0 +DA:179,0 +DA:182,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:190,0 +DA:191,0 +DA:195,0 +DA:196,0 +DA:200,0 +DA:201,0 +DA:202,0 +DA:203,0 +DA:205,0 +DA:206,0 +DA:210,0 +DA:213,0 +DA:216,0 +DA:217,0 +DA:218,0 +DA:219,0 +DA:223,0 +DA:224,0 +DA:225,0 +DA:226,0 +DA:227,0 +DA:228,0 +DA:229,0 +DA:232,0 +DA:235,0 +DA:236,0 +DA:237,0 +DA:242,0 +DA:243,0 +DA:247,0 +DA:248,0 +DA:249,0 +DA:250,0 +DA:251,0 +DA:252,0 +DA:254,0 +DA:256,0 +DA:257,0 +DA:258,0 +DA:260,0 +DA:261,0 +DA:269,0 +DA:271,0 +DA:272,0 +DA:273,0 +DA:279,0 +DA:283,0 +DA:284,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:289,0 +DA:290,0 +DA:291,0 +DA:292,0 +DA:293,0 +DA:294,0 +DA:298,0 +DA:314,0 +DA:315,0 +DA:316,0 +DA:318,0 +DA:319,0 +DA:320,0 +DA:321,0 +DA:323,0 +DA:324,0 +DA:325,0 +DA:327,0 +DA:328,0 +DA:330,0 +DA:331,0 +DA:332,0 +DA:333,0 +DA:334,0 +DA:335,0 +DA:336,0 +DA:338,0 +DA:340,0 +DA:341,0 +DA:343,0 +DA:346,0 +DA:347,0 +DA:348,0 +DA:350,0 +DA:351,0 +DA:357,0 +DA:358,0 +DA:359,0 +DA:360,0 +DA:366,0 +DA:370,0 +DA:371,0 +DA:374,0 +DA:375,0 +DA:376,0 +DA:378,0 +DA:379,0 +DA:381,0 +DA:382,0 +DA:383,0 +DA:384,0 +DA:385,0 +DA:386,0 +DA:391,0 +DA:392,0 +DA:393,0 +DA:395,0 +DA:396,0 +DA:397,0 +DA:399,0 +DA:400,0 +DA:401,0 +DA:403,0 +DA:404,0 +DA:405,0 +DA:407,0 +DA:412,0 +DA:413,0 +DA:414,0 +DA:415,0 +DA:416,0 +DA:417,0 +DA:418,0 +DA:419,0 +DA:420,0 +DA:421,0 +DA:425,0 +DA:427,0 +DA:430,0 +DA:431,0 +DA:433,0 +DA:434,0 +DA:437,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:445,0 +DA:446,0 +DA:448,0 +DA:449,0 +DA:451,0 +DA:453,0 +LF:187 +LH:9 +BRDA:125,0,0,0 +BRDA:125,0,1,0 +BRDA:133,1,0,0 +BRDA:146,2,0,0 +BRDA:146,2,1,0 +BRDA:148,3,0,0 +BRDA:148,3,1,0 +BRDA:150,4,0,0 +BRDA:150,4,1,0 +BRDA:183,5,0,0 +BRDA:183,5,1,0 +BRDA:183,6,0,0 +BRDA:183,6,1,0 +BRDA:190,7,0,0 +BRDA:190,7,1,0 +BRDA:190,8,0,0 +BRDA:190,8,1,0 +BRDA:195,9,0,0 +BRDA:195,9,1,0 +BRDA:195,10,0,0 +BRDA:195,10,1,0 +BRDA:218,11,0,0 +BRDA:218,11,1,0 +BRDA:218,12,0,0 +BRDA:218,12,1,0 +BRDA:225,13,0,0 +BRDA:225,13,1,0 +BRDA:228,14,0,0 +BRDA:228,14,1,0 +BRDA:251,15,0,0 +BRDA:251,15,1,0 +BRDA:257,16,0,0 +BRDA:257,16,1,0 +BRDA:272,17,0,0 +BRDA:272,17,1,0 +BRDA:289,18,0,0 +BRDA:289,18,1,0 +BRDA:294,19,0,0 +BRDA:294,19,1,0 +BRDA:295,20,0,0 +BRDA:295,20,1,0 +BRDA:299,21,0,0 +BRDA:299,21,1,0 +BRDA:301,22,0,0 +BRDA:301,22,1,0 +BRDA:304,23,0,0 +BRDA:304,23,1,0 +BRDA:315,24,0,0 +BRDA:315,24,1,0 +BRDA:320,25,0,0 +BRDA:320,25,1,0 +BRDA:334,26,0,0 +BRDA:334,26,1,0 +BRDA:335,27,0,0 +BRDA:335,27,1,0 +BRDA:340,28,0,0 +BRDA:340,28,1,0 +BRDA:357,29,0,0 +BRDA:357,29,1,0 +BRDA:359,30,0,0 +BRDA:359,30,1,0 +BRDA:370,31,0,0 +BRDA:370,31,1,0 +BRDA:378,32,0,0 +BRDA:378,32,1,0 +BRDA:385,33,0,0 +BRDA:385,33,1,0 +BRDA:385,34,0,0 +BRDA:385,34,1,0 +BRDA:392,35,0,0 +BRDA:392,35,1,0 +BRDA:396,36,0,0 +BRDA:396,36,1,0 +BRDA:401,37,0,0 +BRDA:401,37,1,0 +BRDA:401,38,0,0 +BRDA:401,38,1,0 +BRDA:404,39,0,0 +BRDA:404,39,1,0 +BRDA:416,40,0,0 +BRDA:416,40,1,0 +BRDA:417,41,0,0 +BRDA:417,41,1,0 +BRDA:417,42,0,0 +BRDA:417,42,1,0 +BRDA:417,42,2,0 +BRDA:420,43,0,0 +BRDA:420,43,1,0 +BRDA:430,44,0,0 +BRDA:430,44,1,0 +BRDA:433,45,0,0 +BRDA:433,45,1,0 +BRDA:433,46,0,0 +BRDA:433,46,1,0 +BRDA:441,47,0,0 +BRDA:441,47,1,0 +BRF:96 +BRH:0 +end_of_record +TN: +SF:src/files.js +FN:5,(anonymous_0) +FN:212,chompSpecialFile +FN:242,(anonymous_2) +FN:251,makeModelFile +FN:255,makeMockModelFile +FN:256,(anonymous_5) +FN:256,(anonymous_6) +FN:259,loadConcatenatedFile +FN:283,createConcatenatedFile +FN:284,(anonymous_9) +FN:292,observeConcatenatedFile +FN:293,(anonymous_11) +FN:295,(anonymous_12) +FN:305,(anonymous_13) +FN:322,(anonymous_14) +FN:329,(anonymous_15) +FN:333,(anonymous_16) +FN:337,(anonymous_17) +FN:338,(anonymous_18) +FN:339,(anonymous_19) +FN:340,(anonymous_20) +FN:375,(anonymous_21) +FN:415,(anonymous_22) +FN:430,(anonymous_23) +FN:438,(anonymous_24) +FN:450,(anonymous_25) +FN:477,(anonymous_26) +FN:482,(anonymous_27) +FN:486,(anonymous_28) +FN:495,(anonymous_29) +FN:504,(anonymous_30) +FN:509,(anonymous_31) +FN:513,(anonymous_32) +FN:518,(anonymous_33) +FN:525,(anonymous_34) +FN:530,(anonymous_35) +FN:532,(anonymous_36) +FN:536,(anonymous_37) +FN:603,(anonymous_38) +FN:612,(anonymous_39) +FN:636,(anonymous_40) +FN:642,(anonymous_41) +FN:648,(anonymous_42) +FN:661,(anonymous_43) +FN:666,(anonymous_44) +FN:669,(anonymous_45) +FN:692,(anonymous_46) +FN:698,(anonymous_47) +FN:700,(anonymous_48) +FN:701,(anonymous_49) +FN:718,(anonymous_50) +FN:720,(anonymous_51) +FN:721,(anonymous_52) +FN:722,(anonymous_53) +FN:727,(anonymous_54) +FNF:55 +FNH:1 +FNDA:36,(anonymous_0) +FNDA:0,chompSpecialFile +FNDA:0,(anonymous_2) +FNDA:0,makeModelFile +FNDA:0,makeMockModelFile +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,loadConcatenatedFile +FNDA:0,createConcatenatedFile +FNDA:0,(anonymous_9) +FNDA:0,observeConcatenatedFile +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,(anonymous_43) +FNDA:0,(anonymous_44) +FNDA:0,(anonymous_45) +FNDA:0,(anonymous_46) +FNDA:0,(anonymous_47) +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +FNDA:0,(anonymous_54) +DA:5,4 +DA:6,36 +DA:7,4 +DA:9,36 +DA:10,36 +DA:11,36 +DA:12,32 +DA:13,32 +DA:15,36 +DA:26,4 +DA:136,4 +DA:190,4 +DA:201,4 +DA:213,0 +DA:214,0 +DA:216,0 +DA:220,4 +DA:221,4 +DA:223,4 +DA:229,4 +DA:231,4 +DA:234,4 +DA:243,0 +DA:244,0 +DA:245,0 +DA:246,0 +DA:247,0 +DA:252,0 +DA:256,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:263,0 +DA:264,0 +DA:265,0 +DA:269,0 +DA:270,0 +DA:272,0 +DA:275,0 +DA:276,0 +DA:278,0 +DA:284,0 +DA:285,0 +DA:293,0 +DA:294,0 +DA:295,0 +DA:296,0 +DA:297,0 +DA:306,0 +DA:307,0 +DA:308,0 +DA:310,0 +DA:311,0 +DA:313,0 +DA:314,0 +DA:323,0 +DA:324,0 +DA:326,0 +DA:330,0 +DA:334,0 +DA:335,0 +DA:338,0 +DA:339,0 +DA:341,0 +DA:342,0 +DA:344,0 +DA:345,0 +DA:346,0 +DA:348,0 +DA:349,0 +DA:350,0 +DA:376,0 +DA:377,0 +DA:378,0 +DA:379,0 +DA:380,0 +DA:381,0 +DA:382,0 +DA:383,0 +DA:384,0 +DA:385,0 +DA:386,0 +DA:387,0 +DA:388,0 +DA:389,0 +DA:390,0 +DA:391,0 +DA:392,0 +DA:393,0 +DA:394,0 +DA:395,0 +DA:396,0 +DA:397,0 +DA:398,0 +DA:399,0 +DA:400,0 +DA:401,0 +DA:402,0 +DA:403,0 +DA:404,0 +DA:405,0 +DA:406,0 +DA:409,0 +DA:411,0 +DA:416,0 +DA:417,0 +DA:418,0 +DA:419,0 +DA:420,0 +DA:423,0 +DA:424,0 +DA:425,0 +DA:426,0 +DA:431,0 +DA:432,0 +DA:433,0 +DA:434,0 +DA:435,0 +DA:439,0 +DA:440,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:451,0 +DA:453,0 +DA:454,0 +DA:455,0 +DA:457,0 +DA:459,0 +DA:460,0 +DA:463,0 +DA:464,0 +DA:465,0 +DA:466,0 +DA:468,0 +DA:470,0 +DA:471,0 +DA:473,0 +DA:478,0 +DA:479,0 +DA:483,0 +DA:487,0 +DA:496,0 +DA:497,0 +DA:498,0 +DA:499,0 +DA:500,0 +DA:501,0 +DA:504,0 +DA:505,0 +DA:510,0 +DA:511,0 +DA:512,0 +DA:513,0 +DA:515,0 +DA:519,0 +DA:520,0 +DA:521,0 +DA:522,0 +DA:525,0 +DA:526,0 +DA:531,0 +DA:532,0 +DA:558,0 +DA:559,0 +DA:561,0 +DA:563,0 +DA:564,0 +DA:565,0 +DA:568,0 +DA:569,0 +DA:570,0 +DA:571,0 +DA:572,0 +DA:575,0 +DA:576,0 +DA:577,0 +DA:579,0 +DA:580,0 +DA:581,0 +DA:584,0 +DA:585,0 +DA:586,0 +DA:587,0 +DA:588,0 +DA:589,0 +DA:590,0 +DA:592,0 +DA:593,0 +DA:594,0 +DA:595,0 +DA:597,0 +DA:598,0 +DA:604,0 +DA:605,0 +DA:606,0 +DA:609,0 +DA:613,0 +DA:614,0 +DA:615,0 +DA:617,0 +DA:619,0 +DA:621,0 +DA:623,0 +DA:625,0 +DA:627,0 +DA:629,0 +DA:631,0 +DA:633,0 +DA:637,0 +DA:638,0 +DA:639,0 +DA:640,0 +DA:641,0 +DA:642,0 +DA:643,0 +DA:644,0 +DA:646,0 +DA:648,0 +DA:649,0 +DA:650,0 +DA:651,0 +DA:652,0 +DA:653,0 +DA:656,0 +DA:657,0 +DA:658,0 +DA:661,0 +DA:662,0 +DA:663,0 +DA:664,0 +DA:666,0 +DA:675,0 +DA:677,0 +DA:678,0 +DA:679,0 +DA:681,0 +DA:682,0 +DA:683,0 +DA:685,0 +DA:686,0 +DA:688,0 +DA:689,0 +DA:690,0 +DA:692,0 +DA:693,0 +DA:699,0 +DA:700,0 +DA:701,0 +DA:702,0 +DA:703,0 +DA:704,0 +DA:705,0 +DA:706,0 +DA:708,0 +DA:709,0 +DA:711,0 +DA:712,0 +DA:715,0 +DA:719,0 +DA:720,0 +DA:721,0 +DA:722,0 +DA:723,0 +DA:724,0 +DA:726,0 +DA:727,0 +DA:728,0 +DA:729,0 +DA:730,0 +LF:270 +LH:19 +BRDA:6,0,0,4 +BRDA:6,0,1,32 +BRDA:11,1,0,32 +BRDA:11,1,1,4 +BRDA:213,2,0,0 +BRDA:213,2,1,0 +BRDA:245,3,0,0 +BRDA:245,3,1,0 +BRDA:252,4,0,0 +BRDA:252,4,1,0 +BRDA:260,5,0,0 +BRDA:260,5,1,0 +BRDA:264,6,0,0 +BRDA:264,6,1,0 +BRDA:269,7,0,0 +BRDA:269,7,1,0 +BRDA:275,8,0,0 +BRDA:275,8,1,0 +BRDA:323,9,0,0 +BRDA:323,9,1,0 +BRDA:342,10,0,0 +BRDA:342,10,1,0 +BRDA:346,11,0,0 +BRDA:346,11,1,0 +BRDA:349,12,0,0 +BRDA:349,12,1,0 +BRDA:376,13,0,0 +BRDA:376,13,1,0 +BRDA:378,14,0,0 +BRDA:378,14,1,0 +BRDA:380,15,0,0 +BRDA:380,15,1,0 +BRDA:382,16,0,0 +BRDA:382,16,1,0 +BRDA:384,17,0,0 +BRDA:384,17,1,0 +BRDA:386,18,0,0 +BRDA:386,18,1,0 +BRDA:388,19,0,0 +BRDA:388,19,1,0 +BRDA:390,20,0,0 +BRDA:390,20,1,0 +BRDA:392,21,0,0 +BRDA:392,21,1,0 +BRDA:394,22,0,0 +BRDA:394,22,1,0 +BRDA:396,23,0,0 +BRDA:396,23,1,0 +BRDA:398,24,0,0 +BRDA:398,24,1,0 +BRDA:400,25,0,0 +BRDA:400,25,1,0 +BRDA:402,26,0,0 +BRDA:402,26,1,0 +BRDA:404,27,0,0 +BRDA:404,27,1,0 +BRDA:406,28,0,0 +BRDA:406,28,1,0 +BRDA:406,29,0,0 +BRDA:406,29,1,0 +BRDA:406,29,2,0 +BRDA:419,30,0,0 +BRDA:419,30,1,0 +BRDA:423,31,0,0 +BRDA:423,31,1,0 +BRDA:440,32,0,0 +BRDA:440,32,1,0 +BRDA:441,33,0,0 +BRDA:441,33,1,0 +BRDA:451,34,0,0 +BRDA:451,34,1,0 +BRDA:454,35,0,0 +BRDA:454,35,1,0 +BRDA:459,36,0,0 +BRDA:459,36,1,0 +BRDA:465,37,0,0 +BRDA:465,37,1,0 +BRDA:470,38,0,0 +BRDA:470,38,1,0 +BRDA:478,39,0,0 +BRDA:478,39,1,0 +BRDA:496,40,0,0 +BRDA:496,40,1,0 +BRDA:500,41,0,0 +BRDA:500,41,1,0 +BRDA:505,42,0,0 +BRDA:505,42,1,0 +BRDA:512,43,0,0 +BRDA:512,43,1,0 +BRDA:519,44,0,0 +BRDA:519,44,1,0 +BRDA:521,45,0,0 +BRDA:521,45,1,0 +BRDA:526,46,0,0 +BRDA:526,46,1,0 +BRDA:531,47,0,0 +BRDA:531,47,1,0 +BRDA:558,48,0,0 +BRDA:558,48,1,0 +BRDA:563,49,0,0 +BRDA:563,49,1,0 +BRDA:568,50,0,0 +BRDA:568,50,1,0 +BRDA:571,51,0,0 +BRDA:571,51,1,0 +BRDA:580,52,0,0 +BRDA:580,52,1,0 +BRDA:589,53,0,0 +BRDA:589,53,1,0 +BRDA:594,54,0,0 +BRDA:594,54,1,0 +BRDA:597,55,0,0 +BRDA:597,55,1,0 +BRDA:605,56,0,0 +BRDA:605,56,1,0 +BRDA:613,57,0,0 +BRDA:613,57,1,0 +BRDA:614,58,0,0 +BRDA:614,58,1,0 +BRDA:619,59,0,0 +BRDA:619,59,1,0 +BRDA:619,59,2,0 +BRDA:619,59,3,0 +BRDA:619,59,4,0 +BRDA:619,59,5,0 +BRDA:644,60,0,0 +BRDA:644,60,1,0 +BRDA:650,61,0,0 +BRDA:650,61,1,0 +BRDA:652,62,0,0 +BRDA:652,62,1,0 +BRDA:656,63,0,0 +BRDA:656,63,1,0 +BRDA:669,64,0,0 +BRDA:677,65,0,0 +BRDA:677,65,1,0 +BRDA:678,66,0,0 +BRDA:678,66,1,0 +BRDA:678,67,0,0 +BRDA:678,67,1,0 +BRDA:681,68,0,0 +BRDA:681,68,1,0 +BRDA:689,69,0,0 +BRDA:689,69,1,0 +BRDA:705,70,0,0 +BRDA:705,70,1,0 +BRDA:708,71,0,0 +BRDA:708,71,1,0 +BRDA:723,72,0,0 +BRDA:723,72,1,0 +BRDA:726,73,0,0 +BRDA:726,73,1,0 +BRF:152 +BRH:4 +end_of_record +TN: +SF:src/footer.js +FNF:0 +FNH:0 +DA:2,4 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/history.js +FN:42,(anonymous_0) +FN:50,(anonymous_1) +FN:56,(anonymous_2) +FN:62,(anonymous_3) +FN:75,(anonymous_4) +FN:80,(anonymous_5) +FN:85,(anonymous_6) +FN:91,(anonymous_7) +FN:97,(anonymous_8) +FN:102,(anonymous_9) +FN:109,(anonymous_10) +FN:118,(anonymous_11) +FN:148,isSameDay +FN:160,prettyPrintDateTime +FN:193,(anonymous_14) +FN:196,(anonymous_15) +FN:197,(anonymous_16) +FN:202,(anonymous_17) +FNF:18 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,isSameDay +FNDA:0,prettyPrintDateTime +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +DA:3,4 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:57,0 +DA:63,0 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:72,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:81,0 +DA:82,0 +DA:86,0 +DA:87,0 +DA:88,0 +DA:92,0 +DA:93,0 +DA:94,0 +DA:98,0 +DA:99,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:110,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:119,0 +DA:126,4 +DA:136,4 +DA:142,4 +DA:149,0 +DA:168,0 +DA:169,0 +DA:171,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:176,0 +DA:177,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:182,0 +DA:193,4 +DA:194,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:200,0 +DA:202,0 +LF:68 +LH:5 +BRDA:57,0,0,0 +BRDA:57,0,1,0 +BRDA:57,0,2,0 +BRDA:57,0,3,0 +BRDA:57,0,4,0 +BRDA:63,1,0,0 +BRDA:63,1,1,0 +BRDA:67,2,0,0 +BRDA:67,2,1,0 +BRDA:103,3,0,0 +BRDA:103,3,1,0 +BRDA:110,4,0,0 +BRDA:110,4,1,0 +BRDA:119,5,0,0 +BRDA:119,5,1,0 +BRDA:119,5,2,0 +BRDA:149,6,0,0 +BRDA:149,6,1,0 +BRDA:149,6,2,0 +BRDA:168,7,0,0 +BRDA:168,7,1,0 +BRDA:173,8,0,0 +BRDA:173,8,1,0 +BRDA:179,9,0,0 +BRDA:179,9,1,0 +BRF:25 +BRH:0 +end_of_record +TN: +SF:src/interface.js +FN:36,makeExtraInterfaceSubscriptions +FN:39,(anonymous_1) +FN:43,(anonymous_2) +FN:44,(anonymous_3) +FN:50,(anonymous_4) +FN:55,(anonymous_5) +FN:60,(anonymous_6) +FN:67,(anonymous_7) +FN:78,makeInterface +FNF:9 +FNH:3 +FNDA:3,makeExtraInterfaceSubscriptions +FNDA:1,(anonymous_1) +FNDA:1,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,makeInterface +DA:25,4 +DA:38,3 +DA:39,3 +DA:40,1 +DA:41,0 +DA:43,1 +DA:44,1 +DA:45,0 +DA:50,3 +DA:51,0 +DA:53,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:59,0 +DA:61,0 +DA:63,0 +DA:64,0 +DA:67,0 +DA:68,0 +DA:70,0 +DA:79,0 +LF:22 +LH:7 +BRDA:40,0,0,0 +BRDA:40,0,1,1 +BRDA:53,1,0,0 +BRDA:53,1,1,0 +BRF:4 +BRH:1 +end_of_record +TN: +SF:src/server.js +FN:24,BlockPyServer +FN:62,(anonymous_1) +FN:88,(anonymous_2) +FN:94,(anonymous_3) +FN:101,(anonymous_4) +FN:102,pushAnyQueued +FN:114,(anonymous_6) +FN:115,(anonymous_7) +FN:123,(anonymous_8) +FN:136,(anonymous_9) +FN:137,(anonymous_10) +FN:140,(anonymous_11) +FN:156,(anonymous_12) +FN:160,(anonymous_13) +FN:178,(anonymous_14) +FN:207,(anonymous_15) +FN:218,(anonymous_16) +FN:243,(anonymous_17) +FN:250,(anonymous_18) +FN:266,(anonymous_19) +FN:276,(anonymous_20) +FN:278,(anonymous_21) +FN:282,(anonymous_22) +FN:298,(anonymous_23) +FN:321,(anonymous_24) +FN:323,(anonymous_25) +FN:329,(anonymous_26) +FN:353,(anonymous_27) +FN:371,(anonymous_28) +FN:379,(anonymous_29) +FN:385,(anonymous_30) +FN:393,(anonymous_31) +FN:403,(anonymous_32) +FN:409,(anonymous_33) +FN:417,(anonymous_34) +FN:426,(anonymous_35) +FN:441,(anonymous_36) +FN:450,(anonymous_37) +FN:455,(anonymous_38) +FN:462,(anonymous_39) +FN:467,(anonymous_40) +FN:474,(anonymous_41) +FN:485,(anonymous_42) +FN:488,(anonymous_43) +FN:501,(anonymous_44) +FN:508,(anonymous_45) +FN:511,(anonymous_46) +FN:520,(anonymous_47) +FN:528,(anonymous_48) +FN:531,(anonymous_49) +FN:540,(anonymous_50) +FN:554,(anonymous_51) +FN:561,(anonymous_52) +FN:578,(anonymous_53) +FN:586,(anonymous_54) +FN:592,(anonymous_55) +FN:604,(anonymous_56) +FN:612,(anonymous_57) +FN:620,(anonymous_58) +FN:630,(anonymous_59) +FN:650,(anonymous_60) +FN:656,(anonymous_61) +FN:668,(anonymous_62) +FN:674,(anonymous_63) +FN:688,(anonymous_64) +FNF:65 +FNH:0 +FNDA:0,BlockPyServer +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,pushAnyQueued +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +FNDA:0,(anonymous_39) +FNDA:0,(anonymous_40) +FNDA:0,(anonymous_41) +FNDA:0,(anonymous_42) +FNDA:0,(anonymous_43) +FNDA:0,(anonymous_44) +FNDA:0,(anonymous_45) +FNDA:0,(anonymous_46) +FNDA:0,(anonymous_47) +FNDA:0,(anonymous_48) +FNDA:0,(anonymous_49) +FNDA:0,(anonymous_50) +FNDA:0,(anonymous_51) +FNDA:0,(anonymous_52) +FNDA:0,(anonymous_53) +FNDA:0,(anonymous_54) +FNDA:0,(anonymous_55) +FNDA:0,(anonymous_56) +FNDA:0,(anonymous_57) +FNDA:0,(anonymous_58) +FNDA:0,(anonymous_59) +FNDA:0,(anonymous_60) +FNDA:0,(anonymous_61) +FNDA:0,(anonymous_62) +FNDA:0,(anonymous_63) +FNDA:0,(anonymous_64) +DA:8,1 +DA:25,0 +DA:28,0 +DA:31,0 +DA:34,0 +DA:38,0 +DA:43,0 +DA:44,0 +DA:46,0 +DA:48,0 +DA:49,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:55,0 +DA:62,1 +DA:63,0 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:71,0 +DA:72,0 +DA:74,0 +DA:76,0 +DA:79,0 +DA:88,1 +DA:89,0 +DA:90,0 +DA:91,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:97,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:107,0 +DA:114,1 +DA:115,0 +DA:116,0 +DA:117,0 +DA:123,1 +DA:124,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:132,0 +DA:133,0 +DA:136,1 +DA:137,0 +DA:138,0 +DA:140,0 +DA:141,0 +DA:156,1 +DA:160,1 +DA:161,0 +DA:162,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:169,0 +DA:171,0 +DA:178,1 +DA:179,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:198,0 +DA:207,1 +DA:208,0 +DA:209,0 +DA:210,0 +DA:218,1 +DA:219,0 +DA:220,0 +DA:221,0 +DA:222,0 +DA:224,0 +DA:226,0 +DA:227,0 +DA:229,0 +DA:230,0 +DA:232,0 +DA:233,0 +DA:235,0 +DA:236,0 +DA:243,1 +DA:244,0 +DA:245,0 +DA:246,0 +DA:250,1 +DA:252,0 +DA:253,0 +DA:254,0 +DA:255,0 +DA:258,0 +DA:259,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:266,1 +DA:267,0 +DA:268,0 +DA:269,0 +DA:270,0 +DA:271,0 +DA:276,1 +DA:278,0 +DA:280,0 +DA:281,0 +DA:283,0 +DA:284,0 +DA:285,0 +DA:287,0 +DA:288,0 +DA:290,0 +DA:291,0 +DA:293,0 +DA:294,0 +DA:299,0 +DA:300,0 +DA:303,0 +DA:304,0 +DA:306,0 +DA:321,1 +DA:322,0 +DA:323,0 +DA:325,0 +DA:326,0 +DA:328,0 +DA:330,0 +DA:331,0 +DA:333,0 +DA:334,0 +DA:335,0 +DA:337,0 +DA:340,0 +DA:341,0 +DA:343,0 +DA:344,0 +DA:345,0 +DA:347,0 +DA:348,0 +DA:354,0 +DA:356,0 +DA:357,0 +DA:358,0 +DA:363,0 +DA:364,0 +DA:365,0 +DA:367,0 +DA:371,1 +DA:372,0 +DA:373,0 +DA:380,0 +DA:381,0 +DA:382,0 +DA:383,0 +DA:386,0 +DA:387,0 +DA:388,0 +DA:389,0 +DA:390,0 +DA:393,0 +DA:394,0 +DA:395,0 +DA:396,0 +DA:403,1 +DA:404,0 +DA:405,0 +DA:406,0 +DA:407,0 +DA:408,0 +DA:410,0 +DA:411,0 +DA:413,0 +DA:414,0 +DA:418,0 +DA:419,0 +DA:422,0 +DA:426,1 +DA:427,0 +DA:428,0 +DA:429,0 +DA:430,0 +DA:431,0 +DA:432,0 +DA:433,0 +DA:434,0 +DA:435,0 +DA:436,0 +DA:437,0 +DA:439,0 +DA:442,0 +DA:443,0 +DA:446,0 +DA:450,1 +DA:451,0 +DA:452,0 +DA:453,0 +DA:454,0 +DA:456,0 +DA:457,0 +DA:462,1 +DA:463,0 +DA:464,0 +DA:465,0 +DA:466,0 +DA:468,0 +DA:469,0 +DA:474,1 +DA:475,0 +DA:476,0 +DA:477,0 +DA:478,0 +DA:479,0 +DA:480,0 +DA:481,0 +DA:482,0 +DA:483,0 +DA:485,0 +DA:486,0 +DA:489,0 +DA:490,0 +DA:492,0 +DA:494,0 +DA:497,0 +DA:501,1 +DA:502,0 +DA:503,0 +DA:504,0 +DA:505,0 +DA:506,0 +DA:507,0 +DA:508,0 +DA:509,0 +DA:512,0 +DA:513,0 +DA:516,0 +DA:520,1 +DA:521,0 +DA:522,0 +DA:523,0 +DA:524,0 +DA:525,0 +DA:526,0 +DA:527,0 +DA:528,0 +DA:529,0 +DA:532,0 +DA:533,0 +DA:536,0 +DA:540,1 +DA:541,0 +DA:542,0 +DA:543,0 +DA:545,0 +DA:546,0 +DA:547,0 +DA:548,0 +DA:549,0 +DA:550,0 +DA:551,0 +DA:552,0 +DA:554,0 +DA:557,0 +DA:561,1 +DA:562,0 +DA:563,0 +DA:564,0 +DA:566,0 +DA:567,0 +DA:568,0 +DA:569,0 +DA:570,0 +DA:572,0 +DA:574,0 +DA:578,1 +DA:579,0 +DA:580,0 +DA:581,0 +DA:583,0 +DA:584,0 +DA:585,0 +DA:586,0 +DA:587,0 +DA:588,0 +DA:591,0 +DA:593,0 +DA:594,0 +DA:604,1 +DA:605,0 +DA:606,0 +DA:607,0 +DA:608,0 +DA:609,0 +DA:610,0 +DA:611,0 +DA:613,0 +DA:614,0 +DA:616,0 +DA:617,0 +DA:621,0 +DA:622,0 +DA:625,0 +DA:626,0 +DA:630,1 +DA:631,0 +DA:632,0 +DA:634,0 +DA:635,0 +DA:636,0 +DA:637,0 +DA:639,0 +DA:640,0 +DA:641,0 +DA:642,0 +DA:643,0 +DA:644,0 +DA:646,0 +DA:650,1 +DA:651,0 +DA:652,0 +DA:656,1 +DA:657,0 +DA:658,0 +DA:659,0 +DA:661,0 +DA:662,0 +DA:663,0 +DA:664,0 +DA:665,0 +DA:666,0 +DA:667,0 +DA:668,0 +DA:669,0 +DA:670,0 +DA:671,0 +DA:673,0 +DA:675,0 +DA:676,0 +DA:678,0 +DA:680,0 +DA:681,0 +DA:688,1 +DA:689,0 +DA:690,0 +DA:691,0 +DA:692,0 +DA:693,0 +LF:364 +LH:32 +BRDA:63,0,0,0 +BRDA:63,0,1,0 +BRDA:64,1,0,0 +BRDA:64,1,1,0 +BRDA:66,2,0,0 +BRDA:66,2,1,0 +BRDA:71,3,0,0 +BRDA:71,3,1,0 +BRDA:89,4,0,0 +BRDA:89,4,1,0 +BRDA:95,5,0,0 +BRDA:95,5,1,0 +BRDA:103,6,0,0 +BRDA:103,6,1,0 +BRDA:104,7,0,0 +BRDA:104,7,1,0 +BRDA:116,8,0,0 +BRDA:116,8,1,0 +BRDA:161,9,0,0 +BRDA:161,9,1,0 +BRDA:165,10,0,0 +BRDA:165,10,1,0 +BRDA:166,11,0,0 +BRDA:166,11,1,0 +BRDA:208,12,0,0 +BRDA:208,12,1,0 +BRDA:210,13,0,0 +BRDA:210,13,1,0 +BRDA:220,14,0,0 +BRDA:220,14,1,0 +BRDA:224,15,0,0 +BRDA:224,15,1,0 +BRDA:224,15,2,0 +BRDA:224,15,3,0 +BRDA:245,16,0,0 +BRDA:245,16,1,0 +BRDA:254,17,0,0 +BRDA:254,17,1,0 +BRDA:260,18,0,0 +BRDA:260,18,1,0 +BRDA:269,19,0,0 +BRDA:269,19,1,0 +BRDA:284,20,0,0 +BRDA:284,20,1,0 +BRDA:290,21,0,0 +BRDA:290,21,1,0 +BRDA:293,22,0,0 +BRDA:293,22,1,0 +BRDA:303,23,0,0 +BRDA:303,23,1,0 +BRDA:330,24,0,0 +BRDA:330,24,1,0 +BRDA:334,25,0,0 +BRDA:334,25,1,0 +BRDA:341,26,0,0 +BRDA:341,26,1,0 +BRDA:344,27,0,0 +BRDA:344,27,1,0 +BRDA:347,28,0,0 +BRDA:347,28,1,0 +BRDA:357,29,0,0 +BRDA:357,29,1,0 +BRDA:364,30,0,0 +BRDA:364,30,1,0 +BRDA:371,31,0,0 +BRDA:386,32,0,0 +BRDA:386,32,1,0 +BRDA:389,33,0,0 +BRDA:389,33,1,0 +BRDA:405,34,0,0 +BRDA:405,34,1,0 +BRDA:410,35,0,0 +BRDA:410,35,1,0 +BRDA:428,36,0,0 +BRDA:428,36,1,0 +BRDA:451,37,0,0 +BRDA:451,37,1,0 +BRDA:463,38,0,0 +BRDA:463,38,1,0 +BRDA:474,39,0,0 +BRDA:476,40,0,0 +BRDA:476,40,1,0 +BRDA:482,41,0,0 +BRDA:482,41,1,0 +BRDA:489,42,0,0 +BRDA:489,42,1,0 +BRDA:503,43,0,0 +BRDA:503,43,1,0 +BRDA:522,44,0,0 +BRDA:522,44,1,0 +BRDA:541,45,0,0 +BRDA:541,45,1,0 +BRDA:545,46,0,0 +BRDA:545,46,1,0 +BRDA:562,47,0,0 +BRDA:562,47,1,0 +BRDA:566,48,0,0 +BRDA:566,48,1,0 +BRDA:579,49,0,0 +BRDA:579,49,1,0 +BRDA:583,50,0,0 +BRDA:583,50,1,0 +BRDA:587,51,0,0 +BRDA:587,51,1,0 +BRDA:607,52,0,0 +BRDA:607,52,1,0 +BRDA:613,53,0,0 +BRDA:613,53,1,0 +BRDA:631,54,0,0 +BRDA:631,54,1,0 +BRDA:635,55,0,0 +BRDA:635,55,1,0 +BRDA:639,56,0,0 +BRDA:639,56,1,0 +BRDA:651,57,0,0 +BRDA:651,57,1,0 +BRDA:651,58,0,0 +BRDA:651,58,1,0 +BRDA:657,59,0,0 +BRDA:657,59,1,0 +BRDA:662,60,0,0 +BRDA:662,60,1,0 +BRDA:670,61,0,0 +BRDA:670,61,1,0 +BRDA:675,62,0,0 +BRDA:675,62,1,0 +BRDA:680,63,0,0 +BRDA:680,63,1,0 +BRDA:680,64,0,0 +BRDA:680,64,1,0 +BRDA:680,64,2,0 +BRF:131 +BRH:0 +end_of_record +TN: +SF:src/storage.js +FN:10,(anonymous_0) +FN:11,(anonymous_1) +FN:12,(anonymous_2) +FN:13,(anonymous_3) +FN:28,LocalStorageWrapper +FN:38,(anonymous_5) +FN:48,(anonymous_6) +FN:58,(anonymous_7) +FN:68,(anonymous_8) +FN:80,(anonymous_9) +FN:94,(anonymous_10) +FN:106,(anonymous_11) +FNF:12 +FNH:6 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:6,LocalStorageWrapper +FNDA:2,(anonymous_5) +FNDA:1,(anonymous_6) +FNDA:1,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:1,(anonymous_9) +FNDA:2,(anonymous_10) +FNDA:0,(anonymous_11) +DA:2,3 +DA:3,3 +DA:4,3 +DA:5,3 +DA:6,3 +DA:8,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:13,0 +DA:29,6 +DA:38,3 +DA:39,2 +DA:40,2 +DA:48,3 +DA:49,1 +DA:50,1 +DA:58,3 +DA:59,1 +DA:68,3 +DA:69,0 +DA:80,3 +DA:81,1 +DA:82,0 +DA:84,1 +DA:85,1 +DA:94,3 +DA:95,2 +DA:106,3 +DA:107,0 +DA:108,0 +LF:31 +LH:22 +BRDA:11,0,0,0 +BRDA:11,0,1,0 +BRDA:81,1,0,0 +BRDA:81,1,1,1 +BRF:4 +BRH:1 +end_of_record +TN: +SF:src/toolbar.js +FN:10,BlockPyToolbar +FN:30,(anonymous_1) +FN:32,(anonymous_2) +FN:47,(anonymous_3) +FN:51,(anonymous_4) +FN:59,(anonymous_5) +FN:72,(anonymous_6) +FN:81,(anonymous_7) +FN:85,(anonymous_8) +FN:90,(anonymous_9) +FN:97,(anonymous_10) +FN:161,(anonymous_11) +FNF:12 +FNH:0 +FNDA:0,BlockPyToolbar +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +DA:11,0 +DA:12,0 +DA:15,0 +DA:16,0 +DA:17,0 +DA:20,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:34,0 +DA:35,0 +DA:36,0 +DA:40,0 +DA:41,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:51,0 +DA:52,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:64,0 +DA:65,0 +DA:72,0 +DA:73,0 +DA:74,0 +DA:75,0 +DA:77,0 +DA:78,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:89,0 +DA:90,0 +DA:91,0 +DA:92,0 +DA:95,0 +DA:97,0 +DA:98,0 +DA:99,0 +DA:161,0 +DA:162,0 +LF:50 +LH:0 +BRDA:55,0,0,0 +BRDA:55,0,1,0 +BRDA:60,1,0,0 +BRDA:60,1,1,0 +BRDA:73,2,0,0 +BRDA:73,2,1,0 +BRF:6 +BRH:0 +end_of_record +TN: +SF:src/trace.js +FN:177,(anonymous_0) +FN:193,(anonymous_1) +FN:232,(anonymous_2) +FNF:3 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +DA:1,4 +DA:73,4 +DA:178,0 +DA:179,0 +DA:181,0 +DA:194,0 +DA:195,0 +DA:197,0 +DA:204,0 +DA:205,0 +DA:206,0 +DA:207,0 +DA:210,0 +DA:211,0 +DA:213,0 +DA:215,0 +DA:216,0 +DA:217,0 +DA:218,0 +DA:223,0 +DA:233,0 +DA:234,0 +DA:239,0 +DA:241,0 +DA:247,0 +DA:249,0 +DA:256,0 +DA:258,0 +DA:259,0 +DA:264,0 +DA:270,0 +DA:275,0 +DA:280,0 +DA:285,0 +DA:290,0 +DA:295,0 +DA:300,0 +DA:301,0 +DA:307,0 +DA:314,0 +DA:319,0 +DA:324,0 +DA:329,0 +DA:334,0 +LF:44 +LH:2 +BRDA:197,0,0,0 +BRDA:197,0,1,0 +BRDA:206,1,0,0 +BRDA:206,1,1,0 +BRDA:206,2,0,0 +BRDA:206,2,1,0 +BRDA:215,3,0,0 +BRDA:215,3,1,0 +BRDA:217,4,0,0 +BRDA:217,4,1,0 +BRDA:233,5,0,0 +BRDA:233,5,1,0 +BRDA:239,6,0,0 +BRDA:247,7,0,0 +BRDA:247,7,1,0 +BRDA:247,7,2,0 +BRDA:247,7,3,0 +BRDA:247,7,4,0 +BRDA:247,7,5,0 +BRDA:247,7,6,0 +BRDA:247,7,7,0 +BRDA:247,7,8,0 +BRDA:247,7,9,0 +BRDA:247,7,10,0 +BRDA:247,7,11,0 +BRDA:247,7,12,0 +BRDA:247,7,13,0 +BRDA:247,7,14,0 +BRDA:252,8,0,0 +BRDA:252,8,1,0 +BRDA:258,9,0,0 +BRDA:258,9,1,0 +BRDA:258,10,0,0 +BRDA:258,10,1,0 +BRDA:281,11,0,0 +BRDA:281,11,1,0 +BRDA:300,12,0,0 +BRDA:300,12,1,0 +BRDA:320,13,0,0 +BRDA:320,13,1,0 +BRDA:331,14,0,0 +BRDA:331,14,1,0 +BRDA:335,15,0,0 +BRDA:335,15,1,0 +BRDA:336,16,0,0 +BRDA:336,16,1,0 +BRF:46 +BRH:0 +end_of_record +TN: +SF:src/utilities.js +FN:11,arrayMove +FN:19,(anonymous_1) +FN:32,arrayContains +FN:44,arrayUnique +FN:68,expandArray +FN:69,(anonymous_5) +FN:80,cloneNode +FN:100,indent +FN:109,slug +FN:118,capitalize +FN:132,randomInteger +FN:143,encodeHTML +FN:155,(anonymous_12) +FN:182,moveElements +FN:194,firstDefinedValue +FN:213,isSkBuiltin +FN:226,isAstNode +FN:240,extractPart +FN:271,mixedRemapToPy +FN:322,getCurrentTime +FNF:20 +FNH:2 +FNDA:5,arrayMove +FNDA:11,(anonymous_1) +FNDA:0,arrayContains +FNDA:0,arrayUnique +FNDA:0,expandArray +FNDA:0,(anonymous_5) +FNDA:0,cloneNode +FNDA:0,indent +FNDA:0,slug +FNDA:0,capitalize +FNDA:0,randomInteger +FNDA:0,encodeHTML +FNDA:0,(anonymous_12) +FNDA:0,moveElements +FNDA:0,firstDefinedValue +FNDA:0,isSkBuiltin +FNDA:0,isAstNode +FNDA:0,extractPart +FNDA:0,mixedRemapToPy +FNDA:0,getCurrentTime +DA:12,5 +DA:13,5 +DA:15,5 +DA:16,2 +DA:19,3 +DA:20,11 +DA:21,8 +DA:22,5 +DA:33,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:52,0 +DA:69,0 +DA:70,0 +DA:72,0 +DA:82,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:88,0 +DA:91,0 +DA:101,0 +DA:110,0 +DA:119,0 +DA:120,0 +DA:122,0 +DA:133,0 +DA:144,0 +DA:154,6 +DA:155,0 +DA:156,0 +DA:157,0 +DA:158,0 +DA:159,0 +DA:160,0 +DA:161,0 +DA:162,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:169,0 +DA:171,0 +DA:173,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:188,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:200,0 +DA:214,0 +DA:227,0 +DA:230,6 +DA:241,0 +DA:242,0 +DA:244,0 +DA:245,0 +DA:250,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:255,0 +DA:256,0 +DA:258,0 +DA:261,0 +DA:277,0 +DA:279,0 +DA:280,0 +DA:282,0 +DA:283,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:289,0 +DA:292,0 +DA:293,0 +DA:294,0 +DA:295,0 +DA:296,0 +DA:298,0 +DA:299,0 +DA:301,0 +DA:303,0 +DA:306,0 +DA:308,0 +DA:310,0 +DA:311,0 +DA:312,0 +DA:313,0 +DA:314,0 +DA:315,0 +DA:316,0 +DA:317,0 +DA:323,0 +DA:324,0 +DA:325,0 +DA:327,0 +DA:329,0 +DA:330,0 +DA:331,0 +DA:333,0 +DA:336,6 +DA:337,6 +DA:338,6 +DA:339,6 +DA:340,6 +DA:342,6 +DA:343,6 +DA:344,6 +DA:345,6 +DA:346,6 +DA:347,6 +LF:118 +LH:21 +BRDA:15,0,0,2 +BRDA:15,0,1,3 +BRDA:15,1,0,5 +BRDA:15,1,1,4 +BRDA:15,1,2,4 +BRDA:20,2,0,3 +BRDA:20,2,1,8 +BRDA:21,3,0,3 +BRDA:21,3,1,5 +BRDA:21,4,0,2 +BRDA:21,4,1,1 +BRDA:48,5,0,0 +BRDA:48,5,1,0 +BRDA:82,6,0,0 +BRDA:82,6,1,0 +BRDA:119,7,0,0 +BRDA:119,7,1,0 +BRDA:154,8,0,0 +BRDA:154,8,1,6 +BRDA:166,9,0,0 +BRDA:166,9,1,0 +BRDA:185,10,0,0 +BRDA:185,10,1,0 +BRDA:196,11,0,0 +BRDA:196,11,1,0 +BRDA:214,12,0,0 +BRDA:214,12,1,0 +BRDA:214,12,2,0 +BRDA:214,12,3,0 +BRDA:214,12,4,0 +BRDA:214,12,5,0 +BRDA:214,12,6,0 +BRDA:214,12,7,0 +BRDA:227,13,0,0 +BRDA:227,13,1,0 +BRDA:241,14,0,0 +BRDA:241,14,1,0 +BRDA:241,15,0,0 +BRDA:241,15,1,0 +BRDA:250,16,0,0 +BRDA:250,16,1,0 +BRDA:252,17,0,0 +BRDA:252,17,1,0 +BRDA:252,18,0,0 +BRDA:252,18,1,0 +BRDA:255,19,0,0 +BRDA:255,19,1,0 +BRDA:255,20,0,0 +BRDA:255,20,1,0 +BRDA:255,20,2,0 +BRDA:277,21,0,0 +BRDA:277,21,1,0 +BRDA:280,22,0,0 +BRDA:280,22,1,0 +BRDA:286,23,0,0 +BRDA:286,23,1,0 +BRDA:293,24,0,0 +BRDA:293,24,1,0 +BRDA:295,25,0,0 +BRDA:295,25,1,0 +BRDA:296,26,0,0 +BRDA:296,26,1,0 +BRDA:310,27,0,0 +BRDA:310,27,1,0 +BRDA:312,28,0,0 +BRDA:312,28,1,0 +BRDA:314,29,0,0 +BRDA:314,29,1,0 +BRDA:316,30,0,0 +BRDA:316,30,1,0 +BRDA:327,31,0,0 +BRDA:327,31,1,0 +BRDA:330,32,0,0 +BRDA:330,32,1,0 +BRF:74 +BRH:12 +end_of_record +TN: +SF:src/editor/abstract_editor.js +FN:3,uploadFile +FN:6,(anonymous_1) +FN:14,sluggify +FN:18,downloadFile +FN:38,(anonymous_4) +FN:47,(anonymous_5) +FN:53,(anonymous_6) +FN:59,(anonymous_7) +FN:68,(anonymous_8) +FN:75,(anonymous_9) +FN:87,(anonymous_10) +FN:93,(anonymous_11) +FN:99,(anonymous_12) +FNF:13 +FNH:0 +FNDA:0,uploadFile +FNDA:0,(anonymous_1) +FNDA:0,sluggify +FNDA:0,downloadFile +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +DA:4,0 +DA:5,0 +DA:6,0 +DA:7,0 +DA:9,0 +DA:10,0 +DA:11,0 +DA:15,0 +DA:19,0 +DA:21,0 +DA:22,0 +DA:24,0 +DA:25,0 +DA:26,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:39,0 +DA:40,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:55,0 +DA:56,0 +DA:60,0 +DA:62,0 +DA:69,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:100,0 +DA:101,0 +LF:44 +LH:0 +BRDA:25,0,0,0 +BRDA:25,0,1,0 +BRDA:60,1,0,0 +BRDA:60,1,1,0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:src/editor/assignment_settings.js +FN:52,getDocumentation +FN:61,makeStartViewTab +FN:72,(anonymous_2) +FN:73,(anonymous_3) +FN:74,(anonymous_4) +FN:308,saveAssignmentSettings +FN:310,(anonymous_6) +FN:321,loadAssignmentSettings +FN:324,(anonymous_8) +FN:339,makeAssignmentSettingsModel +FN:341,(anonymous_10) +FN:359,(anonymous_11) +FN:364,(anonymous_12) +FN:376,(anonymous_13) +FN:386,(anonymous_14) +FN:396,(anonymous_15) +FNF:16 +FNH:5 +FNDA:28,getDocumentation +FNDA:12,makeStartViewTab +FNDA:140,(anonymous_2) +FNDA:112,(anonymous_3) +FNDA:268,(anonymous_4) +FNDA:0,saveAssignmentSettings +FNDA:0,(anonymous_6) +FNDA:0,loadAssignmentSettings +FNDA:0,(anonymous_8) +FNDA:0,makeAssignmentSettingsModel +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +DA:4,4 +DA:45,4 +DA:53,28 +DA:54,228 +DA:55,28 +DA:58,0 +DA:62,12 +DA:70,4 +DA:72,140 +DA:74,268 +DA:75,112 +DA:95,4 +DA:309,0 +DA:310,0 +DA:311,0 +DA:312,0 +DA:314,0 +DA:315,0 +DA:318,0 +DA:322,0 +DA:323,0 +DA:324,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:329,0 +DA:333,0 +DA:334,0 +DA:340,0 +DA:341,0 +DA:342,0 +DA:343,0 +DA:344,0 +DA:345,0 +DA:347,0 +DA:348,0 +DA:349,0 +DA:351,0 +DA:355,0 +DA:360,0 +DA:361,0 +DA:365,0 +DA:366,0 +DA:371,0 +DA:377,0 +DA:378,0 +DA:379,0 +DA:382,0 +DA:387,0 +DA:388,0 +DA:389,0 +DA:392,0 +DA:401,0 +DA:405,4 +LF:54 +LH:12 +BRDA:54,0,0,28 +BRDA:54,0,1,200 +BRDA:314,1,0,0 +BRDA:314,1,1,0 +BRDA:322,2,0,0 +BRDA:322,2,1,0 +BRDA:326,3,0,0 +BRDA:326,3,1,0 +BRDA:333,4,0,0 +BRDA:333,4,1,0 +BRDA:344,5,0,0 +BRDA:344,5,1,0 +BRDA:348,6,0,0 +BRDA:348,6,1,0 +BRDA:378,7,0,0 +BRDA:378,7,1,0 +BRDA:388,8,0,0 +BRDA:388,8,1,0 +BRF:18 +BRH:2 +end_of_record +TN: +SF:src/editor/default_header.js +FNF:0 +FNH:0 +DA:3,4 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/editor/images.js +FN:114,(anonymous_0) +FN:121,(anonymous_1) +FN:126,(anonymous_2) +FN:174,(anonymous_3) +FN:175,(anonymous_4) +FN:195,(anonymous_5) +FN:199,(anonymous_6) +FN:208,(anonymous_7) +FN:223,(anonymous_8) +FN:229,(anonymous_9) +FN:239,(anonymous_10) +FN:247,(anonymous_11) +FN:257,(anonymous_12) +FN:267,(anonymous_13) +FN:278,(anonymous_14) +FNF:15 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +DA:4,4 +DA:115,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:121,0 +DA:122,0 +DA:127,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:134,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:178,0 +DA:190,0 +DA:209,0 +DA:211,0 +DA:213,0 +DA:215,0 +DA:217,0 +DA:219,0 +DA:224,0 +DA:230,0 +DA:231,0 +DA:233,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:248,0 +DA:249,0 +DA:251,0 +DA:258,0 +DA:259,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:268,0 +DA:269,0 +DA:271,0 +DA:280,0 +DA:281,0 +DA:288,4 +LF:44 +LH:2 +BRDA:130,0,0,0 +BRDA:130,0,1,0 +BRDA:176,1,0,0 +BRDA:176,1,1,0 +BRDA:209,2,0,0 +BRDA:209,2,1,0 +BRDA:209,2,2,0 +BRDA:209,2,3,0 +BRDA:209,2,4,0 +BRDA:230,3,0,0 +BRDA:230,3,1,0 +BRDA:248,4,0,0 +BRDA:248,4,1,0 +BRDA:261,5,0,0 +BRDA:261,5,1,0 +BRDA:268,6,0,0 +BRDA:268,6,1,0 +BRF:17 +BRH:0 +end_of_record +TN: +SF:src/editor/json.js +FN:12,(anonymous_0) +FN:25,(anonymous_1) +FN:32,(anonymous_2) +FN:40,(anonymous_3) +FN:58,(anonymous_4) +FN:68,(anonymous_5) +FN:77,(anonymous_6) +FNF:7 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +DA:4,4 +DA:13,0 +DA:14,0 +DA:26,0 +DA:27,0 +DA:29,0 +DA:33,0 +DA:37,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:45,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:51,0 +DA:54,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:72,0 +DA:73,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:86,4 +LF:33 +LH:2 +BRDA:26,0,0,0 +BRDA:26,0,1,0 +BRDA:49,1,0,0 +BRDA:49,1,1,0 +BRDA:54,2,0,0 +BRDA:54,2,1,0 +BRDA:60,3,0,0 +BRDA:60,3,1,0 +BRDA:70,4,0,0 +BRDA:70,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/editor/markdown.js +FN:11,(anonymous_0) +FN:29,(anonymous_1) +FN:44,(anonymous_2) +FN:54,(anonymous_3) +FN:63,(anonymous_4) +FNF:5 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +DA:4,4 +DA:12,0 +DA:13,0 +DA:26,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:34,0 +DA:36,0 +DA:37,0 +DA:38,0 +DA:40,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:71,4 +LF:27 +LH:2 +BRDA:38,0,0,0 +BRDA:38,0,1,0 +BRDA:46,1,0,0 +BRDA:46,1,1,0 +BRDA:56,2,0,0 +BRDA:56,2,1,0 +BRF:6 +BRH:0 +end_of_record +TN: +SF:src/editor/python.js +FN:21,makeTab +FN:161,convertIpynbToPython +FN:163,(anonymous_2) +FN:172,(anonymous_3) +FN:184,(anonymous_4) +FN:194,(anonymous_5) +FN:197,(anonymous_6) +FN:199,(anonymous_7) +FN:201,(anonymous_8) +FN:209,(anonymous_9) +FN:228,(anonymous_10) +FN:229,(anonymous_11) +FN:233,(anonymous_12) +FN:238,(anonymous_13) +FN:262,(anonymous_14) +FN:266,(anonymous_15) +FN:269,(anonymous_16) +FN:273,(anonymous_17) +FN:284,(anonymous_18) +FN:287,(anonymous_19) +FN:309,(anonymous_20) +FN:322,(anonymous_21) +FN:334,(anonymous_22) +FN:350,(anonymous_23) +FN:352,(anonymous_24) +FN:355,(anonymous_25) +FN:363,(anonymous_26) +FN:372,(anonymous_27) +FN:383,(anonymous_28) +FN:390,(anonymous_29) +FN:415,(anonymous_30) +FN:416,(anonymous_31) +FN:419,(anonymous_32) +FN:422,(anonymous_33) +FN:427,(anonymous_34) +FN:434,(anonymous_35) +FN:439,(anonymous_36) +FN:451,(anonymous_37) +FNF:38 +FNH:1 +FNDA:12,makeTab +FNDA:0,convertIpynbToPython +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +FNDA:0,(anonymous_26) +FNDA:0,(anonymous_27) +FNDA:0,(anonymous_28) +FNDA:0,(anonymous_29) +FNDA:0,(anonymous_30) +FNDA:0,(anonymous_31) +FNDA:0,(anonymous_32) +FNDA:0,(anonymous_33) +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +DA:15,4 +DA:22,12 +DA:30,4 +DA:162,0 +DA:163,0 +DA:164,0 +DA:165,0 +DA:168,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:177,0 +DA:180,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:195,0 +DA:199,0 +DA:200,0 +DA:201,0 +DA:202,0 +DA:211,0 +DA:217,0 +DA:218,0 +DA:219,0 +DA:220,0 +DA:221,0 +DA:222,0 +DA:223,0 +DA:225,0 +DA:229,0 +DA:230,0 +DA:233,0 +DA:239,0 +DA:240,0 +DA:241,0 +DA:243,0 +DA:244,0 +DA:245,0 +DA:247,0 +DA:249,0 +DA:252,0 +DA:255,0 +DA:258,0 +DA:259,0 +DA:261,0 +DA:262,0 +DA:264,0 +DA:266,0 +DA:267,0 +DA:269,0 +DA:270,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:284,0 +DA:288,0 +DA:289,0 +DA:290,0 +DA:293,0 +DA:295,0 +DA:297,0 +DA:298,0 +DA:300,0 +DA:301,0 +DA:302,0 +DA:303,0 +DA:305,0 +DA:310,0 +DA:312,0 +DA:313,0 +DA:314,0 +DA:315,0 +DA:316,0 +DA:318,0 +DA:324,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:328,0 +DA:330,0 +DA:331,0 +DA:335,0 +DA:336,0 +DA:337,0 +DA:338,0 +DA:340,0 +DA:341,0 +DA:342,0 +DA:344,0 +DA:345,0 +DA:346,0 +DA:351,0 +DA:352,0 +DA:353,0 +DA:355,0 +DA:356,0 +DA:357,0 +DA:359,0 +DA:362,0 +DA:363,0 +DA:364,0 +DA:368,0 +DA:369,0 +DA:370,0 +DA:372,0 +DA:373,0 +DA:374,0 +DA:375,0 +DA:376,0 +DA:377,0 +DA:378,0 +DA:384,0 +DA:385,0 +DA:386,0 +DA:387,0 +DA:391,0 +DA:392,0 +DA:393,0 +DA:394,0 +DA:396,0 +DA:397,0 +DA:399,0 +DA:400,0 +DA:404,0 +DA:406,0 +DA:407,0 +DA:409,0 +DA:410,0 +DA:411,0 +DA:416,0 +DA:417,0 +DA:419,0 +DA:420,0 +DA:422,0 +DA:428,0 +DA:429,0 +DA:435,0 +DA:436,0 +DA:440,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:445,0 +DA:446,0 +DA:447,0 +DA:452,0 +DA:453,0 +DA:454,0 +DA:456,0 +DA:457,0 +DA:458,0 +DA:463,4 +LF:154 +LH:4 +BRDA:164,0,0,0 +BRDA:164,0,1,0 +BRDA:165,1,0,0 +BRDA:165,1,1,0 +BRDA:168,2,0,0 +BRDA:168,2,1,0 +BRDA:173,3,0,0 +BRDA:173,3,1,0 +BRDA:175,4,0,0 +BRDA:175,4,1,0 +BRDA:175,5,0,0 +BRDA:175,5,1,0 +BRDA:243,6,0,0 +BRDA:243,6,1,0 +BRDA:244,7,0,0 +BRDA:244,7,1,0 +BRDA:261,8,0,0 +BRDA:261,8,1,0 +BRDA:288,9,0,0 +BRDA:288,9,1,0 +BRDA:289,10,0,0 +BRDA:289,10,1,0 +BRDA:295,11,0,0 +BRDA:295,11,1,0 +BRDA:301,12,0,0 +BRDA:301,12,1,0 +BRDA:313,13,0,0 +BRDA:313,13,1,0 +BRDA:315,14,0,0 +BRDA:315,14,1,0 +BRDA:327,15,0,0 +BRDA:327,15,1,0 +BRDA:336,16,0,0 +BRDA:336,16,1,0 +BRDA:340,17,0,0 +BRDA:340,17,1,0 +BRDA:344,18,0,0 +BRDA:344,18,1,0 +BRDA:356,19,0,0 +BRDA:356,19,1,0 +BRDA:369,20,0,0 +BRDA:369,20,1,0 +BRDA:373,21,0,0 +BRDA:373,21,1,0 +BRDA:375,22,0,0 +BRDA:375,22,1,0 +BRDA:391,23,0,0 +BRDA:391,23,1,0 +BRDA:393,24,0,0 +BRDA:393,24,1,0 +BRDA:429,25,0,0 +BRDA:429,25,1,0 +BRDA:429,25,2,0 +BRDA:442,26,0,0 +BRDA:442,26,1,0 +BRDA:453,27,0,0 +BRDA:453,27,1,0 +BRDA:453,28,0,0 +BRDA:453,28,1,0 +BRF:59 +BRH:0 +end_of_record +TN: +SF:src/editor/quiz.js +FN:10,(anonymous_0) +FN:22,(anonymous_1) +FN:29,(anonymous_2) +FN:37,(anonymous_3) +FN:54,(anonymous_4) +FN:64,(anonymous_5) +FN:73,(anonymous_6) +FNF:7 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +DA:3,4 +DA:11,0 +DA:12,0 +DA:23,0 +DA:24,0 +DA:26,0 +DA:30,0 +DA:34,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:42,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:48,0 +DA:51,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:82,4 +LF:33 +LH:2 +BRDA:23,0,0,0 +BRDA:23,0,1,0 +BRDA:46,1,0,0 +BRDA:46,1,1,0 +BRDA:51,2,0,0 +BRDA:51,2,1,0 +BRDA:56,3,0,0 +BRDA:56,3,1,0 +BRDA:66,4,0,0 +BRDA:66,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/editor/sample_submissions.js +FN:17,(anonymous_0) +FN:23,(anonymous_1) +FN:28,(anonymous_2) +FN:32,(anonymous_3) +FN:58,(anonymous_4) +FN:72,(anonymous_5) +FN:79,(anonymous_6) +FN:87,(anonymous_7) +FN:96,(anonymous_8) +FN:103,(anonymous_9) +FN:107,(anonymous_10) +FN:111,(anonymous_11) +FN:124,(anonymous_12) +FN:125,(anonymous_13) +FN:128,(anonymous_14) +FN:128,(anonymous_15) +FN:134,(anonymous_16) +FN:145,(anonymous_17) +FN:149,(anonymous_18) +FN:154,(anonymous_19) +FNF:20 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +DA:8,4 +DA:18,0 +DA:19,0 +DA:20,0 +DA:24,0 +DA:29,0 +DA:33,0 +DA:41,4 +DA:57,4 +DA:61,0 +DA:62,0 +DA:73,0 +DA:74,0 +DA:76,0 +DA:80,0 +DA:84,0 +DA:85,0 +DA:91,0 +DA:97,0 +DA:98,0 +DA:99,0 +DA:100,0 +DA:108,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:116,0 +DA:118,0 +DA:121,0 +DA:122,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:128,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:141,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:156,0 +DA:157,0 +DA:160,0 +DA:164,4 +LF:49 +LH:4 +BRDA:24,0,0,0 +BRDA:24,0,1,0 +BRDA:73,1,0,0 +BRDA:73,1,1,0 +BRDA:121,2,0,0 +BRDA:121,2,1,0 +BRDA:136,3,0,0 +BRDA:136,3,1,0 +BRDA:147,4,0,0 +BRDA:147,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/editor/tags.js +FN:22,(anonymous_0) +FNF:1 +FNH:0 +FNDA:0,(anonymous_0) +DA:3,4 +DA:23,0 +DA:27,4 +LF:3 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/editor/text.js +FN:12,(anonymous_0) +FN:24,(anonymous_1) +FN:31,(anonymous_2) +FN:39,(anonymous_3) +FN:56,(anonymous_4) +FN:66,(anonymous_5) +FN:75,(anonymous_6) +FNF:7 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +DA:4,4 +DA:13,0 +DA:14,0 +DA:25,0 +DA:26,0 +DA:28,0 +DA:32,0 +DA:36,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:44,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:50,0 +DA:53,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:84,4 +LF:33 +LH:2 +BRDA:25,0,0,0 +BRDA:25,0,1,0 +BRDA:48,1,0,0 +BRDA:48,1,1,0 +BRDA:53,2,0,0 +BRDA:53,2,1,0 +BRDA:58,3,0,0 +BRDA:58,3,1,0 +BRDA:68,4,0,0 +BRDA:68,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/editor/toolbox.js +FN:18,(anonymous_0) +FN:31,(anonymous_1) +FN:38,(anonymous_2) +FN:46,(anonymous_3) +FN:65,(anonymous_4) +FN:75,(anonymous_5) +FN:87,(anonymous_6) +FNF:7 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +DA:3,4 +DA:19,0 +DA:20,0 +DA:32,0 +DA:33,0 +DA:35,0 +DA:39,0 +DA:43,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:51,0 +DA:53,0 +DA:54,0 +DA:56,0 +DA:58,0 +DA:61,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:83,0 +DA:89,0 +DA:90,0 +DA:92,0 +DA:93,0 +DA:97,4 +LF:35 +LH:2 +BRDA:32,0,0,0 +BRDA:32,0,1,0 +BRDA:56,1,0,0 +BRDA:56,1,1,0 +BRDA:61,2,0,0 +BRDA:61,2,1,0 +BRDA:67,3,0,0 +BRDA:67,3,1,0 +BRDA:77,4,0,0 +BRDA:77,4,1,0 +BRDA:80,5,0,0 +BRDA:80,5,1,0 +BRF:12 +BRH:0 +end_of_record +TN: +SF:src/engine/configurations.js +FN:9,(anonymous_0) +FN:16,(anonymous_1) +FN:28,(anonymous_2) +FN:30,(anonymous_3) +FN:39,(anonymous_4) +FN:49,(anonymous_5) +FN:57,(anonymous_6) +FN:74,(anonymous_7) +FN:80,(anonymous_8) +FN:96,(anonymous_9) +FN:101,(anonymous_10) +FN:123,(anonymous_11) +FN:128,(anonymous_12) +FN:133,(anonymous_13) +FN:137,(anonymous_14) +FN:142,(anonymous_15) +FN:149,(anonymous_16) +FN:157,(anonymous_17) +FN:162,(anonymous_18) +FN:166,(anonymous_19) +FN:170,(anonymous_20) +FN:174,(anonymous_21) +FN:178,(anonymous_22) +FN:182,(anonymous_23) +FN:190,(anonymous_24) +FN:194,(anonymous_25) +FNF:26 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +FNDA:0,(anonymous_17) +FNDA:0,(anonymous_18) +FNDA:0,(anonymous_19) +FNDA:0,(anonymous_20) +FNDA:0,(anonymous_21) +FNDA:0,(anonymous_22) +FNDA:0,(anonymous_23) +FNDA:0,(anonymous_24) +FNDA:0,(anonymous_25) +DA:1,1 +DA:10,0 +DA:11,0 +DA:12,0 +DA:13,0 +DA:18,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:22,0 +DA:24,0 +DA:26,0 +DA:28,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:34,0 +DA:35,0 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:42,0 +DA:45,0 +DA:46,0 +DA:50,0 +DA:51,0 +DA:53,0 +DA:58,0 +DA:74,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:85,0 +DA:97,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:107,0 +DA:108,0 +DA:109,0 +DA:110,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:119,0 +DA:124,0 +DA:129,0 +DA:134,0 +DA:138,0 +DA:143,0 +DA:144,0 +DA:146,0 +DA:150,0 +DA:151,0 +DA:153,0 +DA:159,0 +DA:171,0 +DA:175,0 +DA:179,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:201,0 +DA:202,0 +DA:204,0 +DA:206,0 +DA:207,0 +DA:209,0 +DA:210,0 +DA:212,0 +DA:213,0 +DA:216,0 +LF:77 +LH:1 +BRDA:31,0,0,0 +BRDA:31,0,1,0 +BRDA:36,1,0,0 +BRDA:36,1,1,0 +BRDA:36,2,0,0 +BRDA:36,2,1,0 +BRDA:40,3,0,0 +BRDA:40,3,1,0 +BRDA:50,4,0,0 +BRDA:50,4,1,0 +BRDA:82,5,0,0 +BRDA:82,5,1,0 +BRDA:104,6,0,0 +BRDA:104,6,1,0 +BRDA:109,7,0,0 +BRDA:109,7,1,0 +BRDA:111,8,0,0 +BRDA:111,8,1,0 +BRDA:143,9,0,0 +BRDA:143,9,1,0 +BRDA:150,10,0,0 +BRDA:150,10,1,0 +BRDA:184,11,0,0 +BRDA:184,11,1,0 +BRDA:198,12,0,0 +BRDA:198,12,1,0 +BRDA:201,13,0,0 +BRDA:201,13,1,0 +BRDA:209,14,0,0 +BRDA:209,14,1,0 +BRDA:209,15,0,0 +BRDA:209,15,1,0 +BRDA:212,16,0,0 +BRDA:212,16,1,0 +BRDA:212,17,0,0 +BRDA:212,17,1,0 +BRF:36 +BRH:0 +end_of_record +TN: +SF:src/engine/eval.js +FN:6,(anonymous_0) +FN:25,(anonymous_1) +FN:35,(anonymous_2) +FN:41,(anonymous_3) +FN:42,(anonymous_4) +FN:42,(anonymous_5) +FN:53,(anonymous_6) +FN:58,(anonymous_7) +FNF:8 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +DA:8,0 +DA:9,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:14,0 +DA:16,0 +DA:17,0 +DA:19,0 +DA:20,0 +DA:22,0 +DA:26,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:34,0 +DA:35,0 +DA:37,0 +DA:38,0 +DA:41,0 +DA:42,0 +DA:49,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:65,0 +LF:33 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/engine/instructor.js +FN:11,(anonymous_0) +FN:14,(anonymous_1) +FN:44,(anonymous_2) +FN:49,(anonymous_3) +FN:64,(anonymous_4) +FN:69,(anonymous_5) +FN:75,(anonymous_6) +FN:81,(anonymous_7) +FN:82,clean +FN:92,(anonymous_9) +FN:93,(anonymous_10) +FN:97,(anonymous_11) +FN:105,(anonymous_12) +FN:114,(anonymous_13) +FN:123,(anonymous_14) +FN:146,(anonymous_15) +FN:162,(anonymous_16) +FNF:17 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,clean +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +DA:7,1 +DA:8,1 +DA:12,0 +DA:14,0 +DA:15,0 +DA:16,0 +DA:18,0 +DA:20,0 +DA:22,0 +DA:26,0 +DA:27,0 +DA:29,0 +DA:30,0 +DA:33,0 +DA:34,0 +DA:36,0 +DA:38,0 +DA:40,0 +DA:41,0 +DA:45,0 +DA:46,0 +DA:50,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:58,0 +DA:61,0 +DA:65,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:75,0 +DA:76,0 +DA:78,0 +DA:83,0 +DA:84,0 +DA:85,0 +DA:87,0 +DA:89,0 +DA:92,0 +DA:93,0 +DA:98,0 +DA:99,0 +DA:101,0 +DA:106,0 +DA:107,0 +DA:108,0 +DA:110,0 +DA:116,0 +DA:117,0 +DA:119,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:132,0 +DA:133,0 +DA:134,0 +DA:135,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:141,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:155,0 +DA:163,0 +DA:165,0 +DA:166,0 +LF:77 +LH:2 +BRDA:15,0,0,0 +BRDA:15,0,1,0 +BRDA:52,1,0,0 +BRDA:52,1,1,0 +BRDA:70,2,0,0 +BRDA:70,2,1,0 +BRDA:84,3,0,0 +BRDA:84,3,1,0 +BRDA:98,4,0,0 +BRDA:98,4,1,0 +BRDA:107,5,0,0 +BRDA:107,5,1,0 +BRDA:116,6,0,0 +BRDA:116,6,1,0 +BRDA:124,7,0,0 +BRDA:124,7,1,0 +BRDA:126,8,0,0 +BRDA:126,8,1,0 +BRDA:128,9,0,0 +BRDA:128,9,1,0 +BRDA:129,10,0,0 +BRDA:129,10,1,0 +BRDA:130,11,0,0 +BRDA:130,11,1,0 +BRDA:132,12,0,0 +BRDA:132,12,1,0 +BRDA:134,13,0,0 +BRDA:134,13,1,0 +BRDA:138,14,0,0 +BRDA:138,14,1,0 +BRDA:149,15,0,0 +BRDA:149,15,1,0 +BRDA:165,16,0,0 +BRDA:165,16,1,0 +BRDA:165,17,0,0 +BRDA:165,17,1,0 +BRF:36 +BRH:0 +end_of_record +TN: +SF:src/engine/on_change.js +FN:4,(anonymous_0) +FNF:1 +FNH:0 +FNDA:0,(anonymous_0) +DA:5,0 +DA:6,0 +DA:7,0 +DA:9,0 +DA:11,0 +LF:5 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/engine/on_eval.js +FN:9,(anonymous_0) +FN:79,(anonymous_1) +FN:113,(anonymous_2) +FN:149,(anonymous_3) +FNF:4 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +DA:9,1 +DA:10,0 +DA:12,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:84,0 +DA:86,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:91,0 +DA:92,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:103,0 +DA:105,0 +DA:108,0 +DA:110,0 +DA:114,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:121,0 +DA:122,0 +DA:123,0 +DA:124,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:131,0 +DA:133,0 +DA:134,0 +DA:141,0 +DA:142,0 +DA:143,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:154,0 +DA:156,0 +DA:158,0 +LF:48 +LH:1 +BRDA:82,0,0,0 +BRDA:82,0,1,0 +BRDA:89,1,0,0 +BRDA:89,1,1,0 +BRDA:92,2,0,0 +BRDA:92,2,1,0 +BRDA:124,3,0,0 +BRDA:124,3,1,0 +BRDA:141,4,0,0 +BRDA:141,4,1,0 +BRDA:152,5,0,0 +BRDA:152,5,1,0 +BRF:12 +BRH:0 +end_of_record +TN: +SF:src/engine/on_run.js +FN:5,findActualInstructorOffset +FN:17,(anonymous_1) +FN:101,(anonymous_2) +FN:141,(anonymous_3) +FN:178,(anonymous_4) +FNF:5 +FNH:0 +FNDA:0,findActualInstructorOffset +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +DA:6,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:12,1 +DA:13,1 +DA:17,1 +DA:18,0 +DA:19,0 +DA:23,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:106,0 +DA:108,0 +DA:110,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:119,0 +DA:134,0 +DA:136,0 +DA:138,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:157,0 +DA:158,0 +DA:160,0 +DA:162,0 +DA:163,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:179,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:183,0 +DA:185,0 +DA:187,0 +LF:52 +LH:3 +BRDA:9,0,0,0 +BRDA:9,0,1,0 +BRDA:19,1,0,0 +BRDA:19,1,1,0 +BRDA:115,2,0,0 +BRDA:115,2,1,0 +BRDA:152,3,0,0 +BRDA:152,3,1,0 +BRDA:170,4,0,0 +BRDA:170,4,1,0 +BRDA:181,5,0,0 +BRDA:181,5,1,0 +BRF:12 +BRH:0 +end_of_record +TN: +SF:src/engine/on_sample.js +FN:4,(anonymous_0) +FNF:1 +FNH:0 +FNDA:0,(anonymous_0) +DA:5,0 +DA:6,0 +DA:7,0 +DA:9,0 +LF:4 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/engine/run.js +FN:5,(anonymous_0) +FN:42,(anonymous_1) +FN:46,(anonymous_2) +FN:60,(anonymous_3) +FN:66,(anonymous_4) +FN:67,(anonymous_5) +FN:67,(anonymous_6) +FN:78,(anonymous_7) +FN:88,(anonymous_8) +FN:93,(anonymous_9) +FN:94,(anonymous_10) +FN:94,(anonymous_11) +FNF:12 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +DA:6,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:10,0 +DA:13,0 +DA:14,0 +DA:16,0 +DA:18,0 +DA:19,0 +DA:21,0 +DA:26,0 +DA:27,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:35,0 +DA:37,0 +DA:39,0 +DA:43,0 +DA:44,0 +DA:46,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:63,0 +DA:66,0 +DA:67,0 +DA:74,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:85,0 +DA:87,0 +DA:88,0 +DA:89,0 +DA:93,0 +DA:94,0 +DA:99,0 +LF:54 +LH:0 +BRDA:9,0,0,0 +BRDA:9,0,1,0 +BRDA:26,1,0,0 +BRDA:26,1,1,0 +BRDA:57,2,0,0 +BRDA:57,2,1,0 +BRDA:82,3,0,0 +BRDA:82,3,1,0 +BRDA:82,4,0,0 +BRDA:82,4,1,0 +BRF:10 +BRH:0 +end_of_record +TN: +SF:src/engine/sample.js +FN:4,(anonymous_0) +FNF:1 +FNH:0 +FNDA:0,(anonymous_0) +DA:5,0 +DA:7,0 +DA:8,0 +DA:10,0 +LF:4 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/engine/student.js +FN:4,(anonymous_0) +FN:8,(anonymous_1) +FN:25,(anonymous_2) +FN:39,(anonymous_3) +FN:58,(anonymous_4) +FN:62,(anonymous_5) +FN:80,(anonymous_6) +FN:112,(anonymous_7) +FN:122,(anonymous_8) +FN:124,(anonymous_9) +FN:129,(anonymous_10) +FN:132,(anonymous_11) +FN:135,(anonymous_12) +FN:145,(anonymous_13) +FN:177,(anonymous_14) +FN:186,(anonymous_15) +FN:194,(anonymous_16) +FNF:17 +FNH:0 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:0,(anonymous_12) +FNDA:0,(anonymous_13) +FNDA:0,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:0,(anonymous_16) +DA:5,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:10,0 +DA:12,0 +DA:15,0 +DA:20,0 +DA:22,0 +DA:26,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:32,0 +DA:35,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:53,0 +DA:59,0 +DA:63,0 +DA:81,0 +DA:85,0 +DA:86,0 +DA:90,0 +DA:101,0 +DA:102,0 +DA:113,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:128,0 +DA:129,0 +DA:131,0 +DA:132,0 +DA:134,0 +DA:135,0 +DA:138,0 +DA:139,0 +DA:146,0 +DA:148,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:154,0 +DA:157,0 +DA:163,0 +DA:164,0 +DA:165,0 +DA:168,0 +DA:174,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:182,0 +DA:187,0 +DA:188,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:194,0 +DA:195,0 +LF:79 +LH:0 +BRDA:9,0,0,0 +BRDA:9,0,1,0 +BRDA:28,1,0,0 +BRDA:28,1,1,0 +BRDA:29,2,0,0 +BRDA:29,2,1,0 +BRDA:29,3,0,0 +BRDA:29,3,1,0 +BRDA:40,4,0,0 +BRDA:40,4,1,0 +BRDA:42,5,0,0 +BRDA:42,5,1,0 +BRDA:44,6,0,0 +BRDA:44,6,1,0 +BRDA:46,7,0,0 +BRDA:46,7,1,0 +BRDA:50,8,0,0 +BRDA:50,8,1,0 +BRDA:63,9,0,0 +BRDA:63,9,1,0 +BRDA:63,9,2,0 +BRDA:81,10,0,0 +BRDA:81,10,1,0 +BRDA:125,11,0,0 +BRDA:125,11,1,0 +BRDA:128,12,0,0 +BRDA:128,12,1,0 +BRDA:131,13,0,0 +BRDA:131,13,1,0 +BRDA:134,14,0,0 +BRDA:134,14,1,0 +BRDA:179,15,0,0 +BRDA:179,15,1,0 +BRDA:189,16,0,0 +BRDA:189,16,1,0 +BRF:35 +BRH:0 +end_of_record diff --git a/docs/TESTING.md b/docs/TESTING.md new file mode 100644 index 000000000..e65b9000e --- /dev/null +++ b/docs/TESTING.md @@ -0,0 +1,176 @@ +# BlockPy Testing Guide + +This document describes the testing framework and how to run tests for the BlockPy interface. + +## Overview + +BlockPy now includes a comprehensive test suite that covers the main interface components and core functionality. The tests are built using Jest, a popular JavaScript testing framework. + +## Test Categories + +### Unit Tests +- **Utilities** (`tests/utilities.test.js`) - Tests for utility functions like `arrayMove` +- **Storage** (`tests/storage.test.js`) - Tests for localStorage wrapper functionality +- **Interface** (`tests/interface.test.js`) - Tests for UI interface components and subscriptions +- **Editors** (`tests/editors.test.js`) - Tests for editor enums and configuration +- **Feedback** (`tests/feedback.test.js`) - Tests for feedback system HTML and class initialization +- **Dialog** (`tests/dialog.test.js`) - Tests for modal dialog system +- **BlockPy Main** (`tests/blockpy.test.js`) - Tests for main BlockPy class exports and structure + +### Integration Tests +- **Integration** (`tests/integration.test.js`) - Tests for module loading, class initialization, and workflow validation + +## Running Tests + +### Basic Commands + +```bash +# Run all tests +npm test + +# Run tests in watch mode (automatically re-run when files change) +npm run test:watch + +# Run tests with coverage report +npm run test:coverage +``` + +### Running Specific Tests + +```bash +# Run a specific test file +npm test -- tests/utilities.test.js + +# Run tests matching a pattern +npm test -- --testNamePattern="arrayMove" + +# Run tests for a specific component +npm test -- --testPathPatterns=interface +``` + +## Test Structure + +### Setup +- `tests/setup.js` - Global test setup file that mocks external dependencies like Skulpt, jQuery, and FilePond +- `jest.config.js` - Jest configuration including test patterns, coverage settings, and module mapping + +### Mocking Strategy +Tests use comprehensive mocking for external dependencies: +- **Skulpt** - Mocked Python-to-JS compiler functions +- **jQuery/Knockout** - Mocked for DOM manipulation and data binding +- **FilePond** - Mocked file upload component +- **LocalStorage** - Mocked browser storage API +- **CSS imports** - Mapped to identity-obj-proxy to avoid import errors + +### Test Patterns + +Tests follow these patterns: +1. **Module Loading** - Verify modules can be imported without errors +2. **Class Instantiation** - Test that classes can be created with expected parameters +3. **Method Existence** - Verify required methods exist on class prototypes +4. **HTML Template Validation** - Check that HTML templates contain expected elements and accessibility attributes +5. **Functionality Testing** - Test specific behaviors like subscriptions, callbacks, and data flow + +## Coverage + +Current test coverage includes: +- Core utility functions (17.8% of utilities.js) +- Storage wrapper (71% of storage.js) +- Interface components (31.8% of interface.js) +- Dialog system (40.3% of dialog.js) +- Basic class structure validation for all main components + +## Adding New Tests + +### Creating a New Test File + +1. Create a file in the `tests/` directory with the pattern `*.test.js` +2. Import the module you want to test +3. Use `describe()` blocks to group related tests +4. Use `test()` or `it()` functions for individual test cases + +Example: +```javascript +import { MyComponent } from '../src/my-component.js'; + +describe('MyComponent', () => { + test('should initialize with default values', () => { + const component = new MyComponent(); + expect(component.someProperty).toBe('expectedValue'); + }); +}); +``` + +### Best Practices + +1. **Mock External Dependencies** - Use Jest mocks for any external libraries or browser APIs +2. **Test Public Interface** - Focus on testing the public API rather than internal implementation +3. **Use Descriptive Names** - Test names should clearly describe what is being tested +4. **Isolate Tests** - Each test should be independent and not rely on other tests +5. **Clean Up** - Use `beforeEach()` and `afterEach()` to set up and tear down test state + +### Testing BlockPy Components + +When testing BlockPy components, typically you'll need to: +1. Mock the main BlockPy instance structure +2. Mock jQuery-style DOM elements +3. Mock Knockout observables if testing data binding +4. Test that component initialization doesn't throw +5. Test that required DOM elements are found/created +6. Test that subscriptions and callbacks are set up correctly + +Example: +```javascript +const mockMain = { + model: { + // Mock model structure + execution: { feedback: { subscribe: jest.fn() } } + } +}; + +const mockTag = { + find: jest.fn(() => ({ text: jest.fn(), html: jest.fn() })) +}; + +const component = new MyBlockPyComponent(mockMain, mockTag); +expect(component.main).toBe(mockMain); +``` + +## Troubleshooting + +### Common Issues + +1. **Module Import Errors** - Ensure all external dependencies are mocked in `tests/setup.js` +2. **Reserved Word Errors** - Avoid using JavaScript reserved words as variable names +3. **Async Issues** - Use `async/await` or return promises for asynchronous tests +4. **Mock Issues** - Make sure mocks are set up before the modules are imported + +### Debugging Tests + +1. Use `console.log()` in tests to debug (but remove before committing) +2. Run single tests with `npm test -- --testNamePattern="test name"` +3. Use `--verbose` flag to see individual test results +4. Check Jest documentation for advanced debugging options + +## Future Improvements + +Potential areas for expanding test coverage: +1. More comprehensive editor testing +2. Engine and execution flow testing +3. Server communication testing +4. File management system testing +5. End-to-end workflow testing +6. Performance testing +7. Accessibility testing +8. Cross-browser compatibility testing + +## Dependencies + +The testing framework uses these key dependencies: +- `jest` - Main testing framework +- `jest-environment-jsdom` - DOM environment for browser-like testing +- `babel-jest` - ES6+ transpilation for tests +- `identity-obj-proxy` - CSS import mocking +- `filepond` - File upload component (mocked in tests) + +All test dependencies are installed as devDependencies and won't affect the production build. \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..a3a35d2e4 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,40 @@ +module.exports = { + // Test environment + testEnvironment: 'jsdom', + + // Transform ES6 modules and CSS imports + transform: { + '^.+\\.js$': 'babel-jest', + }, + + // Setup files to run before tests + setupFilesAfterEnv: ['/tests/setup.js'], + + // Test file patterns + testMatch: [ + '/tests/**/*.test.js', + '/src/**/*.test.js' + ], + + // Coverage configuration + collectCoverageFrom: [ + 'src/**/*.js', + '!src/**/*.test.js', + '!src/skulpt_modules/**', + '!src/blockly_blocks/**' + ], + + // Module resolution + moduleDirectories: ['node_modules', 'src'], + + // Ignore patterns + testPathIgnorePatterns: [ + '/node_modules/', + '/dist/' + ], + + // Mock CSS imports + moduleNameMapper: { + '\\.(css|less|scss)$': 'identity-obj-proxy' + } +}; \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 565e9a50b..1ad0a68da 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -9,13 +9,19 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@babel/core": "7.0.0", - "@babel/preset-env": "7.11.0", + "@babel/core": "^7.28.3", + "@babel/preset-env": "^7.28.3", + "babel-jest": "^30.1.2", "babel-loader": "8.1.0", "css-loader": "4.2.0", "eslint": "5.0.0", "eslint-loader": "4.0.2", + "filepond": "^4.32.8", + "identity-obj-proxy": "^3.0.0", + "jest": "^30.1.2", + "jest-environment-jsdom": "^30.1.2", "jquery": "3.5.1", + "jsdom": "^26.1.0", "knockout": "3.5.1", "mini-css-extract-plugin": "0.9.0", "path": "0.12.7", @@ -24,6 +30,41 @@ "yargs": "15.4.1" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -40,60 +81,75 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, - "dependencies": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0.tgz", - "integrity": "sha512-nrvxS5u6QUN5gLl1GEakIcmOeoUHT1/gQtdMRq18WFURJ5osn4ppJLVSseMQo4zVWKJfBTF4muIYijXUnKlRLQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.0.0", - "@babel/helpers": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "convert-source-map": "^1.1.0", - "debug": "^3.1.0", - "json5": "^0.5.0", - "lodash": "^4.17.10", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/@babel/core/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/@babel/core/node_modules/ms": { @@ -103,241 +159,302 @@ "dev": true, "license": "MIT" }, - "node_modules/@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } + "license": "MIT" }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.11.0" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, - "dependencies": { - "lodash": "^4.17.19" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.11.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.11.0" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { @@ -360,16 +477,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { @@ -402,211 +532,195 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -614,10 +728,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -626,25 +740,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -722,1830 +828,2233 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", + "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", + "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, + "license": "MIT", "dependencies": { - "@xtuc/long": "4.2.2" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "@babel/core": "^7.0.0" } }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "node_modules/@babel/preset-env": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "license": "MIT", "dependencies": { - "envinfo": "^7.7.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, "peerDependencies": { - "webpack-cli": "4.x.x" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", - "peerDependencies": { - "webpack-cli": "4.x.x" + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, "peerDependencies": { - "ajv": ">=5.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, "peerDependencies": { - "ajv": "^6.9.1" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "node_modules/@emnapi/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "node_modules/@emnapi/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "sprintf-js": "~1.0.2" + "tslib": "^2.4.0" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "0BSD", + "optional": true }, - "node_modules/arr-flatten": { + "node_modules/@emnapi/wasi-threads": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "node_modules/@emnapi/wasi-threads/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "bin": { - "atob": "bin/atob.js" + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 4.5.0" + "node": ">=8" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "engines": { + "node": ">=8" } }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/@jest/console": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.2.tgz", + "integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6.9" + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.2.tgz", + "integrity": "sha512-iSLOojkYgM7Lw0FF5egecZh+CiLWe4xICM3WOMjFbewhbWn+ixEoPwY7oK9jSCnLLphMFAjussXp7CE3tHa5EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.1.2", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.1.2", + "@jest/test-result": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.5", + "jest-config": "30.1.2", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.0", + "jest-resolve-dependencies": "30.1.2", + "jest-runner": "30.1.2", + "jest-runtime": "30.1.2", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "jest-watcher": "30.1.2", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 8.9.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/@jest/core/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "object.assign": "^4.1.0" + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/@jest/core/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "deprecated": "Please upgrade to v1.0.1", + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "deprecated": "Please upgrade to v1.0.1", + "node_modules/@jest/core/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/@jest/core/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true, + "node_modules/@jest/core/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@jest/environment": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.2.tgz", + "integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==", "dev": true, + "license": "MIT", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.1.2.tgz", + "integrity": "sha512-u8kTh/ZBl97GOmnGJLYK/1GuwAruMC4hoP6xuk/kwltmVWsA9u/6fH1/CsPVGt2O+Wn2yEjs8n1B1zZJ62Cx0w==", "dev": true, + "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/@jest/expect": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.2.tgz", + "integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==", "dev": true, + "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "expect": "30.1.2", + "jest-snapshot": "30.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/@jest/expect-utils": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.2.tgz", + "integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==", "dev": true, + "license": "MIT", "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/@jest/fake-timers": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.2.tgz", + "integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==", "dev": true, + "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "node_modules/@jest/globals": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.2.tgz", + "integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@types/node": "*", + "jest-regex-util": "30.0.1" }, "engines": { - "node": ">= 6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/@jest/reporters": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.2.tgz", + "integrity": "sha512-8Jd7y3DUFBn8dG/bNJ2blmaJmT2Up74WAXkUJsbL0OuEZHDRRMnS4JmRtLArW2d0H5k8RDdhNN7j70Ki16Zr5g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.1.2", + "@jest/test-result": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } - ] + } }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "pako": "~1.0.5" + "balanced-match": "^1.0.0" } }, - "node_modules/browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - }, - "bin": { - "browserslist": "cli.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=10" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@jest/snapshot-utils": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz", + "integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@jest/snapshot-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "node_modules/@jest/snapshot-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/snapshot-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^0.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", "dev": true, "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@jest/source-map/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001111", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz", - "integrity": "sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@jest/test-result": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.2.tgz", + "integrity": "sha512-mpKFr8DEpfG5aAfQYA5+3KneAsRBXhF7zwtwqT4UeYBckoOPD1MzVxU6gDHwx4gRB7I1MKL6owyJzr8QRq402Q==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@jest/console": "30.1.2", + "@jest/types": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@jest/test-sequencer": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.2.tgz", + "integrity": "sha512-v3vawuj2LC0XjpzF4q0pI0ZlQvMBDNqfRZZ2yHqcsGt7JEYsDK2L1WwrybEGlnOaEvnDFML/Y9xWLiW47Dda8A==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@jest/test-result": "30.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/chalk/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@jest/transform": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.2.tgz", + "integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@babel/core": "^7.27.4", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "node_modules/@jest/transform/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", - "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.10.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "~2.1.2" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@jest/transform/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/chokidar/node_modules/is-number": { + "node_modules/@jest/transform/node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "optional": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/chokidar/node_modules/to-regex-range": { + "node_modules/@jest/transform/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2553,476 +3062,4482 @@ "node": ">=8.0" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/@jest/types": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", + "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": ">=6.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/@sinclair/typebox": { + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, "license": "MIT" }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "engines": [ - "node >= 0.8" - ], + "license": "BSD-3-Clause", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "type-detect": "4.0.8" } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "deprecated": "This package is no longer supported.", + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "tslib": "^2.4.0" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "node_modules/@tybys/wasm-util/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "0BSD", + "optional": true }, - "node_modules/core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "@babel/types": "^7.28.2" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } + "license": "MIT" }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" + "@types/istanbul-lib-report": "*" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, + "license": "MIT", "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/css-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.0.tgz", - "integrity": "sha512-ko7a9b0iFpWtk9eSI/C8IICvZeGtYnjxYjw45rJprokXj/+kBd/siX4vAIBq9Uij8Jubc4jL1EvSnTjCEwaHSw==", + "node_modules/@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.0.0", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "undici-types": "~7.10.0" } }, - "node_modules/css-loader/node_modules/camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/css-loader/node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-jest": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.2.tgz", + "integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.1.2", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 6.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", + "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", + "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001737", + "electron-to-chromium": "^1.5.211", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001739", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001739.tgz", + "integrity": "sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", + "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.0.tgz", + "integrity": "sha512-ko7a9b0iFpWtk9eSI/C8IICvZeGtYnjxYjw45rJprokXj/+kBd/siX4vAIBq9Uij8Jubc4jL1EvSnTjCEwaHSw==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-loader/node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/css-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.211", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz", + "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.0.0.tgz", + "integrity": "sha512-MA0YWJLeK7BPEBxJCINvKnQdKpeTwbac3Xonh0PPFjWYZkowZf+Xl30lJWJ/BWOqFQdAdPcyOh0aBqlbH6ojAg==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.5.0", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.1.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "string.prototype.matchall": "^2.0.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + } + }, + "node_modules/eslint-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", + "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", + "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "loader-utils": "^2.0.0", + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/eslint-loader/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/eslint-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-loader/node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/eslint-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-loader/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "dependencies": { + "estraverse": "^4.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz", + "integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "deprecated": "This module is no longer supported.", + "dev": true + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/filepond": { + "version": "4.32.8", + "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.32.8.tgz", + "integrity": "sha512-svcz5lh4YKrV92zogqpOKzVEOXbD/zT7RAHso5Lqp0GujP+kxF2PSl9Tb6AdYVzfMRtoPsExcphJPpBLoo8eYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, "bin": { - "json5": "lib/cli.js" + "node-which": "bin/node-which" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/css-loader/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "map-cache": "^0.2.2" }, "engines": { - "node": ">=8.9.0" + "node": ">=0.10.0" } }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, "engines": { "node": ">=4" } }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -3031,86 +7546,99 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/inspect-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { - "node": ">=0.10" + "node": ">=4" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3119,16 +7647,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3137,2473 +7676,2965 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { + "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "deprecated": "Please upgrade to v1.0.1", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "deprecated": "Please upgrade to v1.0.1", + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/des.js": { + "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" + "node": ">= 14" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } + "license": "MIT" }, - "node_modules/electron-to-chromium": { - "version": "1.3.523", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.523.tgz", - "integrity": "sha512-D4/3l5DpciddD92IDRtpLearQSGzly8FwBJv+nITvLH8YJrFabpDFe4yuiOJh2MS4/EsXqyQTXyw1toeYPtshQ==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "dependencies": { - "once": "^1.4.0" - } + "license": "MIT" }, - "node_modules/enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=6.9.0" + "node": ">=10.17.0" } }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=0.10.0" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "postcss": "^7.0.14" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "dev": true, + "license": "MIT", "dependencies": { - "prr": "~1.0.1" + "harmony-reflect": "^1.4.6" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=4" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "node_modules/escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/eslint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.0.0.tgz", - "integrity": "sha512-MA0YWJLeK7BPEBxJCINvKnQdKpeTwbac3Xonh0PPFjWYZkowZf+Xl30lJWJ/BWOqFQdAdPcyOh0aBqlbH6ojAg==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.5.0", - "babel-code-frame": "^6.26.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.5.0", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^5.2.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.11.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.1.0", - "require-uncached": "^1.0.3", - "semver": "^5.5.0", - "string.prototype.matchall": "^2.0.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^4.0.3", - "text-table": "^0.2.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + "node": ">= 0.4" } }, - "node_modules/eslint-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", - "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", - "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "deprecated": "Please upgrade to v0.1.7", "dev": true, "dependencies": { - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "loader-utils": "^2.0.0", - "object-hash": "^2.0.3", - "schema-utils": "^2.6.5" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 10.13.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0", - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-loader/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/eslint-loader/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "optional": true, "dependencies": { - "p-locate": "^4.1.0" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/eslint-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "deprecated": "Please upgrade to v0.1.5", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint-loader/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esprima": { + "node_modules/is-glob": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "dependencies": { - "estraverse": "^4.1.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "node": ">=0.10.0" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^0.1.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, + "license": "ISC" + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.0" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "deprecated": "Please upgrade to v1.0.1", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^6.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "deprecated": "Please upgrade to v1.0.1", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^6.0.0" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/is-descriptor": { + "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true, - "license": "MIT", "engines": { - "node": ">= 4.9.1" + "node": ">=4" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "deprecated": "This module is no longer supported.", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "node_modules/figures": { + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" }, - "node_modules/file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "is-extendable": "^0.1.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "locate-path": "^3.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "semver": "^7.5.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "has-flag": "^4.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "map-cache": "^0.2.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/jest": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.1.2.tgz", + "integrity": "sha512-iLreJmUWdANLD2UIbebrXxQqU9jIxv2ahvrBNfff55deL9DtVxm8ZJBLk/kmn0AQ+FyCTrNSlGbMdTgSasldYA==", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@jest/core": "30.1.2", + "@jest/types": "30.0.5", + "import-local": "^3.2.0", + "jest-cli": "30.1.2" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "deprecated": "This package is no longer supported.", + "node_modules/jest-changed-files": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", + "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "execa": "^5.1.1", + "jest-util": "30.0.5", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "node_modules/jest-circus": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.2.tgz", + "integrity": "sha512-pyqgRv00fPbU3QBjN9I5QRd77eCWA19NA7BLgI1veFvbUIFpeDCKbnG1oyRr6q5/jPEW2zDfqZ/r6fvfE85vrA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/test-result": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-runtime": "30.1.2", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "p-limit": "^3.1.0", + "pretty-format": "30.0.5", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "node_modules/jest-cli": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.2.tgz", + "integrity": "sha512-Q7H6GGo/0TBB8Mhm3Ab7KKJHn6GeMVff+/8PVCQ7vXXahvr5sRERnNbxuVJAMiVY2JQm5roA7CHYOYlH+gzmUg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "@jest/core": "30.1.2", + "@jest/test-result": "30.1.2", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.1.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "yargs": "^17.7.2" }, - "engines": { - "node": ">= 0.4" + "bin": { + "jest": "bin/jest.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "optional": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=12" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/jest-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "node_modules/jest-cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/jest-config": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.2.tgz", + "integrity": "sha512-gCuBeE/cksjQ3e1a8H4YglZJuVPcnLZQK9jC70E6GbkHNQKPasnOO+r9IYdsUbAekb6c7eVRR8laGLMF06gMqg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.1.2", + "@jest/types": "30.0.5", + "babel-jest": "30.1.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.1.2", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.1.2", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.0", + "jest-runner": "30.1.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "engines": { - "node": ">=4" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/jest-config/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "fill-range": "^7.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/jest-config/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/jest-config/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-symbols": "^1.0.3" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/jest-config/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-config/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/jest-config/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "is-buffer": "^1.1.5" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/jest-config/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8.0" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/jest-diff": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", + "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/jest-docblock": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", + "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", "dev": true, + "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/jest-each": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.1.0.tgz", + "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "jest-util": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^7.0.14" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/jest-environment-jsdom": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.1.2.tgz", + "integrity": "sha512-LXsfAh5+mDTuXDONGl1ZLYxtJEaS06GOoxJb2arcJTjIfh1adYg8zLD8f6P0df8VmjvCaMrLmc1PgHUI/YUTbg==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@jest/environment": "30.1.2", + "@jest/environment-jsdom-abstract": "30.1.2", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jsdom": "^26.1.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/jest-environment-node": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.2.tgz", + "integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.1.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/jest-haste-map": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.1.0.tgz", + "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@jest/types": "30.0.5", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" } }, - "node_modules/import-local/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/jest-haste-map/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { "node": ">=8" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/jest-haste-map/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/jest-haste-map/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=0.12.0" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "node_modules/jest-haste-map/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "node_modules/jest-haste-map/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/jest-leak-detector": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", + "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/get-type": "30.1.0", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/jest-matcher-utils": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", + "integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz", + "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/jest-message-util/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "node_modules/jest-message-util/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/jest-message-util/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "deprecated": "Please upgrade to v0.1.7", + "node_modules/jest-message-util/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "node_modules/jest-message-util/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0" } }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "node_modules/jest-mock": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", "dev": true, "license": "MIT", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "node_modules/jest-resolve": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.0.tgz", + "integrity": "sha512-hASe7D/wRtZw8Cm607NrlF7fi3HWC5wmA5jCVc2QjQAB2pTwP9eVZILGEi6OeSLNUtE1zb04sXRowsdh5CUjwA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/jest-resolve-dependencies": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.2.tgz", + "integrity": "sha512-HJjyoaedY4wrwda+eqvgjbwFykrAnQEmhuT0bMyOV3GQIyLPcunZcjfkm77Zr11ujwl34ySdc4qYnm7SG75TjA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "deprecated": "Please upgrade to v0.1.5", + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "node_modules/jest-runner": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.2.tgz", + "integrity": "sha512-eu9AzpDY/QV+7NuMg6fZMpQ7M24cBkl5dyS1Xj7iwDPDriOmLUXR8rLojESibcIX+sCDTO4KvUeaxWCH1fbTvg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" + "@jest/console": "30.1.2", + "@jest/environment": "30.1.2", + "@jest/test-result": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.1.2", + "jest-haste-map": "30.1.0", + "jest-leak-detector": "30.1.0", + "jest-message-util": "30.1.0", + "jest-resolve": "30.1.0", + "jest-runtime": "30.1.2", + "jest-util": "30.0.5", + "jest-watcher": "30.1.2", + "jest-worker": "30.1.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/jest-runtime": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.2.tgz", + "integrity": "sha512-zU02si+lAITgyRmVRgJn/AB4cnakq8+o7bP+5Z+N1A4r2mq40zGbmrg3UpYQWCkeim17tx8w1Tnmt6tQ6y9PGA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/globals": "30.1.2", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.1.0", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "optional": true, + "license": "ISC", "dependencies": { - "is-extglob": "^2.1.1" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/jest-snapshot": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.2.tgz", + "integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.1.2", + "graceful-fs": "^4.2.11", + "jest-diff": "30.1.2", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/jest-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", + "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", "dev": true, + "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "node_modules/jest-validate": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.1.0.tgz", + "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.0.5" }, "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/jest-watcher": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.2.tgz", + "integrity": "sha512-MtoGuEgqsBM8Jkn52oEj+mXLtF94+njPlHI5ydfduZL5MHrTFr14ZG1CUX1xAbY23dbSZCCEkEPhBM3cQd12Jg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/test-result": "30.1.2", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.5", + "string-length": "^4.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "node_modules/jest-worker": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.1.0.tgz", + "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.5", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jquery": { @@ -5632,16 +10663,57 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-better-errors": { @@ -5650,6 +10722,13 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5708,18 +10787,6 @@ "node": ">=6" } }, - "node_modules/levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "dependencies": { - "leven": "^3.1.0" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -5734,6 +10801,13 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -5776,17 +10850,12 @@ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -5810,6 +10879,16 @@ "node": ">=6" } }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5862,6 +10941,13 @@ "readable-stream": "^2.0.1" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5963,6 +11049,16 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -6049,6 +11145,14 @@ "dev": true, "license": "ISC" }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -6071,6 +11175,22 @@ "node": ">=0.10.0" } }, + "node_modules/napi-postinstall": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6091,6 +11211,13 @@ "dev": true, "license": "MIT" }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -6129,10 +11256,11 @@ "dev": true }, "node_modules/node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", - "dev": true + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -6158,6 +11286,36 @@ "node": ">=4" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6391,6 +11549,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -6422,6 +11587,38 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6496,6 +11693,30 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -6535,11 +11756,11 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "optional": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6556,6 +11777,16 @@ "node": ">=6" } }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -6724,6 +11955,34 @@ "node": ">=0.10.0" } }, + "node_modules/pretty-format": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -6813,14 +12072,32 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/query-string": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", @@ -6872,6 +12149,13 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -6937,38 +12221,25 @@ } }, "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -7014,47 +12285,54 @@ } }, "node_modules/regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/remove-trailing-separator": { @@ -7218,6 +12496,13 @@ "inherits": "^2.0.1" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -7341,6 +12626,19 @@ "dev": true, "license": "MIT" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -7593,6 +12891,16 @@ "dev": true, "license": "ISC" }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", @@ -7844,6 +13152,29 @@ "figgy-pudding": "^3.5.1" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -7940,15 +13271,46 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" @@ -8027,18 +13389,53 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -8084,6 +13481,29 @@ "node": ">=0.10.0" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, "node_modules/table": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", @@ -8216,6 +13636,21 @@ "node": ">=0.10.0" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8252,6 +13687,26 @@ "node": ">=0.6.0" } }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -8265,6 +13720,13 @@ "node": ">=0.6.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -8323,6 +13785,32 @@ "node": ">=0.10.0" } }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -8348,6 +13836,29 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -8451,42 +13962,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8539,6 +14061,41 @@ "node": ">= 4.0.0" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -8598,6 +14155,37 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8660,12 +14248,50 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/watchpack": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", @@ -8750,6 +14376,26 @@ "fsevents": "^1.2.7" } }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -8802,6 +14448,16 @@ "node": ">=0.10" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, "node_modules/webpack": { "version": "4.44.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", @@ -9007,6 +14663,56 @@ "node": ">=0.10.0" } }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -9162,6 +14868,25 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -9181,6 +14906,72 @@ "node": ">=0.10.0" } }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -9282,6 +15073,19 @@ "engines": { "node": ">=8" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index a8114360b..e7a276860 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "test": "tests" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", "dev": "webpack --progress --color --watch --env dev", "build": "webpack --env dev && webpack --env build" }, @@ -24,13 +26,19 @@ }, "homepage": "https://github.com/RealTimeWeb/blockpy#readme", "devDependencies": { - "@babel/core": "7.0.0", - "@babel/preset-env": "7.11.0", + "@babel/core": "^7.28.3", + "@babel/preset-env": "^7.28.3", + "babel-jest": "^30.1.2", "babel-loader": "8.1.0", "css-loader": "4.2.0", "eslint": "5.0.0", "eslint-loader": "4.0.2", + "filepond": "^4.32.8", + "identity-obj-proxy": "^3.0.0", + "jest": "^30.1.2", + "jest-environment-jsdom": "^30.1.2", "jquery": "3.5.1", + "jsdom": "^26.1.0", "knockout": "3.5.1", "mini-css-extract-plugin": "0.9.0", "path": "0.12.7", diff --git a/tests/blockpy.test.js b/tests/blockpy.test.js new file mode 100644 index 000000000..992e17e0d --- /dev/null +++ b/tests/blockpy.test.js @@ -0,0 +1,72 @@ +/** + * Tests for main BlockPy class + */ + +// Mock CSS imports and external dependencies +jest.mock('../src/css/blockpy.css', () => ({})); +jest.mock('../src/css/bootstrap_retheme.css', () => ({})); + +// Mock complex external modules that can't run in test environment +jest.mock('skulpt_modules/image', () => ({ + $builtinmodule: jest.fn() +})); +jest.mock('skulpt_modules/weakref', () => ({ + $builtinmodule: jest.fn() +})); + +describe('BlockPy Main Class', () => { + let mockContainer; + + beforeEach(() => { + // Create a mock DOM container + mockContainer = document.createElement('div'); + mockContainer.id = 'blockpy-test-container'; + document.body.appendChild(mockContainer); + }); + + afterEach(() => { + // Clean up DOM after each test + document.body.removeChild(mockContainer); + }); + + describe('Constructor', () => { + test('should accept configuration object', () => { + const config = { + attachmentPoint: mockContainer, + instructor: false + }; + + // We'll test that the constructor doesn't throw for now + // Full initialization requires many dependencies + expect(() => { + // Just test the import/require of the BlockPy class works + const { BlockPy } = require('../src/blockpy.js'); + expect(BlockPy).toBeDefined(); + expect(typeof BlockPy).toBe('function'); + }).not.toThrow(); + }); + }); + + describe('Class Definition', () => { + test('should export BlockPy class', () => { + const { BlockPy } = require('../src/blockpy.js'); + expect(BlockPy).toBeDefined(); + expect(typeof BlockPy).toBe('function'); + expect(BlockPy.prototype.constructor).toBe(BlockPy); + }); + + test('should have required methods on prototype', () => { + const { BlockPy } = require('../src/blockpy.js'); + expect(typeof BlockPy.prototype.initMain).toBe('function'); + expect(typeof BlockPy.prototype.getSetting).toBe('function'); + }); + }); + + describe('Module exports', () => { + test('should export CORGIS dataset constants', () => { + const { _IMPORTED_COMPLETE_DATASETS, _IMPORTED_DATASETS } = require('../src/blockpy.js'); + expect(_IMPORTED_COMPLETE_DATASETS).toBeDefined(); + expect(_IMPORTED_DATASETS).toBeDefined(); + }); + }); +}); \ No newline at end of file diff --git a/tests/dialog.test.js b/tests/dialog.test.js new file mode 100644 index 000000000..861bf8f21 --- /dev/null +++ b/tests/dialog.test.js @@ -0,0 +1,108 @@ +/** + * Tests for BlockPy dialog system + */ + +import { BlockPyDialog, DIALOG_HTML } from '../src/dialog.js'; + +describe('BlockPy Dialog', () => { + describe('DIALOG_HTML', () => { + test('should contain modal dialog markup', () => { + expect(DIALOG_HTML).toContain('blockpy-dialog'); + expect(DIALOG_HTML).toContain('modal'); + expect(DIALOG_HTML).toContain('modal-dialog'); + expect(DIALOG_HTML).toContain('modal-content'); + }); + + test('should have proper accessibility attributes', () => { + expect(DIALOG_HTML).toContain('role="dialog"'); + expect(DIALOG_HTML).toContain("aria-label='Dialog'"); + expect(DIALOG_HTML).toContain('aria-modal="true"'); + expect(DIALOG_HTML).toContain('role="document"'); + }); + + test('should have close and okay buttons', () => { + expect(DIALOG_HTML).toContain('modal-close'); + expect(DIALOG_HTML).toContain('modal-okay'); + expect(DIALOG_HTML).toContain('Close'); + expect(DIALOG_HTML).toContain('Okay'); + }); + }); + + describe('BlockPyDialog Class', () => { + let mockMain, mockTag, mockElements; + + beforeEach(() => { + // Create mock elements + mockElements = { + title: { text: jest.fn(), html: jest.fn() }, + body: { text: jest.fn(), html: jest.fn() }, + footer: { text: jest.fn(), html: jest.fn() }, + okay: { text: jest.fn(), click: jest.fn(), show: jest.fn(), hide: jest.fn() }, + close: { text: jest.fn(), click: jest.fn(), show: jest.fn(), hide: jest.fn() } + }; + + // Mock jQuery-like tag object + mockTag = { + find: jest.fn((selector) => { + switch (selector) { + case '.modal-title': return mockElements.title; + case '.modal-body': return mockElements.body; + case '.modal-footer': return mockElements.footer; + case '.modal-okay': return mockElements.okay; + case '.modal-close': return mockElements.close; + default: return { text: jest.fn(), html: jest.fn() }; + } + }), + modal: jest.fn() + }; + + mockMain = { + model: { + // Add any required model properties + } + }; + }); + + test('should initialize with main and tag', () => { + const dialog = new BlockPyDialog(mockMain, mockTag); + + expect(dialog.main).toBe(mockMain); + expect(dialog.tag).toBe(mockTag); + }); + + test('should find dialog elements in DOM', () => { + new BlockPyDialog(mockMain, mockTag); + + expect(mockTag.find).toHaveBeenCalledWith('.modal-title'); + expect(mockTag.find).toHaveBeenCalledWith('.modal-body'); + expect(mockTag.find).toHaveBeenCalledWith('.modal-footer'); + expect(mockTag.find).toHaveBeenCalledWith('.modal-okay'); + expect(mockTag.find).toHaveBeenCalledWith('.modal-close'); + }); + + test('should initialize callback functions', () => { + const dialog = new BlockPyDialog(mockMain, mockTag); + + expect(typeof dialog.yes).toBe('function'); + expect(typeof dialog.no).toBe('function'); + }); + + test('should store element references', () => { + const dialog = new BlockPyDialog(mockMain, mockTag); + + expect(dialog.titleTag).toBe(mockElements.title); + expect(dialog.bodyTag).toBe(mockElements.body); + expect(dialog.footerTag).toBe(mockElements.footer); + expect(dialog.okayButton).toBe(mockElements.okay); + expect(dialog.closeButton).toBe(mockElements.close); + }); + + test('should have default empty callback functions', () => { + const dialog = new BlockPyDialog(mockMain, mockTag); + + // Should not throw when called + expect(() => dialog.yes()).not.toThrow(); + expect(() => dialog.no()).not.toThrow(); + }); + }); +}); \ No newline at end of file diff --git a/tests/editors.test.js b/tests/editors.test.js new file mode 100644 index 000000000..40155c1f1 --- /dev/null +++ b/tests/editors.test.js @@ -0,0 +1,34 @@ +/** + * Tests for BlockPy editors system + */ + +import { EditorsEnum } from '../src/editors.js'; + +describe('BlockPy Editors', () => { + describe('EditorsEnum', () => { + test('should have all required editor types', () => { + expect(EditorsEnum.SUBMISSION).toBe('submission'); + expect(EditorsEnum.ASSIGNMENT).toBe('assignment'); + expect(EditorsEnum.INSTRUCTIONS).toBe('instructions'); + expect(EditorsEnum.ON_RUN).toBe('on_run'); + expect(EditorsEnum.ON_CHANGE).toBe('on_change'); + expect(EditorsEnum.ON_EVAL).toBe('on_eval'); + expect(EditorsEnum.STARTING_CODE).toBe('starting_code'); + expect(EditorsEnum.SAMPLE_SUBMISSIONS).toBe('sample_submissions'); + expect(EditorsEnum.INSTRUCTOR_FILE).toBe('instructor_file'); + }); + + test('should have string values for all enum entries', () => { + Object.values(EditorsEnum).forEach(value => { + expect(typeof value).toBe('string'); + expect(value.length).toBeGreaterThan(0); + }); + }); + + test('should have unique values for all enum entries', () => { + const values = Object.values(EditorsEnum); + const uniqueValues = [...new Set(values)]; + expect(values.length).toBe(uniqueValues.length); + }); + }); +}); \ No newline at end of file diff --git a/tests/feedback.test.js b/tests/feedback.test.js new file mode 100644 index 000000000..f3157169e --- /dev/null +++ b/tests/feedback.test.js @@ -0,0 +1,104 @@ +/** + * Tests for BlockPy feedback system + */ + +import { BlockPyFeedback, FEEDBACK_HTML } from '../src/feedback.js'; + +describe('BlockPy Feedback', () => { + describe('FEEDBACK_HTML', () => { + test('should contain feedback markup', () => { + expect(FEEDBACK_HTML).toContain('blockpy-feedback'); + expect(FEEDBACK_HTML).toContain('Feedback:'); + expect(FEEDBACK_HTML).toContain('Rate this Feedback:'); + }); + + test('should have proper accessibility attributes', () => { + expect(FEEDBACK_HTML).toContain('aria-label="Feedback"'); + expect(FEEDBACK_HTML).toContain('aria-live="polite"'); + expect(FEEDBACK_HTML).toContain('role="region"'); + }); + + test('should include rating functionality', () => { + expect(FEEDBACK_HTML).toContain('fa-thumbs-up'); + expect(FEEDBACK_HTML).toContain('fa-thumbs-down'); + expect(FEEDBACK_HTML).toContain('ui.feedback.rate'); + }); + }); + + describe('BlockPyFeedback Class', () => { + let mockMain, mockTag, mockModel; + + beforeEach(() => { + // Create mock jQuery-like tag object + mockTag = { + find: jest.fn().mockReturnValue({ + // Mock jQuery object methods + text: jest.fn(), + html: jest.fn(), + addClass: jest.fn(), + removeClass: jest.fn() + }) + }; + + // Create mock model structure + mockModel = { + execution: { + feedback: { + // Mock observable properties + subscribe: jest.fn(), + label: jest.fn(), + message: jest.fn(), + category: jest.fn() + } + }, + submission: { + code: { + subscribe: jest.fn() + } + }, + display: { + dirtySubmission: jest.fn() + } + }; + + mockMain = { + model: mockModel + }; + }); + + test('should initialize with main and tag', () => { + const feedback = new BlockPyFeedback(mockMain, mockTag); + + expect(feedback.main).toBe(mockMain); + expect(feedback.tag).toBe(mockTag); + expect(feedback.feedbackModel).toBe(mockModel.execution.feedback); + }); + + test('should find feedback elements in DOM', () => { + new BlockPyFeedback(mockMain, mockTag); + + expect(mockTag.find).toHaveBeenCalledWith('.blockpy-feedback-category'); + expect(mockTag.find).toHaveBeenCalledWith('.blockpy-feedback-label'); + expect(mockTag.find).toHaveBeenCalledWith('.blockpy-feedback-message'); + expect(mockTag.find).toHaveBeenCalledWith('.blockpy-feedback-positive'); + }); + + test('should subscribe to code changes', () => { + new BlockPyFeedback(mockMain, mockTag); + + expect(mockModel.submission.code.subscribe).toHaveBeenCalledWith(expect.any(Function)); + }); + + test('should mark submission as dirty when code changes', () => { + new BlockPyFeedback(mockMain, mockTag); + + // Get the callback function passed to subscribe + const callback = mockModel.submission.code.subscribe.mock.calls[0][0]; + + // Call it to simulate code change + callback(); + + expect(mockModel.display.dirtySubmission).toHaveBeenCalledWith(true); + }); + }); +}); \ No newline at end of file diff --git a/tests/integration.test.js b/tests/integration.test.js new file mode 100644 index 000000000..49bdd21b2 --- /dev/null +++ b/tests/integration.test.js @@ -0,0 +1,176 @@ +/** + * Integration tests for BlockPy key user workflows + */ + +describe('BlockPy Integration Tests', () => { + describe('Module Loading', () => { + test('should load all main modules without errors', () => { + expect(() => { + require('../src/utilities.js'); + require('../src/storage.js'); + require('../src/feedback.js'); + require('../src/dialog.js'); + require('../src/editors.js'); + require('../src/interface.js'); + }).not.toThrow(); + }); + + test('should export expected classes and functions', () => { + const utilities = require('../src/utilities.js'); + const storage = require('../src/storage.js'); + const feedback = require('../src/feedback.js'); + const dialog = require('../src/dialog.js'); + const editors = require('../src/editors.js'); + const interfaceModule = require('../src/interface.js'); + + // Check utilities exports + expect(utilities.arrayMove).toBeDefined(); + expect(typeof utilities.arrayMove).toBe('function'); + + // Check storage exports + expect(storage.LocalStorageWrapper).toBeDefined(); + expect(typeof storage.LocalStorageWrapper).toBe('function'); + + // Check feedback exports + expect(feedback.BlockPyFeedback).toBeDefined(); + expect(feedback.FEEDBACK_HTML).toBeDefined(); + expect(typeof feedback.BlockPyFeedback).toBe('function'); + + // Check dialog exports + expect(dialog.BlockPyDialog).toBeDefined(); + expect(dialog.DIALOG_HTML).toBeDefined(); + expect(typeof dialog.BlockPyDialog).toBe('function'); + + // Check editors exports + expect(editors.EditorsEnum).toBeDefined(); + expect(typeof editors.EditorsEnum).toBe('object'); + + // Check interface exports + expect(interfaceModule.SecondRowSecondPanelOptions).toBeDefined(); + expect(interfaceModule.makeExtraInterfaceSubscriptions).toBeDefined(); + expect(typeof interfaceModule.makeExtraInterfaceSubscriptions).toBe('function'); + }); + }); + + describe('HTML Template Validation', () => { + test('should have valid HTML structure in templates', () => { + const feedback = require('../src/feedback.js'); + const dialog = require('../src/dialog.js'); + + // Test that HTML templates are strings and contain expected elements + expect(typeof feedback.FEEDBACK_HTML).toBe('string'); + expect(feedback.FEEDBACK_HTML.length).toBeGreaterThan(0); + expect(feedback.FEEDBACK_HTML).toContain(' { + const feedback = require('../src/feedback.js'); + const dialog = require('../src/dialog.js'); + + // Check for ARIA attributes + expect(feedback.FEEDBACK_HTML).toContain('aria-label'); + expect(feedback.FEEDBACK_HTML).toContain('role='); + + expect(dialog.DIALOG_HTML).toContain('aria-label'); + expect(dialog.DIALOG_HTML).toContain('role='); + }); + }); + + describe('Class Initialization', () => { + let mockContainer; + + beforeEach(() => { + mockContainer = document.createElement('div'); + mockContainer.id = 'test-container'; + document.body.appendChild(mockContainer); + }); + + afterEach(() => { + document.body.removeChild(mockContainer); + }); + + test('should initialize storage wrapper without errors', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + + expect(() => { + const storage = new LocalStorageWrapper('blockpy-test'); + expect(storage.namespace).toBe('blockpy-test'); + }).not.toThrow(); + }); + + test('should initialize dialog with mock DOM elements', () => { + const { BlockPyDialog } = require('../src/dialog.js'); + + const mockTag = { + find: jest.fn(() => ({ + text: jest.fn(), + html: jest.fn(), + click: jest.fn(), + show: jest.fn(), + hide: jest.fn() + })), + modal: jest.fn() + }; + + expect(() => { + const dialog = new BlockPyDialog({}, mockTag); + expect(typeof dialog.yes).toBe('function'); + expect(typeof dialog.no).toBe('function'); + }).not.toThrow(); + }); + + test('should initialize feedback with mock DOM elements', () => { + const { BlockPyFeedback } = require('../src/feedback.js'); + + const mockTag = { + find: jest.fn(() => ({ + text: jest.fn(), + html: jest.fn() + })) + }; + + const mockMain = { + model: { + execution: { + feedback: { + subscribe: jest.fn() + } + }, + submission: { + code: { + subscribe: jest.fn() + } + }, + display: { + dirtySubmission: jest.fn() + } + } + }; + + expect(() => { + const feedback = new BlockPyFeedback(mockMain, mockTag); + expect(feedback.main).toBe(mockMain); + expect(feedback.tag).toBe(mockTag); + }).not.toThrow(); + }); + }); + + describe('Enum and Constants', () => { + test('should have stable enum values', () => { + const { EditorsEnum } = require('../src/editors.js'); + const { SecondRowSecondPanelOptions } = require('../src/interface.js'); + + // These values should remain stable for API compatibility + expect(EditorsEnum.SUBMISSION).toBe('submission'); + expect(EditorsEnum.ASSIGNMENT).toBe('assignment'); + + expect(SecondRowSecondPanelOptions.FEEDBACK).toBe('feedback'); + expect(SecondRowSecondPanelOptions.TRACE).toBe('trace'); + expect(SecondRowSecondPanelOptions.NONE).toBe('none'); + }); + }); +}); \ No newline at end of file diff --git a/tests/interface.test.js b/tests/interface.test.js new file mode 100644 index 000000000..8e0034d86 --- /dev/null +++ b/tests/interface.test.js @@ -0,0 +1,73 @@ +/** + * Tests for BlockPy interface components + */ + +import { SecondRowSecondPanelOptions, makeExtraInterfaceSubscriptions } from '../src/interface.js'; + +describe('BlockPy Interface', () => { + describe('SecondRowSecondPanelOptions', () => { + test('should have correct panel option values', () => { + expect(SecondRowSecondPanelOptions.FEEDBACK).toBe('feedback'); + expect(SecondRowSecondPanelOptions.TRACE).toBe('trace'); + expect(SecondRowSecondPanelOptions.NONE).toBe('none'); + }); + }); + + describe('makeExtraInterfaceSubscriptions', () => { + let mockModel, mockSelf; + + beforeEach(() => { + // Mock the model structure that makeExtraInterfaceSubscriptions expects + mockModel = { + ui: { + instructions: { + current: { + subscribe: jest.fn() + } + } + }, + display: { + fullscreen: { + subscribe: jest.fn() + } + }, + configuration: { + container: { + find: jest.fn().mockReturnValue({ + map: jest.fn() + }) + } + } + }; + mockSelf = {}; + }); + + test('should setup instruction highlighting subscription', () => { + makeExtraInterfaceSubscriptions(mockSelf, mockModel); + expect(mockModel.ui.instructions.current.subscribe).toHaveBeenCalledWith(expect.any(Function)); + }); + + test('should setup fullscreen subscription', () => { + makeExtraInterfaceSubscriptions(mockSelf, mockModel); + expect(mockModel.display.fullscreen.subscribe).toHaveBeenCalledWith(expect.any(Function)); + }); + + test('should handle instruction highlighting callback', () => { + jest.useFakeTimers(); + makeExtraInterfaceSubscriptions(mockSelf, mockModel); + + // Get the callback function that was passed to subscribe + const callback = mockModel.ui.instructions.current.subscribe.mock.calls[0][0]; + + // Call the callback to trigger highlighting + callback(); + + // Fast-forward time to trigger the timeout + jest.advanceTimersByTime(400); + + expect(mockModel.configuration.container.find).toHaveBeenCalledWith('.blockpy-instructions pre code'); + + jest.useRealTimers(); + }); + }); +}); \ No newline at end of file diff --git a/tests/setup.js b/tests/setup.js new file mode 100644 index 000000000..cf627242f --- /dev/null +++ b/tests/setup.js @@ -0,0 +1,79 @@ +/** + * Jest setup file for BlockPy tests + * This file runs before each test to set up the environment + */ + +// Mock global objects that BlockPy expects +global.$ = global.jQuery = require('jquery'); +global.ko = require('knockout'); + +// Mock FilePond +global.FilePond = { + create: jest.fn(), + registerPlugin: jest.fn() +}; + +// Mock DOM APIs not available in jsdom +Object.defineProperty(window, 'getComputedStyle', { + value: () => ({ + getPropertyValue: () => '', + }), +}); + +// Mock console methods to avoid noise in tests +global.console = { + ...global.console, + warn: jest.fn(), + error: jest.fn(), + log: jest.fn(), +}; + +// Mock window.hljs (highlight.js) that's used in interface +window.hljs = { + highlightBlock: jest.fn() +}; + +// Comprehensive Skulpt mock for BlockPy tests +global.Sk = { + emojiProxy: jest.fn(), + builtin: { + int_: jest.fn(), + none: { + none$: jest.fn() + }, + str: jest.fn(), + tuple: jest.fn(), + bool: jest.fn(), + dict: jest.fn(), + list: jest.fn(), + set: jest.fn(), + TypeError: jest.fn(), + ValueError: jest.fn(), + KeyError: jest.fn(), + IndexError: jest.fn(), + checkString: jest.fn(), + asnum$: jest.fn() + }, + misceval: { + callsimArray: jest.fn(), + isTrue: jest.fn(), + richCompareBool: jest.fn(), + chain: jest.fn() + }, + ffi: { + remapToJs: jest.fn(), + remapToPy: jest.fn() + }, + abstr: { + typeName: jest.fn(), + setUpModuleMethods: jest.fn(), + buildNativeClass: jest.fn() + }, + generic: { + getAttr: jest.fn(), + setAttr: jest.fn() + } +}; + +// Set up basic DOM structure that BlockPy expects +document.body.innerHTML = '
'; \ No newline at end of file diff --git a/tests/storage.test.js b/tests/storage.test.js new file mode 100644 index 000000000..8cc401b97 --- /dev/null +++ b/tests/storage.test.js @@ -0,0 +1,53 @@ +/** + * Tests for BlockPy storage system + */ + +describe('BlockPy Storage', () => { + describe('LocalStorageWrapper Module', () => { + test('should export LocalStorageWrapper class', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + expect(LocalStorageWrapper).toBeDefined(); + expect(typeof LocalStorageWrapper).toBe('function'); + }); + + test('should create instance with namespace', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + const storage = new LocalStorageWrapper('test'); + expect(storage.namespace).toBe('test'); + }); + + test('should have required methods', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + const storage = new LocalStorageWrapper('test'); + + expect(typeof storage.set).toBe('function'); + expect(typeof storage.get).toBe('function'); + expect(typeof storage.remove).toBe('function'); + expect(typeof storage.has).toBe('function'); + expect(typeof storage.getDefault).toBe('function'); + }); + + test('should handle namespace correctly in key generation', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + const storage1 = new LocalStorageWrapper('app1'); + const storage2 = new LocalStorageWrapper('app2'); + + expect(storage1.namespace).toBe('app1'); + expect(storage2.namespace).toBe('app2'); + }); + + test('should not throw when calling methods', () => { + const { LocalStorageWrapper } = require('../src/storage.js'); + const storage = new LocalStorageWrapper('test'); + + // These should not throw even if localStorage is mocked + expect(() => { + storage.set('key', 'value'); + storage.get('key'); + storage.has('key'); + storage.remove('key'); + storage.getDefault('key', 'default'); + }).not.toThrow(); + }); + }); +}); \ No newline at end of file diff --git a/tests/utilities.test.js b/tests/utilities.test.js new file mode 100644 index 000000000..04dc24384 --- /dev/null +++ b/tests/utilities.test.js @@ -0,0 +1,40 @@ +/** + * Tests for BlockPy utilities + */ + +import { arrayMove } from '../src/utilities.js'; + +describe('BlockPy Utilities', () => { + describe('arrayMove', () => { + test('should move element to new position', () => { + const arr = ['a', 'b', 'c', 'd']; + const result = arrayMove(arr, 1, 3); + expect(result).toEqual(['a', 'c', 'd', 'b']); + }); + + test('should handle same index', () => { + const arr = ['a', 'b', 'c']; + const result = arrayMove(arr, 1, 1); + expect(result).toEqual(['a', 'b', 'c']); + }); + + test('should handle out of bounds index', () => { + const arr = ['a', 'b', 'c']; + const result = arrayMove(arr, 1, 10); + expect(result).toEqual(['a', 'b', 'c']); + }); + + test('should move from end to beginning', () => { + const arr = ['a', 'b', 'c', 'd']; + const result = arrayMove(arr, 3, 0); + expect(result).toEqual(['d', 'a', 'b', 'c']); + }); + + test('should not modify original array', () => { + const arr = ['a', 'b', 'c']; + const original = [...arr]; + arrayMove(arr, 0, 2); + expect(arr).toEqual(original); + }); + }); +}); \ No newline at end of file From 7b6a43f19deffc8b40ee788a5171083433353547 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Sep 2025 04:12:14 +0000 Subject: [PATCH 3/3] Add coverage folder to gitignore and clean up artifacts Co-authored-by: acbart <897227+acbart@users.noreply.github.com> --- .gitignore | 1 + coverage/clover.xml | 3137 --------- coverage/coverage-final.json | 39 - coverage/lcov-report/base.css | 224 - coverage/lcov-report/block-navigation.js | 87 - coverage/lcov-report/favicon.png | Bin 445 -> 0 bytes coverage/lcov-report/index.html | 146 - coverage/lcov-report/prettify.css | 1 - coverage/lcov-report/prettify.js | 2 - coverage/lcov-report/sort-arrow-sprite.png | Bin 138 -> 0 bytes coverage/lcov-report/sorter.js | 210 - coverage/lcov-report/src/blockpy.js.html | 3931 ----------- coverage/lcov-report/src/console.js.html | 1930 ------ coverage/lcov-report/src/corgis.js.html | 523 -- coverage/lcov-report/src/dialog.js.html | 814 --- .../src/editor/abstract_editor.js.html | 406 -- .../src/editor/assignment_settings.js.html | 1312 ---- .../src/editor/default_header.js.html | 193 - .../lcov-report/src/editor/images.js.html | 961 --- coverage/lcov-report/src/editor/index.html | 281 - coverage/lcov-report/src/editor/json.js.html | 355 - .../lcov-report/src/editor/markdown.js.html | 310 - .../lcov-report/src/editor/python.js.html | 1486 ---- coverage/lcov-report/src/editor/quiz.js.html | 343 - .../src/editor/sample_submissions.js.html | 592 -- coverage/lcov-report/src/editor/tags.js.html | 178 - coverage/lcov-report/src/editor/text.js.html | 349 - .../lcov-report/src/editor/toolbox.js.html | 388 -- coverage/lcov-report/src/editors.js.html | 493 -- coverage/lcov-report/src/engine.js.html | 787 --- .../src/engine/configurations.js.html | 742 -- coverage/lcov-report/src/engine/eval.js.html | 286 - coverage/lcov-report/src/engine/index.html | 251 - .../lcov-report/src/engine/instructor.js.html | 592 -- .../lcov-report/src/engine/on_change.js.html | 121 - .../lcov-report/src/engine/on_eval.js.html | 577 -- .../lcov-report/src/engine/on_run.js.html | 820 --- .../lcov-report/src/engine/on_sample.js.html | 115 - coverage/lcov-report/src/engine/run.js.html | 388 -- .../lcov-report/src/engine/sample.js.html | 118 - .../lcov-report/src/engine/student.js.html | 676 -- coverage/lcov-report/src/feedback.js.html | 1456 ---- coverage/lcov-report/src/files.js.html | 2296 ------- coverage/lcov-report/src/footer.js.html | 205 - coverage/lcov-report/src/history.js.html | 694 -- coverage/lcov-report/src/index.html | 341 - coverage/lcov-report/src/interface.js.html | 784 --- coverage/lcov-report/src/server.js.html | 2164 ------ coverage/lcov-report/src/storage.js.html | 412 -- coverage/lcov-report/src/toolbar.js.html | 574 -- coverage/lcov-report/src/trace.js.html | 1114 --- coverage/lcov-report/src/utilities.js.html | 1123 --- coverage/lcov.info | 6030 ----------------- 53 files changed, 1 insertion(+), 41357 deletions(-) delete mode 100644 coverage/clover.xml delete mode 100644 coverage/coverage-final.json delete mode 100644 coverage/lcov-report/base.css delete mode 100644 coverage/lcov-report/block-navigation.js delete mode 100644 coverage/lcov-report/favicon.png delete mode 100644 coverage/lcov-report/index.html delete mode 100644 coverage/lcov-report/prettify.css delete mode 100644 coverage/lcov-report/prettify.js delete mode 100644 coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 coverage/lcov-report/sorter.js delete mode 100644 coverage/lcov-report/src/blockpy.js.html delete mode 100644 coverage/lcov-report/src/console.js.html delete mode 100644 coverage/lcov-report/src/corgis.js.html delete mode 100644 coverage/lcov-report/src/dialog.js.html delete mode 100644 coverage/lcov-report/src/editor/abstract_editor.js.html delete mode 100644 coverage/lcov-report/src/editor/assignment_settings.js.html delete mode 100644 coverage/lcov-report/src/editor/default_header.js.html delete mode 100644 coverage/lcov-report/src/editor/images.js.html delete mode 100644 coverage/lcov-report/src/editor/index.html delete mode 100644 coverage/lcov-report/src/editor/json.js.html delete mode 100644 coverage/lcov-report/src/editor/markdown.js.html delete mode 100644 coverage/lcov-report/src/editor/python.js.html delete mode 100644 coverage/lcov-report/src/editor/quiz.js.html delete mode 100644 coverage/lcov-report/src/editor/sample_submissions.js.html delete mode 100644 coverage/lcov-report/src/editor/tags.js.html delete mode 100644 coverage/lcov-report/src/editor/text.js.html delete mode 100644 coverage/lcov-report/src/editor/toolbox.js.html delete mode 100644 coverage/lcov-report/src/editors.js.html delete mode 100644 coverage/lcov-report/src/engine.js.html delete mode 100644 coverage/lcov-report/src/engine/configurations.js.html delete mode 100644 coverage/lcov-report/src/engine/eval.js.html delete mode 100644 coverage/lcov-report/src/engine/index.html delete mode 100644 coverage/lcov-report/src/engine/instructor.js.html delete mode 100644 coverage/lcov-report/src/engine/on_change.js.html delete mode 100644 coverage/lcov-report/src/engine/on_eval.js.html delete mode 100644 coverage/lcov-report/src/engine/on_run.js.html delete mode 100644 coverage/lcov-report/src/engine/on_sample.js.html delete mode 100644 coverage/lcov-report/src/engine/run.js.html delete mode 100644 coverage/lcov-report/src/engine/sample.js.html delete mode 100644 coverage/lcov-report/src/engine/student.js.html delete mode 100644 coverage/lcov-report/src/feedback.js.html delete mode 100644 coverage/lcov-report/src/files.js.html delete mode 100644 coverage/lcov-report/src/footer.js.html delete mode 100644 coverage/lcov-report/src/history.js.html delete mode 100644 coverage/lcov-report/src/index.html delete mode 100644 coverage/lcov-report/src/interface.js.html delete mode 100644 coverage/lcov-report/src/server.js.html delete mode 100644 coverage/lcov-report/src/storage.js.html delete mode 100644 coverage/lcov-report/src/toolbar.js.html delete mode 100644 coverage/lcov-report/src/trace.js.html delete mode 100644 coverage/lcov-report/src/utilities.js.html delete mode 100644 coverage/lcov.info diff --git a/.gitignore b/.gitignore index 49c753f23..9a867b854 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ htmlcov/ .tox/ .coverage .cache +coverage/ nosetests.xml coverage.xml diff --git a/coverage/clover.xml b/coverage/clover.xml deleted file mode 100644 index 6a75ad032..000000000 --- a/coverage/clover.xml +++ /dev/null @@ -1,3137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index 89824db2d..000000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,39 +0,0 @@ -{"/home/runner/work/blockpy/blockpy/src/blockpy.js": {"path":"/home/runner/work/blockpy/blockpy/src/blockpy.js","statementMap":{"0":{"start":{"line":40,"column":23},"end":{"line":40,"column":30}},"1":{"start":{"line":58,"column":8},"end":{"line":58,"column":38}},"2":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"3":{"start":{"line":60,"column":12},"end":{"line":60,"column":70}},"4":{"start":{"line":62,"column":8},"end":{"line":62,"column":24}},"5":{"start":{"line":71,"column":8},"end":{"line":71,"column":29}},"6":{"start":{"line":72,"column":8},"end":{"line":72,"column":32}},"7":{"start":{"line":73,"column":8},"end":{"line":73,"column":27}},"8":{"start":{"line":74,"column":8},"end":{"line":74,"column":29}},"9":{"start":{"line":75,"column":8},"end":{"line":75,"column":26}},"10":{"start":{"line":76,"column":8},"end":{"line":76,"column":30}},"11":{"start":{"line":77,"column":8},"end":{"line":77,"column":38}},"12":{"start":{"line":78,"column":8},"end":{"line":78,"column":21}},"13":{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},"14":{"start":{"line":88,"column":12},"end":{"line":88,"column":51}},"15":{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},"16":{"start":{"line":90,"column":12},"end":{"line":90,"column":48}},"17":{"start":{"line":92,"column":12},"end":{"line":92,"column":32}},"18":{"start":{"line":110,"column":8},"end":{"line":110,"column":71}},"19":{"start":{"line":111,"column":8},"end":{"line":111,"column":51}},"20":{"start":{"line":114,"column":8},"end":{"line":416,"column":10}},"21":{"start":{"line":423,"column":24},"end":{"line":423,"column":48}},"22":{"start":{"line":424,"column":18},"end":{"line":424,"column":37}},"23":{"start":{"line":425,"column":8},"end":{"line":425,"column":72}},"24":{"start":{"line":429,"column":8},"end":{"line":429,"column":61}},"25":{"start":{"line":441,"column":8},"end":{"line":441,"column":61}},"26":{"start":{"line":442,"column":8},"end":{"line":442,"column":96}},"27":{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},"28":{"start":{"line":448,"column":12},"end":{"line":448,"column":46}},"29":{"start":{"line":449,"column":12},"end":{"line":449,"column":25}},"30":{"start":{"line":452,"column":8},"end":{"line":452,"column":48}},"31":{"start":{"line":453,"column":8},"end":{"line":453,"column":65}},"32":{"start":{"line":454,"column":8},"end":{"line":454,"column":106}},"33":{"start":{"line":455,"column":8},"end":{"line":455,"column":58}},"34":{"start":{"line":456,"column":8},"end":{"line":456,"column":54}},"35":{"start":{"line":457,"column":8},"end":{"line":457,"column":60}},"36":{"start":{"line":458,"column":8},"end":{"line":458,"column":50}},"37":{"start":{"line":459,"column":8},"end":{"line":459,"column":58}},"38":{"start":{"line":460,"column":8},"end":{"line":460,"column":101}},"39":{"start":{"line":461,"column":8},"end":{"line":461,"column":107}},"40":{"start":{"line":462,"column":8},"end":{"line":462,"column":58}},"41":{"start":{"line":463,"column":8},"end":{"line":463,"column":55}},"42":{"start":{"line":464,"column":8},"end":{"line":464,"column":87}},"43":{"start":{"line":468,"column":8},"end":{"line":468,"column":28}},"44":{"start":{"line":469,"column":8},"end":{"line":469,"column":30}},"45":{"start":{"line":470,"column":8},"end":{"line":470,"column":56}},"46":{"start":{"line":471,"column":33},"end":{"line":471,"column":75}},"47":{"start":{"line":472,"column":8},"end":{"line":472,"column":56}},"48":{"start":{"line":473,"column":25},"end":{"line":473,"column":40}},"49":{"start":{"line":474,"column":8},"end":{"line":474,"column":48}},"50":{"start":{"line":475,"column":8},"end":{"line":475,"column":58}},"51":{"start":{"line":476,"column":8},"end":{"line":476,"column":61}},"52":{"start":{"line":477,"column":8},"end":{"line":477,"column":61}},"53":{"start":{"line":478,"column":8},"end":{"line":478,"column":71}},"54":{"start":{"line":479,"column":8},"end":{"line":479,"column":56}},"55":{"start":{"line":480,"column":8},"end":{"line":480,"column":60}},"56":{"start":{"line":481,"column":8},"end":{"line":481,"column":56}},"57":{"start":{"line":482,"column":8},"end":{"line":482,"column":52}},"58":{"start":{"line":483,"column":8},"end":{"line":483,"column":50}},"59":{"start":{"line":484,"column":8},"end":{"line":484,"column":56}},"60":{"start":{"line":485,"column":8},"end":{"line":485,"column":61}},"61":{"start":{"line":486,"column":8},"end":{"line":486,"column":68}},"62":{"start":{"line":487,"column":8},"end":{"line":487,"column":52}},"63":{"start":{"line":488,"column":8},"end":{"line":488,"column":69}},"64":{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},"65":{"start":{"line":490,"column":12},"end":{"line":490,"column":86}},"66":{"start":{"line":492,"column":8},"end":{"line":492,"column":65}},"67":{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},"68":{"start":{"line":494,"column":12},"end":{"line":494,"column":82}},"69":{"start":{"line":496,"column":8},"end":{"line":496,"column":55}},"70":{"start":{"line":497,"column":8},"end":{"line":497,"column":69}},"71":{"start":{"line":498,"column":8},"end":{"line":498,"column":59}},"72":{"start":{"line":499,"column":8},"end":{"line":499,"column":39}},"73":{"start":{"line":500,"column":8},"end":{"line":500,"column":66}},"74":{"start":{"line":501,"column":8},"end":{"line":501,"column":108}},"75":{"start":{"line":502,"column":8},"end":{"line":502,"column":104}},"76":{"start":{"line":503,"column":8},"end":{"line":503,"column":64}},"77":{"start":{"line":504,"column":8},"end":{"line":504,"column":57}},"78":{"start":{"line":505,"column":8},"end":{"line":505,"column":49}},"79":{"start":{"line":506,"column":8},"end":{"line":506,"column":53}},"80":{"start":{"line":507,"column":8},"end":{"line":507,"column":69}},"81":{"start":{"line":508,"column":8},"end":{"line":508,"column":50}},"82":{"start":{"line":509,"column":8},"end":{"line":509,"column":50}},"83":{"start":{"line":510,"column":8},"end":{"line":510,"column":53}},"84":{"start":{"line":512,"column":8},"end":{"line":512,"column":72}},"85":{"start":{"line":516,"column":19},"end":{"line":516,"column":23}},"86":{"start":{"line":517,"column":20},"end":{"line":517,"column":30}},"87":{"start":{"line":518,"column":8},"end":{"line":1181,"column":10}},"88":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"89":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"90":{"start":{"line":527,"column":20},"end":{"line":527,"column":64}},"91":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"92":{"start":{"line":535,"column":20},"end":{"line":535,"column":59}},"93":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"94":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"95":{"start":{"line":546,"column":20},"end":{"line":546,"column":74}},"96":{"start":{"line":549,"column":20},"end":{"line":549,"column":57}},"97":{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},"98":{"start":{"line":553,"column":24},"end":{"line":553,"column":83}},"99":{"start":{"line":555,"column":24},"end":{"line":555,"column":82}},"100":{"start":{"line":557,"column":20},"end":{"line":557,"column":78}},"101":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"102":{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},"103":{"start":{"line":565,"column":24},"end":{"line":565,"column":93}},"104":{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},"105":{"start":{"line":567,"column":24},"end":{"line":567,"column":52}},"106":{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},"107":{"start":{"line":569,"column":24},"end":{"line":569,"column":37}},"108":{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},"109":{"start":{"line":572,"column":28},"end":{"line":572,"column":44}},"110":{"start":{"line":574,"column":28},"end":{"line":574,"column":50}},"111":{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},"112":{"start":{"line":580,"column":24},"end":{"line":580,"column":89}},"113":{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},"114":{"start":{"line":582,"column":24},"end":{"line":582,"column":84}},"115":{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},"116":{"start":{"line":584,"column":24},"end":{"line":584,"column":60}},"117":{"start":{"line":586,"column":24},"end":{"line":586,"column":83}},"118":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"119":{"start":{"line":594,"column":20},"end":{"line":594,"column":85}},"120":{"start":{"line":597,"column":20},"end":{"line":597,"column":65}},"121":{"start":{"line":600,"column":20},"end":{"line":600,"column":57}},"122":{"start":{"line":603,"column":20},"end":{"line":603,"column":70}},"123":{"start":{"line":606,"column":34},"end":{"line":606,"column":128}},"124":{"start":{"line":614,"column":20},"end":{"line":614,"column":57}},"125":{"start":{"line":617,"column":36},"end":{"line":617,"column":57}},"126":{"start":{"line":619,"column":36},"end":{"line":619,"column":72}},"127":{"start":{"line":620,"column":20},"end":{"line":620,"column":82}},"128":{"start":{"line":623,"column":20},"end":{"line":626,"column":22}},"129":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"130":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"131":{"start":{"line":638,"column":20},"end":{"line":638,"column":64}},"132":{"start":{"line":641,"column":20},"end":{"line":641,"column":97}},"133":{"start":{"line":644,"column":20},"end":{"line":644,"column":94}},"134":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"135":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"136":{"start":{"line":654,"column":39},"end":{"line":654,"column":73}},"137":{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},"138":{"start":{"line":656,"column":24},"end":{"line":656,"column":75}},"139":{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},"140":{"start":{"line":658,"column":24},"end":{"line":658,"column":71}},"141":{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},"142":{"start":{"line":660,"column":24},"end":{"line":660,"column":72}},"143":{"start":{"line":662,"column":24},"end":{"line":662,"column":71}},"144":{"start":{"line":666,"column":41},"end":{"line":666,"column":75}},"145":{"start":{"line":667,"column":20},"end":{"line":667,"column":79}},"146":{"start":{"line":668,"column":20},"end":{"line":668,"column":67}},"147":{"start":{"line":671,"column":37},"end":{"line":671,"column":79}},"148":{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},"149":{"start":{"line":673,"column":24},"end":{"line":673,"column":71}},"150":{"start":{"line":674,"column":24},"end":{"line":674,"column":39}},"151":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"152":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"153":{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},"154":{"start":{"line":693,"column":24},"end":{"line":693,"column":44}},"155":{"start":{"line":695,"column":20},"end":{"line":719,"column":21}},"156":{"start":{"line":698,"column":28},"end":{"line":698,"column":48}},"157":{"start":{"line":700,"column":28},"end":{"line":700,"column":57}},"158":{"start":{"line":702,"column":28},"end":{"line":702,"column":56}},"159":{"start":{"line":704,"column":28},"end":{"line":704,"column":56}},"160":{"start":{"line":706,"column":28},"end":{"line":706,"column":58}},"161":{"start":{"line":709,"column":28},"end":{"line":709,"column":58}},"162":{"start":{"line":712,"column":28},"end":{"line":712,"column":58}},"163":{"start":{"line":714,"column":28},"end":{"line":714,"column":60}},"164":{"start":{"line":716,"column":28},"end":{"line":716,"column":56}},"165":{"start":{"line":718,"column":28},"end":{"line":718,"column":53}},"166":{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},"167":{"start":{"line":723,"column":24},"end":{"line":723,"column":34}},"168":{"start":{"line":725,"column":20},"end":{"line":749,"column":21}},"169":{"start":{"line":728,"column":28},"end":{"line":728,"column":38}},"170":{"start":{"line":730,"column":28},"end":{"line":730,"column":51}},"171":{"start":{"line":732,"column":28},"end":{"line":732,"column":50}},"172":{"start":{"line":734,"column":28},"end":{"line":734,"column":50}},"173":{"start":{"line":736,"column":28},"end":{"line":736,"column":52}},"174":{"start":{"line":739,"column":28},"end":{"line":739,"column":53}},"175":{"start":{"line":742,"column":28},"end":{"line":742,"column":50}},"176":{"start":{"line":744,"column":28},"end":{"line":744,"column":54}},"177":{"start":{"line":746,"column":28},"end":{"line":746,"column":46}},"178":{"start":{"line":748,"column":28},"end":{"line":748,"column":47}},"179":{"start":{"line":752,"column":20},"end":{"line":752,"column":46}},"180":{"start":{"line":753,"column":20},"end":{"line":753,"column":52}},"181":{"start":{"line":754,"column":20},"end":{"line":754,"column":126}},"182":{"start":{"line":757,"column":20},"end":{"line":757,"column":46}},"183":{"start":{"line":760,"column":37},"end":{"line":760,"column":64}},"184":{"start":{"line":761,"column":20},"end":{"line":761,"column":55}},"185":{"start":{"line":762,"column":20},"end":{"line":762,"column":87}},"186":{"start":{"line":765,"column":20},"end":{"line":768,"column":60}},"187":{"start":{"line":769,"column":20},"end":{"line":772,"column":23}},"188":{"start":{"line":770,"column":24},"end":{"line":770,"column":44}},"189":{"start":{"line":771,"column":24},"end":{"line":771,"column":53}},"190":{"start":{"line":773,"column":37},"end":{"line":773,"column":102}},"191":{"start":{"line":774,"column":20},"end":{"line":774,"column":46}},"192":{"start":{"line":775,"column":20},"end":{"line":780,"column":29}},"193":{"start":{"line":776,"column":24},"end":{"line":776,"column":53}},"194":{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},"195":{"start":{"line":778,"column":28},"end":{"line":778,"column":59}},"196":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"197":{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},"198":{"start":{"line":787,"column":24},"end":{"line":787,"column":104}},"199":{"start":{"line":793,"column":20},"end":{"line":793,"column":71}},"200":{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},"201":{"start":{"line":797,"column":24},"end":{"line":797,"column":34}},"202":{"start":{"line":799,"column":31},"end":{"line":799,"column":73}},"203":{"start":{"line":800,"column":35},"end":{"line":800,"column":69}},"204":{"start":{"line":801,"column":36},"end":{"line":801,"column":78}},"205":{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},"206":{"start":{"line":803,"column":24},"end":{"line":803,"column":34}},"207":{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},"208":{"start":{"line":805,"column":24},"end":{"line":805,"column":34}},"209":{"start":{"line":807,"column":24},"end":{"line":807,"column":56}},"210":{"start":{"line":811,"column":31},"end":{"line":811,"column":73}},"211":{"start":{"line":812,"column":35},"end":{"line":812,"column":69}},"212":{"start":{"line":813,"column":36},"end":{"line":813,"column":78}},"213":{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},"214":{"start":{"line":815,"column":24},"end":{"line":815,"column":42}},"215":{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},"216":{"start":{"line":818,"column":24},"end":{"line":818,"column":44}},"217":{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},"218":{"start":{"line":820,"column":24},"end":{"line":820,"column":46}},"219":{"start":{"line":823,"column":24},"end":{"line":823,"column":64}},"220":{"start":{"line":827,"column":31},"end":{"line":827,"column":73}},"221":{"start":{"line":828,"column":35},"end":{"line":828,"column":69}},"222":{"start":{"line":829,"column":36},"end":{"line":829,"column":78}},"223":{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},"224":{"start":{"line":831,"column":24},"end":{"line":831,"column":49}},"225":{"start":{"line":833,"column":20},"end":{"line":843,"column":21}},"226":{"start":{"line":835,"column":28},"end":{"line":835,"column":56}},"227":{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},"228":{"start":{"line":838,"column":32},"end":{"line":838,"column":66}},"229":{"start":{"line":840,"column":28},"end":{"line":840,"column":56}},"230":{"start":{"line":842,"column":28},"end":{"line":842,"column":94}},"231":{"start":{"line":846,"column":20},"end":{"line":846,"column":64}},"232":{"start":{"line":849,"column":35},"end":{"line":849,"column":94}},"233":{"start":{"line":850,"column":20},"end":{"line":850,"column":71}},"234":{"start":{"line":853,"column":31},"end":{"line":853,"column":123}},"235":{"start":{"line":854,"column":20},"end":{"line":854,"column":67}},"236":{"start":{"line":857,"column":20},"end":{"line":857,"column":97}},"237":{"start":{"line":860,"column":31},"end":{"line":860,"column":73}},"238":{"start":{"line":861,"column":35},"end":{"line":861,"column":69}},"239":{"start":{"line":862,"column":36},"end":{"line":862,"column":78}},"240":{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},"241":{"start":{"line":864,"column":24},"end":{"line":864,"column":34}},"242":{"start":{"line":866,"column":20},"end":{"line":873,"column":21}},"243":{"start":{"line":868,"column":28},"end":{"line":868,"column":38}},"244":{"start":{"line":870,"column":28},"end":{"line":870,"column":55}},"245":{"start":{"line":872,"column":28},"end":{"line":872,"column":51}},"246":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"247":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"248":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"249":{"start":{"line":888,"column":20},"end":{"line":906,"column":21}},"250":{"start":{"line":889,"column":42},"end":{"line":889,"column":73}},"251":{"start":{"line":890,"column":49},"end":{"line":890,"column":88}},"252":{"start":{"line":891,"column":46},"end":{"line":891,"column":90}},"253":{"start":{"line":892,"column":44},"end":{"line":892,"column":86}},"254":{"start":{"line":893,"column":51},"end":{"line":894,"column":70}},"255":{"start":{"line":894,"column":28},"end":{"line":894,"column":68}},"256":{"start":{"line":895,"column":47},"end":{"line":896,"column":66}},"257":{"start":{"line":896,"column":28},"end":{"line":896,"column":64}},"258":{"start":{"line":897,"column":50},"end":{"line":898,"column":69}},"259":{"start":{"line":898,"column":28},"end":{"line":898,"column":67}},"260":{"start":{"line":899,"column":50},"end":{"line":900,"column":69}},"261":{"start":{"line":900,"column":28},"end":{"line":900,"column":67}},"262":{"start":{"line":901,"column":49},"end":{"line":902,"column":68}},"263":{"start":{"line":902,"column":28},"end":{"line":902,"column":66}},"264":{"start":{"line":903,"column":46},"end":{"line":903,"column":84}},"265":{"start":{"line":904,"column":60},"end":{"line":904,"column":111}},"266":{"start":{"line":905,"column":33},"end":{"line":905,"column":46}},"267":{"start":{"line":909,"column":20},"end":{"line":949,"column":21}},"268":{"start":{"line":915,"column":28},"end":{"line":915,"column":69}},"269":{"start":{"line":916,"column":28},"end":{"line":916,"column":34}},"270":{"start":{"line":918,"column":28},"end":{"line":918,"column":75}},"271":{"start":{"line":919,"column":28},"end":{"line":919,"column":34}},"272":{"start":{"line":921,"column":48},"end":{"line":921,"column":111}},"273":{"start":{"line":922,"column":28},"end":{"line":922,"column":83}},"274":{"start":{"line":923,"column":28},"end":{"line":923,"column":84}},"275":{"start":{"line":924,"column":28},"end":{"line":924,"column":34}},"276":{"start":{"line":926,"column":28},"end":{"line":926,"column":91}},"277":{"start":{"line":927,"column":28},"end":{"line":927,"column":69}},"278":{"start":{"line":928,"column":28},"end":{"line":928,"column":34}},"279":{"start":{"line":930,"column":28},"end":{"line":930,"column":58}},"280":{"start":{"line":931,"column":28},"end":{"line":931,"column":69}},"281":{"start":{"line":932,"column":28},"end":{"line":932,"column":34}},"282":{"start":{"line":935,"column":28},"end":{"line":935,"column":56}},"283":{"start":{"line":936,"column":28},"end":{"line":936,"column":69}},"284":{"start":{"line":937,"column":28},"end":{"line":937,"column":34}},"285":{"start":{"line":939,"column":28},"end":{"line":939,"column":83}},"286":{"start":{"line":940,"column":28},"end":{"line":940,"column":35}},"287":{"start":{"line":942,"column":28},"end":{"line":942,"column":80}},"288":{"start":{"line":943,"column":28},"end":{"line":943,"column":35}},"289":{"start":{"line":945,"column":28},"end":{"line":945,"column":81}},"290":{"start":{"line":946,"column":28},"end":{"line":946,"column":35}},"291":{"start":{"line":950,"column":20},"end":{"line":950,"column":49}},"292":{"start":{"line":953,"column":20},"end":{"line":953,"column":91}},"293":{"start":{"line":956,"column":20},"end":{"line":956,"column":100}},"294":{"start":{"line":959,"column":35},"end":{"line":959,"column":90}},"295":{"start":{"line":960,"column":35},"end":{"line":960,"column":90}},"296":{"start":{"line":961,"column":31},"end":{"line":961,"column":59}},"297":{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},"298":{"start":{"line":963,"column":24},"end":{"line":963,"column":56}},"299":{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},"300":{"start":{"line":966,"column":24},"end":{"line":966,"column":56}},"301":{"start":{"line":968,"column":20},"end":{"line":968,"column":32}},"302":{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},"303":{"start":{"line":975,"column":24},"end":{"line":975,"column":42}},"304":{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},"305":{"start":{"line":978,"column":24},"end":{"line":978,"column":40}},"306":{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},"307":{"start":{"line":981,"column":24},"end":{"line":981,"column":47}},"308":{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},"309":{"start":{"line":984,"column":24},"end":{"line":984,"column":47}},"310":{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},"311":{"start":{"line":987,"column":24},"end":{"line":987,"column":41}},"312":{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},"313":{"start":{"line":990,"column":24},"end":{"line":990,"column":45}},"314":{"start":{"line":992,"column":20},"end":{"line":992,"column":32}},"315":{"start":{"line":997,"column":20},"end":{"line":997,"column":79}},"316":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"317":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"318":{"start":{"line":1010,"column":20},"end":{"line":1010,"column":93}},"319":{"start":{"line":1011,"column":20},"end":{"line":1011,"column":75}},"320":{"start":{"line":1012,"column":20},"end":{"line":1017,"column":23}},"321":{"start":{"line":1014,"column":43},"end":{"line":1014,"column":68}},"322":{"start":{"line":1015,"column":28},"end":{"line":1015,"column":76}},"323":{"start":{"line":1020,"column":20},"end":{"line":1020,"column":45}},"324":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"325":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"326":{"start":{"line":1030,"column":20},"end":{"line":1030,"column":56}},"327":{"start":{"line":1034,"column":41},"end":{"line":1034,"column":94}},"328":{"start":{"line":1035,"column":24},"end":{"line":1035,"column":103}},"329":{"start":{"line":1038,"column":24},"end":{"line":1038,"column":116}},"330":{"start":{"line":1039,"column":24},"end":{"line":1039,"column":58}},"331":{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},"332":{"start":{"line":1041,"column":28},"end":{"line":1041,"column":81}},"333":{"start":{"line":1045,"column":24},"end":{"line":1045,"column":74}},"334":{"start":{"line":1047,"column":24},"end":{"line":1047,"column":68}},"335":{"start":{"line":1048,"column":24},"end":{"line":1048,"column":72}},"336":{"start":{"line":1049,"column":24},"end":{"line":1049,"column":57}},"337":{"start":{"line":1052,"column":24},"end":{"line":1060,"column":27}},"338":{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},"339":{"start":{"line":1054,"column":32},"end":{"line":1054,"column":79}},"340":{"start":{"line":1055,"column":32},"end":{"line":1055,"column":64}},"341":{"start":{"line":1056,"column":32},"end":{"line":1056,"column":79}},"342":{"start":{"line":1058,"column":32},"end":{"line":1058,"column":79}},"343":{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},"344":{"start":{"line":1064,"column":28},"end":{"line":1064,"column":73}},"345":{"start":{"line":1066,"column":28},"end":{"line":1066,"column":72}},"346":{"start":{"line":1070,"column":37},"end":{"line":1070,"column":75}},"347":{"start":{"line":1071,"column":40},"end":{"line":1071,"column":79}},"348":{"start":{"line":1072,"column":36},"end":{"line":1072,"column":71}},"349":{"start":{"line":1073,"column":42},"end":{"line":1073,"column":85}},"350":{"start":{"line":1074,"column":35},"end":{"line":1074,"column":65}},"351":{"start":{"line":1078,"column":38},"end":{"line":1078,"column":90}},"352":{"start":{"line":1079,"column":46},"end":{"line":1079,"column":106}},"353":{"start":{"line":1080,"column":46},"end":{"line":1080,"column":106}},"354":{"start":{"line":1081,"column":40},"end":{"line":1081,"column":94}},"355":{"start":{"line":1082,"column":62},"end":{"line":1082,"column":88}},"356":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"357":{"start":{"line":1086,"column":32},"end":{"line":1086,"column":71}},"358":{"start":{"line":1090,"column":37},"end":{"line":1090,"column":89}},"359":{"start":{"line":1091,"column":24},"end":{"line":1091,"column":70}},"360":{"start":{"line":1097,"column":20},"end":{"line":1097,"column":69}},"361":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"362":{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},"363":{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},"364":{"start":{"line":1105,"column":28},"end":{"line":1105,"column":51}},"365":{"start":{"line":1107,"column":24},"end":{"line":1107,"column":68}},"366":{"start":{"line":1109,"column":24},"end":{"line":1109,"column":60}},"367":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"368":{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},"369":{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},"370":{"start":{"line":1118,"column":28},"end":{"line":1118,"column":51}},"371":{"start":{"line":1120,"column":24},"end":{"line":1120,"column":68}},"372":{"start":{"line":1122,"column":24},"end":{"line":1122,"column":64}},"373":{"start":{"line":1126,"column":20},"end":{"line":1126,"column":53}},"374":{"start":{"line":1130,"column":20},"end":{"line":1130,"column":63}},"375":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"376":{"start":{"line":1137,"column":20},"end":{"line":1147,"column":75}},"377":{"start":{"line":1152,"column":56},"end":{"line":1152,"column":71}},"378":{"start":{"line":1154,"column":24},"end":{"line":1154,"column":74}},"379":{"start":{"line":1156,"column":33},"end":{"line":1156,"column":49}},"380":{"start":{"line":1157,"column":36},"end":{"line":1157,"column":70}},"381":{"start":{"line":1158,"column":24},"end":{"line":1161,"column":26}},"382":{"start":{"line":1159,"column":55},"end":{"line":1159,"column":82}},"383":{"start":{"line":1160,"column":28},"end":{"line":1160,"column":75}},"384":{"start":{"line":1162,"column":24},"end":{"line":1162,"column":52}},"385":{"start":{"line":1163,"column":24},"end":{"line":1163,"column":48}},"386":{"start":{"line":1164,"column":24},"end":{"line":1164,"column":58}},"387":{"start":{"line":1167,"column":24},"end":{"line":1167,"column":43}},"388":{"start":{"line":1168,"column":24},"end":{"line":1170,"column":77}},"389":{"start":{"line":1171,"column":24},"end":{"line":1171,"column":65}},"390":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"391":{"start":{"line":1182,"column":8},"end":{"line":1182,"column":53}},"392":{"start":{"line":1187,"column":8},"end":{"line":1187,"column":75}},"393":{"start":{"line":1197,"column":8},"end":{"line":1197,"column":76}},"394":{"start":{"line":1201,"column":19},"end":{"line":1201,"column":23}},"395":{"start":{"line":1202,"column":8},"end":{"line":1204,"column":10}},"396":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"397":{"start":{"line":1208,"column":24},"end":{"line":1208,"column":58}},"398":{"start":{"line":1209,"column":25},"end":{"line":1209,"column":45}},"399":{"start":{"line":1210,"column":19},"end":{"line":1210,"column":23}},"400":{"start":{"line":1213,"column":8},"end":{"line":1213,"column":87}},"401":{"start":{"line":1214,"column":8},"end":{"line":1214,"column":93}},"402":{"start":{"line":1215,"column":8},"end":{"line":1215,"column":50}},"403":{"start":{"line":1216,"column":8},"end":{"line":1216,"column":90}},"404":{"start":{"line":1217,"column":8},"end":{"line":1217,"column":52}},"405":{"start":{"line":1218,"column":8},"end":{"line":1218,"column":60}},"406":{"start":{"line":1219,"column":8},"end":{"line":1219,"column":82}},"407":{"start":{"line":1221,"column":8},"end":{"line":1221,"column":75}},"408":{"start":{"line":1222,"column":8},"end":{"line":1222,"column":52}},"409":{"start":{"line":1223,"column":8},"end":{"line":1223,"column":52}},"410":{"start":{"line":1224,"column":8},"end":{"line":1224,"column":98}},"411":{"start":{"line":1228,"column":8},"end":{"line":1228,"column":50}},"412":{"start":{"line":1233,"column":8},"end":{"line":1233,"column":50}},"413":{"start":{"line":1237,"column":8},"end":{"line":1240,"column":11}},"414":{"start":{"line":1238,"column":12},"end":{"line":1239,"column":72}},"415":{"start":{"line":1241,"column":8},"end":{"line":1241,"column":26}},"416":{"start":{"line":1242,"column":26},"end":{"line":1242,"column":60}},"417":{"start":{"line":1243,"column":28},"end":{"line":1243,"column":94}},"418":{"start":{"line":1243,"column":34},"end":{"line":1243,"column":94}},"419":{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},"420":{"start":{"line":1245,"column":12},"end":{"line":1245,"column":56}},"421":{"start":{"line":1248,"column":8},"end":{"line":1259,"column":11}},"422":{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},"423":{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},"424":{"start":{"line":1251,"column":20},"end":{"line":1251,"column":46}},"425":{"start":{"line":1252,"column":20},"end":{"line":1252,"column":38}},"426":{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},"427":{"start":{"line":1256,"column":20},"end":{"line":1256,"column":64}},"428":{"start":{"line":1263,"column":8},"end":{"line":1263,"column":49}},"429":{"start":{"line":1267,"column":8},"end":{"line":1267,"column":39}},"430":{"start":{"line":1269,"column":8},"end":{"line":1269,"column":50}},"431":{"start":{"line":1273,"column":35},"end":{"line":1273,"column":71}},"432":{"start":{"line":1274,"column":8},"end":{"line":1274,"column":58}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":55},"end":{"line":63,"column":5}},"line":57},"1":{"name":"(anonymous_1)","decl":{"start":{"line":70,"column":4},"end":{"line":70,"column":5}},"loc":{"start":{"line":70,"column":15},"end":{"line":79,"column":5}},"line":70},"2":{"name":"(anonymous_2)","decl":{"start":{"line":86,"column":4},"end":{"line":86,"column":5}},"loc":{"start":{"line":86,"column":34},"end":{"line":94,"column":5}},"line":86},"3":{"name":"(anonymous_3)","decl":{"start":{"line":108,"column":4},"end":{"line":108,"column":5}},"loc":{"start":{"line":108,"column":29},"end":{"line":417,"column":5}},"line":108},"4":{"name":"(anonymous_4)","decl":{"start":{"line":422,"column":4},"end":{"line":422,"column":5}},"loc":{"start":{"line":422,"column":20},"end":{"line":426,"column":5}},"line":422},"5":{"name":"(anonymous_5)","decl":{"start":{"line":428,"column":4},"end":{"line":428,"column":5}},"loc":{"start":{"line":428,"column":34},"end":{"line":430,"column":5}},"line":428},"6":{"name":"(anonymous_6)","decl":{"start":{"line":432,"column":4},"end":{"line":432,"column":5}},"loc":{"start":{"line":432,"column":19},"end":{"line":434,"column":5}},"line":432},"7":{"name":"(anonymous_7)","decl":{"start":{"line":436,"column":4},"end":{"line":436,"column":5}},"loc":{"start":{"line":436,"column":35},"end":{"line":438,"column":5}},"line":436},"8":{"name":"(anonymous_8)","decl":{"start":{"line":440,"column":4},"end":{"line":440,"column":5}},"loc":{"start":{"line":440,"column":33},"end":{"line":443,"column":5}},"line":440},"9":{"name":"(anonymous_9)","decl":{"start":{"line":445,"column":4},"end":{"line":445,"column":5}},"loc":{"start":{"line":445,"column":43},"end":{"line":465,"column":5}},"line":445},"10":{"name":"(anonymous_10)","decl":{"start":{"line":467,"column":4},"end":{"line":467,"column":5}},"loc":{"start":{"line":467,"column":30},"end":{"line":513,"column":5}},"line":467},"11":{"name":"(anonymous_11)","decl":{"start":{"line":515,"column":4},"end":{"line":515,"column":5}},"loc":{"start":{"line":515,"column":23},"end":{"line":1183,"column":5}},"line":515},"12":{"name":"(anonymous_12)","decl":{"start":{"line":519,"column":41},"end":{"line":519,"column":42}},"loc":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"line":520},"13":{"name":"(anonymous_13)","decl":{"start":{"line":522,"column":42},"end":{"line":522,"column":43}},"loc":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"line":523},"14":{"name":"(anonymous_14)","decl":{"start":{"line":526,"column":43},"end":{"line":526,"column":44}},"loc":{"start":{"line":527,"column":20},"end":{"line":527,"column":64}},"line":527},"15":{"name":"(anonymous_15)","decl":{"start":{"line":529,"column":41},"end":{"line":529,"column":42}},"loc":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"line":530},"16":{"name":"(anonymous_16)","decl":{"start":{"line":534,"column":23},"end":{"line":534,"column":24}},"loc":{"start":{"line":535,"column":20},"end":{"line":535,"column":59}},"line":535},"17":{"name":"(anonymous_17)","decl":{"start":{"line":539,"column":20},"end":{"line":539,"column":21}},"loc":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"line":540},"18":{"name":"(anonymous_18)","decl":{"start":{"line":542,"column":48},"end":{"line":542,"column":49}},"loc":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"line":543},"19":{"name":"(anonymous_19)","decl":{"start":{"line":545,"column":33},"end":{"line":545,"column":34}},"loc":{"start":{"line":545,"column":38},"end":{"line":547,"column":17}},"line":545},"20":{"name":"(anonymous_20)","decl":{"start":{"line":548,"column":28},"end":{"line":548,"column":29}},"loc":{"start":{"line":548,"column":34},"end":{"line":550,"column":17}},"line":548},"21":{"name":"(anonymous_21)","decl":{"start":{"line":551,"column":30},"end":{"line":551,"column":31}},"loc":{"start":{"line":551,"column":36},"end":{"line":558,"column":17}},"line":551},"22":{"name":"(anonymous_22)","decl":{"start":{"line":559,"column":50},"end":{"line":559,"column":51}},"loc":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"line":560},"23":{"name":"(anonymous_23)","decl":{"start":{"line":563,"column":51},"end":{"line":563,"column":52}},"loc":{"start":{"line":563,"column":57},"end":{"line":577,"column":17}},"line":563},"24":{"name":"(anonymous_24)","decl":{"start":{"line":578,"column":36},"end":{"line":578,"column":37}},"loc":{"start":{"line":578,"column":42},"end":{"line":588,"column":17}},"line":578},"25":{"name":"(anonymous_25)","decl":{"start":{"line":589,"column":45},"end":{"line":589,"column":46}},"loc":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"line":590},"26":{"name":"(anonymous_26)","decl":{"start":{"line":593,"column":45},"end":{"line":593,"column":46}},"loc":{"start":{"line":594,"column":20},"end":{"line":594,"column":85}},"line":594},"27":{"name":"(anonymous_27)","decl":{"start":{"line":596,"column":50},"end":{"line":596,"column":51}},"loc":{"start":{"line":597,"column":20},"end":{"line":597,"column":65}},"line":597},"28":{"name":"(anonymous_28)","decl":{"start":{"line":599,"column":43},"end":{"line":599,"column":44}},"loc":{"start":{"line":600,"column":20},"end":{"line":600,"column":57}},"line":600},"29":{"name":"(anonymous_29)","decl":{"start":{"line":602,"column":42},"end":{"line":602,"column":43}},"loc":{"start":{"line":603,"column":20},"end":{"line":603,"column":70}},"line":603},"30":{"name":"(anonymous_30)","decl":{"start":{"line":605,"column":29},"end":{"line":605,"column":30}},"loc":{"start":{"line":605,"column":46},"end":{"line":621,"column":17}},"line":605},"31":{"name":"(anonymous_31)","decl":{"start":{"line":622,"column":28},"end":{"line":622,"column":29}},"loc":{"start":{"line":622,"column":45},"end":{"line":627,"column":17}},"line":622},"32":{"name":"(anonymous_32)","decl":{"start":{"line":630,"column":39},"end":{"line":630,"column":40}},"loc":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"line":631},"33":{"name":"(anonymous_33)","decl":{"start":{"line":634,"column":49},"end":{"line":634,"column":50}},"loc":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"line":635},"34":{"name":"(anonymous_34)","decl":{"start":{"line":637,"column":46},"end":{"line":637,"column":47}},"loc":{"start":{"line":638,"column":20},"end":{"line":638,"column":64}},"line":638},"35":{"name":"(anonymous_35)","decl":{"start":{"line":640,"column":51},"end":{"line":640,"column":52}},"loc":{"start":{"line":641,"column":20},"end":{"line":641,"column":97}},"line":641},"36":{"name":"(anonymous_36)","decl":{"start":{"line":643,"column":48},"end":{"line":643,"column":49}},"loc":{"start":{"line":644,"column":20},"end":{"line":644,"column":94}},"line":644},"37":{"name":"(anonymous_37)","decl":{"start":{"line":646,"column":54},"end":{"line":646,"column":55}},"loc":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"line":647},"38":{"name":"(anonymous_38)","decl":{"start":{"line":649,"column":45},"end":{"line":649,"column":46}},"loc":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"line":650},"39":{"name":"(anonymous_39)","decl":{"start":{"line":653,"column":30},"end":{"line":653,"column":31}},"loc":{"start":{"line":653,"column":42},"end":{"line":664,"column":17}},"line":653},"40":{"name":"(anonymous_40)","decl":{"start":{"line":665,"column":26},"end":{"line":665,"column":27}},"loc":{"start":{"line":665,"column":38},"end":{"line":669,"column":17}},"line":665},"41":{"name":"(anonymous_41)","decl":{"start":{"line":670,"column":30},"end":{"line":670,"column":31}},"loc":{"start":{"line":670,"column":41},"end":{"line":676,"column":17}},"line":670},"42":{"name":"(anonymous_42)","decl":{"start":{"line":679,"column":38},"end":{"line":679,"column":39}},"loc":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"line":680},"43":{"name":"(anonymous_43)","decl":{"start":{"line":685,"column":47},"end":{"line":685,"column":48}},"loc":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"line":686},"44":{"name":"(anonymous_44)","decl":{"start":{"line":691,"column":39},"end":{"line":691,"column":40}},"loc":{"start":{"line":691,"column":51},"end":{"line":720,"column":17}},"line":691},"45":{"name":"(anonymous_45)","decl":{"start":{"line":721,"column":42},"end":{"line":721,"column":43}},"loc":{"start":{"line":721,"column":54},"end":{"line":750,"column":17}},"line":721},"46":{"name":"(anonymous_46)","decl":{"start":{"line":751,"column":28},"end":{"line":751,"column":29}},"loc":{"start":{"line":751,"column":34},"end":{"line":755,"column":17}},"line":751},"47":{"name":"(anonymous_47)","decl":{"start":{"line":756,"column":48},"end":{"line":756,"column":49}},"loc":{"start":{"line":757,"column":20},"end":{"line":757,"column":46}},"line":757},"48":{"name":"(anonymous_48)","decl":{"start":{"line":759,"column":28},"end":{"line":759,"column":29}},"loc":{"start":{"line":759,"column":34},"end":{"line":763,"column":17}},"line":759},"49":{"name":"(anonymous_49)","decl":{"start":{"line":764,"column":22},"end":{"line":764,"column":23}},"loc":{"start":{"line":764,"column":54},"end":{"line":781,"column":17}},"line":764},"50":{"name":"(anonymous_50)","decl":{"start":{"line":769,"column":87},"end":{"line":769,"column":88}},"loc":{"start":{"line":769,"column":98},"end":{"line":772,"column":21}},"line":769},"51":{"name":"(anonymous_51)","decl":{"start":{"line":775,"column":31},"end":{"line":775,"column":32}},"loc":{"start":{"line":775,"column":37},"end":{"line":780,"column":21}},"line":775},"52":{"name":"(anonymous_52)","decl":{"start":{"line":782,"column":47},"end":{"line":782,"column":48}},"loc":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"line":783},"53":{"name":"(anonymous_53)","decl":{"start":{"line":785,"column":37},"end":{"line":785,"column":38}},"loc":{"start":{"line":785,"column":92},"end":{"line":789,"column":17}},"line":785},"54":{"name":"(anonymous_54)","decl":{"start":{"line":792,"column":37},"end":{"line":792,"column":38}},"loc":{"start":{"line":793,"column":20},"end":{"line":793,"column":71}},"line":793},"55":{"name":"(anonymous_55)","decl":{"start":{"line":795,"column":49},"end":{"line":795,"column":50}},"loc":{"start":{"line":795,"column":55},"end":{"line":809,"column":17}},"line":795},"56":{"name":"(anonymous_56)","decl":{"start":{"line":810,"column":38},"end":{"line":810,"column":39}},"loc":{"start":{"line":810,"column":50},"end":{"line":825,"column":17}},"line":810},"57":{"name":"(anonymous_57)","decl":{"start":{"line":826,"column":37},"end":{"line":826,"column":38}},"loc":{"start":{"line":826,"column":49},"end":{"line":844,"column":17}},"line":826},"58":{"name":"(anonymous_58)","decl":{"start":{"line":845,"column":23},"end":{"line":845,"column":24}},"loc":{"start":{"line":845,"column":35},"end":{"line":847,"column":17}},"line":845},"59":{"name":"(anonymous_59)","decl":{"start":{"line":848,"column":26},"end":{"line":848,"column":27}},"loc":{"start":{"line":848,"column":38},"end":{"line":851,"column":17}},"line":848},"60":{"name":"(anonymous_60)","decl":{"start":{"line":852,"column":25},"end":{"line":852,"column":26}},"loc":{"start":{"line":852,"column":37},"end":{"line":855,"column":17}},"line":852},"61":{"name":"(anonymous_61)","decl":{"start":{"line":856,"column":22},"end":{"line":856,"column":23}},"loc":{"start":{"line":856,"column":34},"end":{"line":858,"column":17}},"line":856},"62":{"name":"(anonymous_62)","decl":{"start":{"line":859,"column":38},"end":{"line":859,"column":39}},"loc":{"start":{"line":859,"column":50},"end":{"line":874,"column":17}},"line":859},"63":{"name":"(anonymous_63)","decl":{"start":{"line":877,"column":41},"end":{"line":877,"column":42}},"loc":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"line":878},"64":{"name":"(anonymous_64)","decl":{"start":{"line":880,"column":46},"end":{"line":880,"column":47}},"loc":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"line":881},"65":{"name":"(anonymous_65)","decl":{"start":{"line":883,"column":39},"end":{"line":883,"column":40}},"loc":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"line":884},"66":{"name":"(anonymous_66)","decl":{"start":{"line":887,"column":29},"end":{"line":887,"column":30}},"loc":{"start":{"line":887,"column":44},"end":{"line":907,"column":17}},"line":887},"67":{"name":"(anonymous_67)","decl":{"start":{"line":893,"column":103},"end":{"line":893,"column":104}},"loc":{"start":{"line":894,"column":28},"end":{"line":894,"column":68}},"line":894},"68":{"name":"(anonymous_68)","decl":{"start":{"line":895,"column":99},"end":{"line":895,"column":100}},"loc":{"start":{"line":896,"column":28},"end":{"line":896,"column":64}},"line":896},"69":{"name":"(anonymous_69)","decl":{"start":{"line":897,"column":102},"end":{"line":897,"column":103}},"loc":{"start":{"line":898,"column":28},"end":{"line":898,"column":67}},"line":898},"70":{"name":"(anonymous_70)","decl":{"start":{"line":899,"column":102},"end":{"line":899,"column":103}},"loc":{"start":{"line":900,"column":28},"end":{"line":900,"column":67}},"line":900},"71":{"name":"(anonymous_71)","decl":{"start":{"line":901,"column":101},"end":{"line":901,"column":102}},"loc":{"start":{"line":902,"column":28},"end":{"line":902,"column":66}},"line":902},"72":{"name":"(anonymous_72)","decl":{"start":{"line":908,"column":21},"end":{"line":908,"column":22}},"loc":{"start":{"line":908,"column":36},"end":{"line":951,"column":17}},"line":908},"73":{"name":"(anonymous_73)","decl":{"start":{"line":952,"column":24},"end":{"line":952,"column":25}},"loc":{"start":{"line":952,"column":35},"end":{"line":954,"column":17}},"line":952},"74":{"name":"(anonymous_74)","decl":{"start":{"line":955,"column":24},"end":{"line":955,"column":25}},"loc":{"start":{"line":955,"column":37},"end":{"line":957,"column":17}},"line":955},"75":{"name":"(anonymous_75)","decl":{"start":{"line":958,"column":32},"end":{"line":958,"column":33}},"loc":{"start":{"line":958,"column":43},"end":{"line":969,"column":17}},"line":958},"76":{"name":"(anonymous_76)","decl":{"start":{"line":973,"column":33},"end":{"line":973,"column":34}},"loc":{"start":{"line":973,"column":48},"end":{"line":993,"column":17}},"line":973},"77":{"name":"(anonymous_77)","decl":{"start":{"line":996,"column":42},"end":{"line":996,"column":43}},"loc":{"start":{"line":997,"column":20},"end":{"line":997,"column":79}},"line":997},"78":{"name":"(anonymous_78)","decl":{"start":{"line":999,"column":39},"end":{"line":999,"column":40}},"loc":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"line":1000},"79":{"name":"(anonymous_79)","decl":{"start":{"line":1003,"column":38},"end":{"line":1003,"column":39}},"loc":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"line":1004},"80":{"name":"(anonymous_80)","decl":{"start":{"line":1009,"column":23},"end":{"line":1009,"column":24}},"loc":{"start":{"line":1009,"column":34},"end":{"line":1018,"column":17}},"line":1009},"81":{"name":"(anonymous_81)","decl":{"start":{"line":1013,"column":24},"end":{"line":1013,"column":25}},"loc":{"start":{"line":1013,"column":32},"end":{"line":1016,"column":25}},"line":1013},"82":{"name":"(anonymous_82)","decl":{"start":{"line":1019,"column":41},"end":{"line":1019,"column":42}},"loc":{"start":{"line":1020,"column":20},"end":{"line":1020,"column":45}},"line":1020},"83":{"name":"(anonymous_83)","decl":{"start":{"line":1021,"column":43},"end":{"line":1021,"column":44}},"loc":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"line":1022},"84":{"name":"(anonymous_84)","decl":{"start":{"line":1024,"column":43},"end":{"line":1024,"column":44}},"loc":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"line":1025},"85":{"name":"(anonymous_85)","decl":{"start":{"line":1029,"column":31},"end":{"line":1029,"column":32}},"loc":{"start":{"line":1029,"column":37},"end":{"line":1031,"column":17}},"line":1029},"86":{"name":"(anonymous_86)","decl":{"start":{"line":1033,"column":32},"end":{"line":1033,"column":33}},"loc":{"start":{"line":1033,"column":38},"end":{"line":1036,"column":21}},"line":1033},"87":{"name":"(anonymous_87)","decl":{"start":{"line":1037,"column":32},"end":{"line":1037,"column":33}},"loc":{"start":{"line":1037,"column":45},"end":{"line":1043,"column":21}},"line":1037},"88":{"name":"(anonymous_88)","decl":{"start":{"line":1044,"column":56},"end":{"line":1044,"column":57}},"loc":{"start":{"line":1045,"column":24},"end":{"line":1045,"column":74}},"line":1045},"89":{"name":"(anonymous_89)","decl":{"start":{"line":1046,"column":40},"end":{"line":1046,"column":41}},"loc":{"start":{"line":1046,"column":46},"end":{"line":1050,"column":21}},"line":1046},"90":{"name":"(anonymous_90)","decl":{"start":{"line":1051,"column":39},"end":{"line":1051,"column":40}},"loc":{"start":{"line":1051,"column":45},"end":{"line":1061,"column":21}},"line":1051},"91":{"name":"(anonymous_91)","decl":{"start":{"line":1052,"column":59},"end":{"line":1052,"column":60}},"loc":{"start":{"line":1052,"column":72},"end":{"line":1060,"column":25}},"line":1052},"92":{"name":"(anonymous_92)","decl":{"start":{"line":1062,"column":39},"end":{"line":1062,"column":40}},"loc":{"start":{"line":1062,"column":45},"end":{"line":1068,"column":21}},"line":1062},"93":{"name":"(anonymous_93)","decl":{"start":{"line":1070,"column":31},"end":{"line":1070,"column":32}},"loc":{"start":{"line":1070,"column":35},"end":{"line":1070,"column":77}},"line":1070},"94":{"name":"(anonymous_94)","decl":{"start":{"line":1071,"column":34},"end":{"line":1071,"column":35}},"loc":{"start":{"line":1071,"column":38},"end":{"line":1071,"column":81}},"line":1071},"95":{"name":"(anonymous_95)","decl":{"start":{"line":1072,"column":30},"end":{"line":1072,"column":31}},"loc":{"start":{"line":1072,"column":34},"end":{"line":1072,"column":73}},"line":1072},"96":{"name":"(anonymous_96)","decl":{"start":{"line":1073,"column":36},"end":{"line":1073,"column":37}},"loc":{"start":{"line":1073,"column":40},"end":{"line":1073,"column":87}},"line":1073},"97":{"name":"(anonymous_97)","decl":{"start":{"line":1074,"column":29},"end":{"line":1074,"column":30}},"loc":{"start":{"line":1074,"column":33},"end":{"line":1074,"column":67}},"line":1074},"98":{"name":"(anonymous_98)","decl":{"start":{"line":1078,"column":32},"end":{"line":1078,"column":33}},"loc":{"start":{"line":1078,"column":38},"end":{"line":1078,"column":90}},"line":1078},"99":{"name":"(anonymous_99)","decl":{"start":{"line":1079,"column":32},"end":{"line":1079,"column":33}},"loc":{"start":{"line":1079,"column":46},"end":{"line":1079,"column":106}},"line":1079},"100":{"name":"(anonymous_100)","decl":{"start":{"line":1080,"column":32},"end":{"line":1080,"column":33}},"loc":{"start":{"line":1080,"column":46},"end":{"line":1080,"column":106}},"line":1080},"101":{"name":"(anonymous_101)","decl":{"start":{"line":1081,"column":34},"end":{"line":1081,"column":35}},"loc":{"start":{"line":1081,"column":40},"end":{"line":1081,"column":94}},"line":1081},"102":{"name":"(anonymous_102)","decl":{"start":{"line":1082,"column":56},"end":{"line":1082,"column":57}},"loc":{"start":{"line":1082,"column":62},"end":{"line":1082,"column":88}},"line":1082},"103":{"name":"(anonymous_103)","decl":{"start":{"line":1083,"column":31},"end":{"line":1083,"column":32}},"loc":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"line":1083},"104":{"name":"(anonymous_104)","decl":{"start":{"line":1086,"column":26},"end":{"line":1086,"column":27}},"loc":{"start":{"line":1086,"column":32},"end":{"line":1086,"column":71}},"line":1086},"105":{"name":"(anonymous_105)","decl":{"start":{"line":1089,"column":33},"end":{"line":1089,"column":34}},"loc":{"start":{"line":1089,"column":64},"end":{"line":1092,"column":21}},"line":1089},"106":{"name":"(anonymous_106)","decl":{"start":{"line":1096,"column":43},"end":{"line":1096,"column":44}},"loc":{"start":{"line":1097,"column":20},"end":{"line":1097,"column":69}},"line":1097},"107":{"name":"(anonymous_107)","decl":{"start":{"line":1099,"column":42},"end":{"line":1099,"column":43}},"loc":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"line":1100},"108":{"name":"(anonymous_108)","decl":{"start":{"line":1102,"column":21},"end":{"line":1102,"column":22}},"loc":{"start":{"line":1102,"column":27},"end":{"line":1111,"column":17}},"line":1102},"109":{"name":"(anonymous_109)","decl":{"start":{"line":1112,"column":49},"end":{"line":1112,"column":50}},"loc":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"line":1113},"110":{"name":"(anonymous_110)","decl":{"start":{"line":1115,"column":28},"end":{"line":1115,"column":29}},"loc":{"start":{"line":1115,"column":34},"end":{"line":1124,"column":17}},"line":1115},"111":{"name":"(anonymous_111)","decl":{"start":{"line":1125,"column":26},"end":{"line":1125,"column":27}},"loc":{"start":{"line":1126,"column":20},"end":{"line":1126,"column":53}},"line":1126},"112":{"name":"(anonymous_112)","decl":{"start":{"line":1129,"column":25},"end":{"line":1129,"column":26}},"loc":{"start":{"line":1130,"column":20},"end":{"line":1130,"column":63}},"line":1130},"113":{"name":"(anonymous_113)","decl":{"start":{"line":1132,"column":37},"end":{"line":1132,"column":38}},"loc":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"line":1133},"114":{"name":"(anonymous_114)","decl":{"start":{"line":1136,"column":42},"end":{"line":1136,"column":43}},"loc":{"start":{"line":1137,"column":20},"end":{"line":1147,"column":75}},"line":1137},"115":{"name":"(anonymous_115)","decl":{"start":{"line":1150,"column":36},"end":{"line":1150,"column":37}},"loc":{"start":{"line":1150,"column":53},"end":{"line":1165,"column":21}},"line":1150},"116":{"name":"(anonymous_116)","decl":{"start":{"line":1158,"column":36},"end":{"line":1158,"column":37}},"loc":{"start":{"line":1158,"column":48},"end":{"line":1161,"column":25}},"line":1158},"117":{"name":"(anonymous_117)","decl":{"start":{"line":1166,"column":38},"end":{"line":1166,"column":39}},"loc":{"start":{"line":1166,"column":55},"end":{"line":1172,"column":21}},"line":1166},"118":{"name":"(anonymous_118)","decl":{"start":{"line":1177,"column":20},"end":{"line":1177,"column":21}},"loc":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"line":1178},"119":{"name":"(anonymous_119)","decl":{"start":{"line":1185,"column":4},"end":{"line":1185,"column":5}},"loc":{"start":{"line":1185,"column":18},"end":{"line":1190,"column":5}},"line":1185},"120":{"name":"(anonymous_120)","decl":{"start":{"line":1196,"column":4},"end":{"line":1196,"column":5}},"loc":{"start":{"line":1196,"column":17},"end":{"line":1198,"column":5}},"line":1196},"121":{"name":"(anonymous_121)","decl":{"start":{"line":1200,"column":4},"end":{"line":1200,"column":5}},"loc":{"start":{"line":1200,"column":20},"end":{"line":1205,"column":5}},"line":1200},"122":{"name":"(anonymous_122)","decl":{"start":{"line":1203,"column":22},"end":{"line":1203,"column":23}},"loc":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"line":1203},"123":{"name":"(anonymous_123)","decl":{"start":{"line":1207,"column":4},"end":{"line":1207,"column":5}},"loc":{"start":{"line":1207,"column":21},"end":{"line":1225,"column":5}},"line":1207},"124":{"name":"(anonymous_124)","decl":{"start":{"line":1227,"column":4},"end":{"line":1227,"column":5}},"loc":{"start":{"line":1227,"column":11},"end":{"line":1230,"column":5}},"line":1227},"125":{"name":"(anonymous_125)","decl":{"start":{"line":1232,"column":4},"end":{"line":1232,"column":5}},"loc":{"start":{"line":1232,"column":11},"end":{"line":1234,"column":5}},"line":1232},"126":{"name":"(anonymous_126)","decl":{"start":{"line":1236,"column":4},"end":{"line":1236,"column":5}},"loc":{"start":{"line":1236,"column":29},"end":{"line":1260,"column":5}},"line":1236},"127":{"name":"(anonymous_127)","decl":{"start":{"line":1237,"column":57},"end":{"line":1237,"column":58}},"loc":{"start":{"line":1237,"column":70},"end":{"line":1240,"column":9}},"line":1237},"128":{"name":"(anonymous_128)","decl":{"start":{"line":1243,"column":28},"end":{"line":1243,"column":29}},"loc":{"start":{"line":1243,"column":34},"end":{"line":1243,"column":94}},"line":1243},"129":{"name":"(anonymous_129)","decl":{"start":{"line":1248,"column":47},"end":{"line":1248,"column":48}},"loc":{"start":{"line":1248,"column":60},"end":{"line":1259,"column":9}},"line":1248},"130":{"name":"(anonymous_130)","decl":{"start":{"line":1262,"column":4},"end":{"line":1262,"column":5}},"loc":{"start":{"line":1262,"column":12},"end":{"line":1264,"column":5}},"line":1262},"131":{"name":"(anonymous_131)","decl":{"start":{"line":1266,"column":4},"end":{"line":1266,"column":5}},"loc":{"start":{"line":1266,"column":21},"end":{"line":1270,"column":5}},"line":1266},"132":{"name":"(anonymous_132)","decl":{"start":{"line":1272,"column":4},"end":{"line":1272,"column":5}},"loc":{"start":{"line":1272,"column":22},"end":{"line":1275,"column":5}},"line":1272},"133":{"name":"(anonymous_133)","decl":{"start":{"line":1277,"column":4},"end":{"line":1277,"column":5}},"loc":{"start":{"line":1277,"column":14},"end":{"line":1279,"column":5}},"line":1277}},"branchMap":{"0":{"loc":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},{"start":{},"end":{}}],"line":59},"1":{"loc":{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":87,"column":8},"end":{"line":93,"column":9}},{"start":{"line":89,"column":15},"end":{"line":93,"column":9}}],"line":87},"2":{"loc":{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":89,"column":15},"end":{"line":93,"column":9}},{"start":{"line":91,"column":15},"end":{"line":93,"column":9}}],"line":89},"3":{"loc":{"start":{"line":144,"column":44},"end":{"line":144,"column":91}},"type":"binary-expr","locations":[{"start":{"line":144,"column":44},"end":{"line":144,"column":85}},{"start":{"line":144,"column":89},"end":{"line":144,"column":91}}],"line":144},"4":{"loc":{"start":{"line":145,"column":37},"end":{"line":145,"column":77}},"type":"binary-expr","locations":[{"start":{"line":145,"column":37},"end":{"line":145,"column":71}},{"start":{"line":145,"column":75},"end":{"line":145,"column":77}}],"line":145},"5":{"loc":{"start":{"line":146,"column":40},"end":{"line":146,"column":85}},"type":"binary-expr","locations":[{"start":{"line":146,"column":40},"end":{"line":146,"column":77}},{"start":{"line":146,"column":81},"end":{"line":146,"column":85}}],"line":146},"6":{"loc":{"start":{"line":147,"column":38},"end":{"line":147,"column":81}},"type":"binary-expr","locations":[{"start":{"line":147,"column":38},"end":{"line":147,"column":73}},{"start":{"line":147,"column":77},"end":{"line":147,"column":81}}],"line":147},"7":{"loc":{"start":{"line":148,"column":57},"end":{"line":148,"column":135}},"type":"binary-expr","locations":[{"start":{"line":148,"column":57},"end":{"line":148,"column":129}},{"start":{"line":148,"column":133},"end":{"line":148,"column":135}}],"line":148},"8":{"loc":{"start":{"line":165,"column":36},"end":{"line":165,"column":118}},"type":"binary-expr","locations":[{"start":{"line":165,"column":36},"end":{"line":165,"column":112}},{"start":{"line":165,"column":116},"end":{"line":165,"column":118}}],"line":165},"9":{"loc":{"start":{"line":165,"column":48},"end":{"line":165,"column":86}},"type":"binary-expr","locations":[{"start":{"line":165,"column":48},"end":{"line":165,"column":80}},{"start":{"line":165,"column":84},"end":{"line":165,"column":86}}],"line":165},"10":{"loc":{"start":{"line":281,"column":52},"end":{"line":281,"column":90}},"type":"binary-expr","locations":[{"start":{"line":281,"column":52},"end":{"line":281,"column":84}},{"start":{"line":281,"column":88},"end":{"line":281,"column":90}}],"line":281},"11":{"loc":{"start":{"line":407,"column":22},"end":{"line":407,"column":62}},"type":"binary-expr","locations":[{"start":{"line":407,"column":22},"end":{"line":407,"column":56}},{"start":{"line":407,"column":60},"end":{"line":407,"column":62}}],"line":407},"12":{"loc":{"start":{"line":413,"column":38},"end":{"line":413,"column":67}},"type":"binary-expr","locations":[{"start":{"line":413,"column":38},"end":{"line":413,"column":61}},{"start":{"line":413,"column":65},"end":{"line":413,"column":67}}],"line":413},"13":{"loc":{"start":{"line":414,"column":43},"end":{"line":414,"column":85}},"type":"binary-expr","locations":[{"start":{"line":414,"column":43},"end":{"line":414,"column":72}},{"start":{"line":414,"column":76},"end":{"line":414,"column":85}}],"line":414},"14":{"loc":{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},"type":"if","locations":[{"start":{"line":446,"column":8},"end":{"line":450,"column":9}},{"start":{},"end":{}}],"line":446},"15":{"loc":{"start":{"line":454,"column":35},"end":{"line":454,"column":104}},"type":"binary-expr","locations":[{"start":{"line":454,"column":35},"end":{"line":454,"column":98}},{"start":{"line":454,"column":102},"end":{"line":454,"column":104}}],"line":454},"16":{"loc":{"start":{"line":460,"column":44},"end":{"line":460,"column":99}},"type":"binary-expr","locations":[{"start":{"line":460,"column":44},"end":{"line":460,"column":69}},{"start":{"line":460,"column":73},"end":{"line":460,"column":99}}],"line":460},"17":{"loc":{"start":{"line":461,"column":47},"end":{"line":461,"column":105}},"type":"binary-expr","locations":[{"start":{"line":461,"column":47},"end":{"line":461,"column":75}},{"start":{"line":461,"column":79},"end":{"line":461,"column":105}}],"line":461},"18":{"loc":{"start":{"line":488,"column":39},"end":{"line":488,"column":67}},"type":"binary-expr","locations":[{"start":{"line":488,"column":39},"end":{"line":488,"column":59}},{"start":{"line":488,"column":63},"end":{"line":488,"column":67}}],"line":488},"19":{"loc":{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},"type":"if","locations":[{"start":{"line":489,"column":8},"end":{"line":491,"column":9}},{"start":{},"end":{}}],"line":489},"20":{"loc":{"start":{"line":492,"column":37},"end":{"line":492,"column":63}},"type":"binary-expr","locations":[{"start":{"line":492,"column":37},"end":{"line":492,"column":55}},{"start":{"line":492,"column":59},"end":{"line":492,"column":63}}],"line":492},"21":{"loc":{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},"type":"if","locations":[{"start":{"line":493,"column":8},"end":{"line":495,"column":9}},{"start":{},"end":{}}],"line":493},"22":{"loc":{"start":{"line":520,"column":16},"end":{"line":520,"column":86}},"type":"binary-expr","locations":[{"start":{"line":520,"column":16},"end":{"line":520,"column":43}},{"start":{"line":520,"column":47},"end":{"line":520,"column":86}}],"line":520},"23":{"loc":{"start":{"line":523,"column":20},"end":{"line":523,"column":83}},"type":"binary-expr","locations":[{"start":{"line":523,"column":20},"end":{"line":523,"column":49}},{"start":{"line":523,"column":53},"end":{"line":523,"column":83}}],"line":523},"24":{"loc":{"start":{"line":530,"column":20},"end":{"line":532,"column":80}},"type":"cond-expr","locations":[{"start":{"line":531,"column":24},"end":{"line":531,"column":84}},{"start":{"line":532,"column":24},"end":{"line":532,"column":80}}],"line":530},"25":{"loc":{"start":{"line":540,"column":24},"end":{"line":540,"column":98}},"type":"binary-expr","locations":[{"start":{"line":540,"column":24},"end":{"line":540,"column":50}},{"start":{"line":540,"column":54},"end":{"line":540,"column":98}}],"line":540},"26":{"loc":{"start":{"line":543,"column":20},"end":{"line":543,"column":100}},"type":"cond-expr","locations":[{"start":{"line":543,"column":51},"end":{"line":543,"column":75}},{"start":{"line":543,"column":78},"end":{"line":543,"column":100}}],"line":543},"27":{"loc":{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},"type":"if","locations":[{"start":{"line":552,"column":20},"end":{"line":556,"column":21}},{"start":{"line":554,"column":27},"end":{"line":556,"column":21}}],"line":552},"28":{"loc":{"start":{"line":560,"column":20},"end":{"line":561,"column":56}},"type":"binary-expr","locations":[{"start":{"line":560,"column":20},"end":{"line":560,"column":45}},{"start":{"line":560,"column":49},"end":{"line":560,"column":76}},{"start":{"line":561,"column":20},"end":{"line":561,"column":56}}],"line":560},"29":{"loc":{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":564,"column":20},"end":{"line":576,"column":21}},{"start":{"line":566,"column":27},"end":{"line":576,"column":21}}],"line":564},"30":{"loc":{"start":{"line":565,"column":31},"end":{"line":565,"column":92}},"type":"cond-expr","locations":[{"start":{"line":565,"column":54},"end":{"line":565,"column":70}},{"start":{"line":565,"column":73},"end":{"line":565,"column":92}}],"line":565},"31":{"loc":{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":566,"column":27},"end":{"line":576,"column":21}},{"start":{"line":568,"column":27},"end":{"line":576,"column":21}}],"line":566},"32":{"loc":{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},"type":"if","locations":[{"start":{"line":568,"column":27},"end":{"line":576,"column":21}},{"start":{"line":570,"column":27},"end":{"line":576,"column":21}}],"line":568},"33":{"loc":{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},"type":"if","locations":[{"start":{"line":571,"column":24},"end":{"line":575,"column":25}},{"start":{"line":573,"column":31},"end":{"line":575,"column":25}}],"line":571},"34":{"loc":{"start":{"line":571,"column":28},"end":{"line":571,"column":84}},"type":"binary-expr","locations":[{"start":{"line":571,"column":28},"end":{"line":571,"column":54}},{"start":{"line":571,"column":58},"end":{"line":571,"column":84}}],"line":571},"35":{"loc":{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":579,"column":20},"end":{"line":587,"column":21}},{"start":{"line":581,"column":27},"end":{"line":587,"column":21}}],"line":579},"36":{"loc":{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":581,"column":27},"end":{"line":587,"column":21}},{"start":{"line":583,"column":27},"end":{"line":587,"column":21}}],"line":581},"37":{"loc":{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},"type":"if","locations":[{"start":{"line":583,"column":27},"end":{"line":587,"column":21}},{"start":{"line":585,"column":27},"end":{"line":587,"column":21}}],"line":583},"38":{"loc":{"start":{"line":590,"column":20},"end":{"line":591,"column":85}},"type":"binary-expr","locations":[{"start":{"line":590,"column":21},"end":{"line":590,"column":48}},{"start":{"line":590,"column":52},"end":{"line":590,"column":88}},{"start":{"line":591,"column":20},"end":{"line":591,"column":85}}],"line":590},"39":{"loc":{"start":{"line":620,"column":38},"end":{"line":620,"column":70}},"type":"cond-expr","locations":[{"start":{"line":620,"column":62},"end":{"line":620,"column":64}},{"start":{"line":620,"column":67},"end":{"line":620,"column":70}}],"line":620},"40":{"loc":{"start":{"line":631,"column":20},"end":{"line":632,"column":48}},"type":"cond-expr","locations":[{"start":{"line":632,"column":24},"end":{"line":632,"column":35}},{"start":{"line":632,"column":38},"end":{"line":632,"column":48}}],"line":631},"41":{"loc":{"start":{"line":631,"column":20},"end":{"line":631,"column":90}},"type":"binary-expr","locations":[{"start":{"line":631,"column":20},"end":{"line":631,"column":46}},{"start":{"line":631,"column":50},"end":{"line":631,"column":90}}],"line":631},"42":{"loc":{"start":{"line":635,"column":20},"end":{"line":635,"column":94}},"type":"binary-expr","locations":[{"start":{"line":635,"column":20},"end":{"line":635,"column":47}},{"start":{"line":635,"column":51},"end":{"line":635,"column":94}}],"line":635},"43":{"loc":{"start":{"line":647,"column":20},"end":{"line":647,"column":97}},"type":"binary-expr","locations":[{"start":{"line":647,"column":20},"end":{"line":647,"column":58}},{"start":{"line":647,"column":62},"end":{"line":647,"column":97}}],"line":647},"44":{"loc":{"start":{"line":650,"column":20},"end":{"line":651,"column":41}},"type":"cond-expr","locations":[{"start":{"line":651,"column":24},"end":{"line":651,"column":36}},{"start":{"line":651,"column":39},"end":{"line":651,"column":41}}],"line":650},"45":{"loc":{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":655,"column":20},"end":{"line":663,"column":21}},{"start":{"line":657,"column":27},"end":{"line":663,"column":21}}],"line":655},"46":{"loc":{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":657,"column":27},"end":{"line":663,"column":21}},{"start":{"line":659,"column":27},"end":{"line":663,"column":21}}],"line":657},"47":{"loc":{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},"type":"if","locations":[{"start":{"line":659,"column":27},"end":{"line":663,"column":21}},{"start":{"line":661,"column":27},"end":{"line":663,"column":21}}],"line":659},"48":{"loc":{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},"type":"if","locations":[{"start":{"line":672,"column":20},"end":{"line":675,"column":21}},{"start":{},"end":{}}],"line":672},"49":{"loc":{"start":{"line":680,"column":20},"end":{"line":683,"column":34}},"type":"cond-expr","locations":[{"start":{"line":682,"column":24},"end":{"line":682,"column":35}},{"start":{"line":683,"column":24},"end":{"line":683,"column":34}}],"line":680},"50":{"loc":{"start":{"line":680,"column":20},"end":{"line":681,"column":95}},"type":"binary-expr","locations":[{"start":{"line":680,"column":21},"end":{"line":680,"column":48}},{"start":{"line":680,"column":52},"end":{"line":680,"column":91}},{"start":{"line":681,"column":21},"end":{"line":681,"column":94}}],"line":680},"51":{"loc":{"start":{"line":686,"column":20},"end":{"line":687,"column":69}},"type":"binary-expr","locations":[{"start":{"line":686,"column":20},"end":{"line":686,"column":60}},{"start":{"line":686,"column":64},"end":{"line":686,"column":98}},{"start":{"line":687,"column":20},"end":{"line":687,"column":69}}],"line":686},"52":{"loc":{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},"type":"if","locations":[{"start":{"line":692,"column":20},"end":{"line":694,"column":21}},{"start":{},"end":{}}],"line":692},"53":{"loc":{"start":{"line":695,"column":20},"end":{"line":719,"column":21}},"type":"switch","locations":[{"start":{"line":696,"column":24},"end":{"line":696,"column":32}},{"start":{"line":697,"column":24},"end":{"line":698,"column":48}},{"start":{"line":699,"column":24},"end":{"line":700,"column":57}},{"start":{"line":701,"column":24},"end":{"line":702,"column":56}},{"start":{"line":703,"column":24},"end":{"line":704,"column":56}},{"start":{"line":705,"column":24},"end":{"line":706,"column":58}},{"start":{"line":707,"column":24},"end":{"line":707,"column":40}},{"start":{"line":708,"column":24},"end":{"line":709,"column":58}},{"start":{"line":710,"column":24},"end":{"line":710,"column":40}},{"start":{"line":711,"column":24},"end":{"line":712,"column":58}},{"start":{"line":713,"column":24},"end":{"line":714,"column":60}},{"start":{"line":715,"column":24},"end":{"line":716,"column":56}},{"start":{"line":717,"column":24},"end":{"line":718,"column":53}}],"line":695},"54":{"loc":{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},"type":"if","locations":[{"start":{"line":722,"column":20},"end":{"line":724,"column":21}},{"start":{},"end":{}}],"line":722},"55":{"loc":{"start":{"line":725,"column":20},"end":{"line":749,"column":21}},"type":"switch","locations":[{"start":{"line":726,"column":24},"end":{"line":726,"column":32}},{"start":{"line":727,"column":24},"end":{"line":728,"column":38}},{"start":{"line":729,"column":24},"end":{"line":730,"column":51}},{"start":{"line":731,"column":24},"end":{"line":732,"column":50}},{"start":{"line":733,"column":24},"end":{"line":734,"column":50}},{"start":{"line":735,"column":24},"end":{"line":736,"column":52}},{"start":{"line":737,"column":24},"end":{"line":737,"column":40}},{"start":{"line":738,"column":24},"end":{"line":739,"column":53}},{"start":{"line":740,"column":24},"end":{"line":740,"column":40}},{"start":{"line":741,"column":24},"end":{"line":742,"column":50}},{"start":{"line":743,"column":24},"end":{"line":744,"column":54}},{"start":{"line":745,"column":24},"end":{"line":746,"column":46}},{"start":{"line":747,"column":24},"end":{"line":748,"column":47}}],"line":725},"56":{"loc":{"start":{"line":764,"column":31},"end":{"line":764,"column":49}},"type":"default-arg","locations":[{"start":{"line":764,"column":44},"end":{"line":764,"column":49}}],"line":764},"57":{"loc":{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},"type":"if","locations":[{"start":{"line":777,"column":24},"end":{"line":779,"column":25}},{"start":{},"end":{}}],"line":777},"58":{"loc":{"start":{"line":783,"column":20},"end":{"line":783,"column":60}},"type":"cond-expr","locations":[{"start":{"line":783,"column":47},"end":{"line":783,"column":52}},{"start":{"line":783,"column":55},"end":{"line":783,"column":60}}],"line":783},"59":{"loc":{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},"type":"if","locations":[{"start":{"line":786,"column":20},"end":{"line":788,"column":21}},{"start":{},"end":{}}],"line":786},"60":{"loc":{"start":{"line":786,"column":24},"end":{"line":786,"column":69}},"type":"binary-expr","locations":[{"start":{"line":786,"column":24},"end":{"line":786,"column":39}},{"start":{"line":786,"column":43},"end":{"line":786,"column":69}}],"line":786},"61":{"loc":{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},"type":"if","locations":[{"start":{"line":796,"column":20},"end":{"line":798,"column":21}},{"start":{},"end":{}}],"line":796},"62":{"loc":{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},"type":"if","locations":[{"start":{"line":802,"column":20},"end":{"line":808,"column":21}},{"start":{"line":804,"column":27},"end":{"line":808,"column":21}}],"line":802},"63":{"loc":{"start":{"line":802,"column":24},"end":{"line":802,"column":51}},"type":"binary-expr","locations":[{"start":{"line":802,"column":24},"end":{"line":802,"column":34}},{"start":{"line":802,"column":38},"end":{"line":802,"column":51}}],"line":802},"64":{"loc":{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},"type":"if","locations":[{"start":{"line":804,"column":27},"end":{"line":808,"column":21}},{"start":{"line":806,"column":27},"end":{"line":808,"column":21}}],"line":804},"65":{"loc":{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},"type":"if","locations":[{"start":{"line":814,"column":20},"end":{"line":816,"column":21}},{"start":{},"end":{}}],"line":814},"66":{"loc":{"start":{"line":814,"column":24},"end":{"line":814,"column":51}},"type":"binary-expr","locations":[{"start":{"line":814,"column":24},"end":{"line":814,"column":34}},{"start":{"line":814,"column":38},"end":{"line":814,"column":51}}],"line":814},"67":{"loc":{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},"type":"if","locations":[{"start":{"line":817,"column":20},"end":{"line":824,"column":21}},{"start":{"line":819,"column":27},"end":{"line":824,"column":21}}],"line":817},"68":{"loc":{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},"type":"if","locations":[{"start":{"line":819,"column":27},"end":{"line":824,"column":21}},{"start":{"line":821,"column":27},"end":{"line":824,"column":21}}],"line":819},"69":{"loc":{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},"type":"if","locations":[{"start":{"line":830,"column":20},"end":{"line":832,"column":21}},{"start":{},"end":{}}],"line":830},"70":{"loc":{"start":{"line":833,"column":20},"end":{"line":843,"column":21}},"type":"switch","locations":[{"start":{"line":834,"column":24},"end":{"line":835,"column":56}},{"start":{"line":836,"column":24},"end":{"line":840,"column":56}},{"start":{"line":841,"column":24},"end":{"line":842,"column":94}}],"line":833},"71":{"loc":{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},"type":"if","locations":[{"start":{"line":837,"column":28},"end":{"line":839,"column":29}},{"start":{},"end":{}}],"line":837},"72":{"loc":{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},"type":"if","locations":[{"start":{"line":863,"column":20},"end":{"line":865,"column":21}},{"start":{},"end":{}}],"line":863},"73":{"loc":{"start":{"line":866,"column":20},"end":{"line":873,"column":21}},"type":"switch","locations":[{"start":{"line":867,"column":24},"end":{"line":868,"column":38}},{"start":{"line":869,"column":24},"end":{"line":870,"column":55}},{"start":{"line":871,"column":24},"end":{"line":872,"column":51}}],"line":866},"74":{"loc":{"start":{"line":878,"column":20},"end":{"line":878,"column":135}},"type":"binary-expr","locations":[{"start":{"line":878,"column":20},"end":{"line":878,"column":46}},{"start":{"line":878,"column":50},"end":{"line":878,"column":88}},{"start":{"line":878,"column":92},"end":{"line":878,"column":135}}],"line":878},"75":{"loc":{"start":{"line":881,"column":20},"end":{"line":881,"column":88}},"type":"binary-expr","locations":[{"start":{"line":881,"column":20},"end":{"line":881,"column":46}},{"start":{"line":881,"column":50},"end":{"line":881,"column":88}}],"line":881},"76":{"loc":{"start":{"line":884,"column":20},"end":{"line":885,"column":48}},"type":"cond-expr","locations":[{"start":{"line":885,"column":24},"end":{"line":885,"column":35}},{"start":{"line":885,"column":38},"end":{"line":885,"column":48}}],"line":884},"77":{"loc":{"start":{"line":884,"column":20},"end":{"line":884,"column":90}},"type":"binary-expr","locations":[{"start":{"line":884,"column":20},"end":{"line":884,"column":46}},{"start":{"line":884,"column":50},"end":{"line":884,"column":90}}],"line":884},"78":{"loc":{"start":{"line":888,"column":20},"end":{"line":906,"column":21}},"type":"switch","locations":[{"start":{"line":889,"column":24},"end":{"line":889,"column":73}},{"start":{"line":890,"column":24},"end":{"line":890,"column":88}},{"start":{"line":891,"column":24},"end":{"line":891,"column":90}},{"start":{"line":892,"column":24},"end":{"line":892,"column":86}},{"start":{"line":893,"column":24},"end":{"line":894,"column":70}},{"start":{"line":895,"column":24},"end":{"line":896,"column":66}},{"start":{"line":897,"column":24},"end":{"line":898,"column":69}},{"start":{"line":899,"column":24},"end":{"line":900,"column":69}},{"start":{"line":901,"column":24},"end":{"line":902,"column":68}},{"start":{"line":903,"column":24},"end":{"line":903,"column":84}},{"start":{"line":904,"column":24},"end":{"line":904,"column":111}},{"start":{"line":905,"column":24},"end":{"line":905,"column":46}}],"line":888},"79":{"loc":{"start":{"line":909,"column":20},"end":{"line":949,"column":21}},"type":"switch","locations":[{"start":{"line":910,"column":24},"end":{"line":910,"column":50}},{"start":{"line":911,"column":24},"end":{"line":911,"column":49}},{"start":{"line":912,"column":24},"end":{"line":912,"column":49}},{"start":{"line":913,"column":24},"end":{"line":913,"column":45}},{"start":{"line":914,"column":24},"end":{"line":916,"column":34}},{"start":{"line":917,"column":24},"end":{"line":919,"column":34}},{"start":{"line":920,"column":24},"end":{"line":924,"column":34}},{"start":{"line":925,"column":24},"end":{"line":928,"column":34}},{"start":{"line":929,"column":24},"end":{"line":932,"column":34}},{"start":{"line":934,"column":24},"end":{"line":937,"column":34}},{"start":{"line":938,"column":24},"end":{"line":940,"column":35}},{"start":{"line":941,"column":24},"end":{"line":943,"column":35}},{"start":{"line":944,"column":24},"end":{"line":946,"column":35}},{"start":{"line":947,"column":24},"end":{"line":947,"column":32}}],"line":909},"80":{"loc":{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},"type":"if","locations":[{"start":{"line":962,"column":20},"end":{"line":964,"column":21}},{"start":{},"end":{}}],"line":962},"81":{"loc":{"start":{"line":962,"column":24},"end":{"line":962,"column":72}},"type":"binary-expr","locations":[{"start":{"line":962,"column":24},"end":{"line":962,"column":32}},{"start":{"line":962,"column":36},"end":{"line":962,"column":51}},{"start":{"line":962,"column":55},"end":{"line":962,"column":72}}],"line":962},"82":{"loc":{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},"type":"if","locations":[{"start":{"line":965,"column":20},"end":{"line":967,"column":21}},{"start":{},"end":{}}],"line":965},"83":{"loc":{"start":{"line":965,"column":24},"end":{"line":965,"column":72}},"type":"binary-expr","locations":[{"start":{"line":965,"column":24},"end":{"line":965,"column":32}},{"start":{"line":965,"column":36},"end":{"line":965,"column":51}},{"start":{"line":965,"column":55},"end":{"line":965,"column":72}}],"line":965},"84":{"loc":{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},"type":"if","locations":[{"start":{"line":974,"column":20},"end":{"line":976,"column":21}},{"start":{},"end":{}}],"line":974},"85":{"loc":{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},"type":"if","locations":[{"start":{"line":977,"column":20},"end":{"line":979,"column":21}},{"start":{},"end":{}}],"line":977},"86":{"loc":{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},"type":"if","locations":[{"start":{"line":980,"column":20},"end":{"line":982,"column":21}},{"start":{},"end":{}}],"line":980},"87":{"loc":{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},"type":"if","locations":[{"start":{"line":983,"column":20},"end":{"line":985,"column":21}},{"start":{},"end":{}}],"line":983},"88":{"loc":{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},"type":"if","locations":[{"start":{"line":986,"column":20},"end":{"line":988,"column":21}},{"start":{},"end":{}}],"line":986},"89":{"loc":{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},"type":"if","locations":[{"start":{"line":989,"column":20},"end":{"line":991,"column":21}},{"start":{},"end":{}}],"line":989},"90":{"loc":{"start":{"line":1000,"column":20},"end":{"line":1001,"column":48}},"type":"cond-expr","locations":[{"start":{"line":1001,"column":24},"end":{"line":1001,"column":35}},{"start":{"line":1001,"column":38},"end":{"line":1001,"column":48}}],"line":1000},"91":{"loc":{"start":{"line":1000,"column":20},"end":{"line":1000,"column":90}},"type":"binary-expr","locations":[{"start":{"line":1000,"column":20},"end":{"line":1000,"column":46}},{"start":{"line":1000,"column":50},"end":{"line":1000,"column":90}}],"line":1000},"92":{"loc":{"start":{"line":1004,"column":20},"end":{"line":1007,"column":82}},"type":"cond-expr","locations":[{"start":{"line":1006,"column":72},"end":{"line":1006,"column":78}},{"start":{"line":1007,"column":20},"end":{"line":1007,"column":82}}],"line":1004},"93":{"loc":{"start":{"line":1004,"column":21},"end":{"line":1006,"column":68}},"type":"binary-expr","locations":[{"start":{"line":1004,"column":21},"end":{"line":1004,"column":48}},{"start":{"line":1005,"column":24},"end":{"line":1005,"column":63}},{"start":{"line":1006,"column":24},"end":{"line":1006,"column":67}}],"line":1004},"94":{"loc":{"start":{"line":1007,"column":20},"end":{"line":1007,"column":82}},"type":"cond-expr","locations":[{"start":{"line":1007,"column":47},"end":{"line":1007,"column":73}},{"start":{"line":1007,"column":76},"end":{"line":1007,"column":82}}],"line":1007},"95":{"loc":{"start":{"line":1022,"column":20},"end":{"line":1023,"column":78}},"type":"binary-expr","locations":[{"start":{"line":1022,"column":21},"end":{"line":1022,"column":59}},{"start":{"line":1022,"column":63},"end":{"line":1022,"column":89}},{"start":{"line":1023,"column":20},"end":{"line":1023,"column":78}}],"line":1022},"96":{"loc":{"start":{"line":1025,"column":20},"end":{"line":1026,"column":78}},"type":"binary-expr","locations":[{"start":{"line":1025,"column":21},"end":{"line":1025,"column":59}},{"start":{"line":1025,"column":63},"end":{"line":1025,"column":89}},{"start":{"line":1026,"column":20},"end":{"line":1026,"column":78}}],"line":1025},"97":{"loc":{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},"type":"if","locations":[{"start":{"line":1040,"column":24},"end":{"line":1042,"column":25}},{"start":{},"end":{}}],"line":1040},"98":{"loc":{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},"type":"if","locations":[{"start":{"line":1053,"column":28},"end":{"line":1059,"column":29}},{"start":{"line":1057,"column":35},"end":{"line":1059,"column":29}}],"line":1053},"99":{"loc":{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},"type":"if","locations":[{"start":{"line":1063,"column":24},"end":{"line":1067,"column":25}},{"start":{"line":1065,"column":31},"end":{"line":1067,"column":25}}],"line":1063},"100":{"loc":{"start":{"line":1083,"column":46},"end":{"line":1083,"column":126}},"type":"binary-expr","locations":[{"start":{"line":1083,"column":46},"end":{"line":1083,"column":72}},{"start":{"line":1083,"column":76},"end":{"line":1083,"column":102}},{"start":{"line":1083,"column":106},"end":{"line":1083,"column":126}}],"line":1083},"101":{"loc":{"start":{"line":1100,"column":20},"end":{"line":1100,"column":86}},"type":"cond-expr","locations":[{"start":{"line":1100,"column":72},"end":{"line":1100,"column":78}},{"start":{"line":1100,"column":81},"end":{"line":1100,"column":86}}],"line":1100},"102":{"loc":{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},"type":"if","locations":[{"start":{"line":1103,"column":20},"end":{"line":1110,"column":21}},{"start":{"line":1108,"column":27},"end":{"line":1110,"column":21}}],"line":1103},"103":{"loc":{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},"type":"if","locations":[{"start":{"line":1104,"column":24},"end":{"line":1106,"column":25}},{"start":{},"end":{}}],"line":1104},"104":{"loc":{"start":{"line":1104,"column":28},"end":{"line":1104,"column":81}},"type":"binary-expr","locations":[{"start":{"line":1104,"column":28},"end":{"line":1104,"column":60}},{"start":{"line":1104,"column":64},"end":{"line":1104,"column":81}}],"line":1104},"105":{"loc":{"start":{"line":1113,"column":20},"end":{"line":1113,"column":103}},"type":"cond-expr","locations":[{"start":{"line":1113,"column":72},"end":{"line":1113,"column":78}},{"start":{"line":1113,"column":81},"end":{"line":1113,"column":103}}],"line":1113},"106":{"loc":{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},"type":"if","locations":[{"start":{"line":1116,"column":20},"end":{"line":1123,"column":21}},{"start":{"line":1121,"column":27},"end":{"line":1123,"column":21}}],"line":1116},"107":{"loc":{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},"type":"if","locations":[{"start":{"line":1117,"column":24},"end":{"line":1119,"column":25}},{"start":{},"end":{}}],"line":1117},"108":{"loc":{"start":{"line":1117,"column":28},"end":{"line":1117,"column":81}},"type":"binary-expr","locations":[{"start":{"line":1117,"column":28},"end":{"line":1117,"column":60}},{"start":{"line":1117,"column":64},"end":{"line":1117,"column":81}}],"line":1117},"109":{"loc":{"start":{"line":1133,"column":20},"end":{"line":1135,"column":68}},"type":"binary-expr","locations":[{"start":{"line":1133,"column":20},"end":{"line":1133,"column":57}},{"start":{"line":1134,"column":20},"end":{"line":1134,"column":58}},{"start":{"line":1135,"column":20},"end":{"line":1135,"column":68}}],"line":1133},"110":{"loc":{"start":{"line":1137,"column":31},"end":{"line":1147,"column":74}},"type":"binary-expr","locations":[{"start":{"line":1137,"column":31},"end":{"line":1137,"column":67}},{"start":{"line":1138,"column":24},"end":{"line":1138,"column":60}},{"start":{"line":1139,"column":24},"end":{"line":1139,"column":57}},{"start":{"line":1140,"column":24},"end":{"line":1140,"column":54}},{"start":{"line":1141,"column":24},"end":{"line":1141,"column":54}},{"start":{"line":1142,"column":24},"end":{"line":1142,"column":57}},{"start":{"line":1143,"column":24},"end":{"line":1143,"column":54}},{"start":{"line":1144,"column":24},"end":{"line":1144,"column":48}},{"start":{"line":1145,"column":24},"end":{"line":1145,"column":62}},{"start":{"line":1146,"column":24},"end":{"line":1146,"column":50}},{"start":{"line":1147,"column":24},"end":{"line":1147,"column":68}},{"start":{"line":1147,"column":72},"end":{"line":1147,"column":74}}],"line":1137},"111":{"loc":{"start":{"line":1178,"column":24},"end":{"line":1178,"column":77}},"type":"binary-expr","locations":[{"start":{"line":1178,"column":24},"end":{"line":1178,"column":50}},{"start":{"line":1178,"column":54},"end":{"line":1178,"column":77}}],"line":1178},"112":{"loc":{"start":{"line":1203,"column":32},"end":{"line":1203,"column":83}},"type":"cond-expr","locations":[{"start":{"line":1203,"column":39},"end":{"line":1203,"column":71}},{"start":{"line":1203,"column":74},"end":{"line":1203,"column":83}}],"line":1203},"113":{"loc":{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},"type":"if","locations":[{"start":{"line":1244,"column":8},"end":{"line":1246,"column":9}},{"start":{},"end":{}}],"line":1244},"114":{"loc":{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},"type":"if","locations":[{"start":{"line":1249,"column":12},"end":{"line":1258,"column":13}},{"start":{"line":1254,"column":19},"end":{"line":1258,"column":13}}],"line":1249},"115":{"loc":{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},"type":"if","locations":[{"start":{"line":1250,"column":16},"end":{"line":1253,"column":17}},{"start":{},"end":{}}],"line":1250},"116":{"loc":{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},"type":"if","locations":[{"start":{"line":1255,"column":16},"end":{"line":1257,"column":17}},{"start":{},"end":{}}],"line":1255}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0,0],"51":[0,0,0],"52":[0,0],"53":[0,0,0,0,0,0,0,0,0,0,0,0,0],"54":[0,0],"55":[0,0,0,0,0,0,0,0,0,0,0,0,0],"56":[0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0,0],"71":[0,0],"72":[0,0],"73":[0,0,0],"74":[0,0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0,0,0,0,0,0,0,0,0,0,0],"79":[0,0,0,0,0,0,0,0,0,0,0,0,0,0],"80":[0,0],"81":[0,0,0],"82":[0,0],"83":[0,0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0,0],"94":[0,0],"95":[0,0,0],"96":[0,0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0,0],"110":[0,0,0,0,0,0,0,0,0,0,0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4b2dcefbc4cc4bde8c17749519d2bb0e3d382bd8"} -,"/home/runner/work/blockpy/blockpy/src/console.js": {"path":"/home/runner/work/blockpy/blockpy/src/console.js","statementMap":{"0":{"start":{"line":7,"column":24},"end":{"line":10,"column":10}},"1":{"start":{"line":16,"column":30},"end":{"line":16,"column":43}},"2":{"start":{"line":22,"column":28},"end":{"line":39,"column":12}},"3":{"start":{"line":45,"column":29},"end":{"line":58,"column":1}},"4":{"start":{"line":71,"column":8},"end":{"line":71,"column":25}},"5":{"start":{"line":76,"column":8},"end":{"line":76,"column":25}},"6":{"start":{"line":81,"column":8},"end":{"line":81,"column":31}},"7":{"start":{"line":86,"column":8},"end":{"line":90,"column":10}},"8":{"start":{"line":96,"column":8},"end":{"line":103,"column":11}},"9":{"start":{"line":108,"column":8},"end":{"line":108,"column":57}},"10":{"start":{"line":113,"column":8},"end":{"line":113,"column":23}},"11":{"start":{"line":121,"column":8},"end":{"line":121,"column":46}},"12":{"start":{"line":128,"column":8},"end":{"line":128,"column":27}},"13":{"start":{"line":135,"column":8},"end":{"line":135,"column":44}},"14":{"start":{"line":136,"column":8},"end":{"line":136,"column":60}},"15":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"16":{"start":{"line":141,"column":12},"end":{"line":141,"column":37}},"17":{"start":{"line":143,"column":22},"end":{"line":143,"column":44}},"18":{"start":{"line":145,"column":12},"end":{"line":145,"column":37}},"19":{"start":{"line":153,"column":8},"end":{"line":153,"column":45}},"20":{"start":{"line":154,"column":8},"end":{"line":154,"column":61}},"21":{"start":{"line":155,"column":8},"end":{"line":155,"column":25}},"22":{"start":{"line":156,"column":8},"end":{"line":156,"column":37}},"23":{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},"24":{"start":{"line":161,"column":12},"end":{"line":161,"column":37}},"25":{"start":{"line":162,"column":22},"end":{"line":162,"column":44}},"26":{"start":{"line":163,"column":12},"end":{"line":163,"column":37}},"27":{"start":{"line":172,"column":8},"end":{"line":172,"column":52}},"28":{"start":{"line":178,"column":8},"end":{"line":178,"column":44}},"29":{"start":{"line":179,"column":8},"end":{"line":179,"column":60}},"30":{"start":{"line":180,"column":8},"end":{"line":180,"column":25}},"31":{"start":{"line":181,"column":8},"end":{"line":181,"column":37}},"32":{"start":{"line":182,"column":8},"end":{"line":182,"column":35}},"33":{"start":{"line":183,"column":8},"end":{"line":183,"column":33}},"34":{"start":{"line":184,"column":8},"end":{"line":184,"column":55}},"35":{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},"36":{"start":{"line":190,"column":12},"end":{"line":190,"column":42}},"37":{"start":{"line":191,"column":12},"end":{"line":191,"column":37}},"38":{"start":{"line":192,"column":22},"end":{"line":192,"column":44}},"39":{"start":{"line":193,"column":12},"end":{"line":193,"column":37}},"40":{"start":{"line":202,"column":8},"end":{"line":202,"column":32}},"41":{"start":{"line":203,"column":8},"end":{"line":203,"column":52}},"42":{"start":{"line":207,"column":8},"end":{"line":207,"column":32}},"43":{"start":{"line":208,"column":8},"end":{"line":208,"column":72}},"44":{"start":{"line":208,"column":29},"end":{"line":208,"column":71}},"45":{"start":{"line":215,"column":8},"end":{"line":215,"column":52}},"46":{"start":{"line":216,"column":8},"end":{"line":216,"column":59}},"47":{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},"48":{"start":{"line":221,"column":12},"end":{"line":221,"column":38}},"49":{"start":{"line":222,"column":12},"end":{"line":222,"column":43}},"50":{"start":{"line":223,"column":12},"end":{"line":223,"column":36}},"51":{"start":{"line":231,"column":8},"end":{"line":231,"column":51}},"52":{"start":{"line":232,"column":8},"end":{"line":232,"column":58}},"53":{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},"54":{"start":{"line":237,"column":12},"end":{"line":237,"column":36}},"55":{"start":{"line":246,"column":8},"end":{"line":246,"column":46}},"56":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"57":{"start":{"line":251,"column":30},"end":{"line":251,"column":54}},"58":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"59":{"start":{"line":253,"column":16},"end":{"line":253,"column":35}},"60":{"start":{"line":255,"column":27},"end":{"line":255,"column":70}},"61":{"start":{"line":256,"column":12},"end":{"line":256,"column":39}},"62":{"start":{"line":257,"column":12},"end":{"line":257,"column":36}},"63":{"start":{"line":258,"column":12},"end":{"line":258,"column":32}},"64":{"start":{"line":266,"column":8},"end":{"line":266,"column":52}},"65":{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},"66":{"start":{"line":271,"column":30},"end":{"line":271,"column":54}},"67":{"start":{"line":272,"column":27},"end":{"line":272,"column":70}},"68":{"start":{"line":273,"column":12},"end":{"line":273,"column":39}},"69":{"start":{"line":274,"column":12},"end":{"line":274,"column":36}},"70":{"start":{"line":275,"column":12},"end":{"line":275,"column":32}},"71":{"start":{"line":282,"column":8},"end":{"line":282,"column":58}},"72":{"start":{"line":283,"column":8},"end":{"line":283,"column":28}},"73":{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},"74":{"start":{"line":294,"column":28},"end":{"line":294,"column":54}},"75":{"start":{"line":296,"column":27},"end":{"line":296,"column":68}},"76":{"start":{"line":298,"column":29},"end":{"line":298,"column":81}},"77":{"start":{"line":299,"column":12},"end":{"line":299,"column":41}},"78":{"start":{"line":300,"column":12},"end":{"line":300,"column":40}},"79":{"start":{"line":302,"column":27},"end":{"line":302,"column":43}},"80":{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},"81":{"start":{"line":304,"column":34},"end":{"line":304,"column":58}},"82":{"start":{"line":305,"column":31},"end":{"line":305,"column":73}},"83":{"start":{"line":306,"column":16},"end":{"line":306,"column":42}},"84":{"start":{"line":308,"column":12},"end":{"line":309,"column":36}},"85":{"start":{"line":311,"column":12},"end":{"line":311,"column":39}},"86":{"start":{"line":312,"column":12},"end":{"line":312,"column":36}},"87":{"start":{"line":314,"column":12},"end":{"line":314,"column":61}},"88":{"start":{"line":316,"column":8},"end":{"line":316,"column":18}},"89":{"start":{"line":321,"column":31},"end":{"line":323,"column":10}},"90":{"start":{"line":322,"column":12},"end":{"line":322,"column":37}},"91":{"start":{"line":324,"column":25},"end":{"line":324,"column":63}},"92":{"start":{"line":325,"column":25},"end":{"line":334,"column":9}},"93":{"start":{"line":326,"column":36},"end":{"line":326,"column":47}},"94":{"start":{"line":327,"column":12},"end":{"line":327,"column":51}},"95":{"start":{"line":328,"column":12},"end":{"line":328,"column":63}},"96":{"start":{"line":329,"column":12},"end":{"line":329,"column":70}},"97":{"start":{"line":330,"column":12},"end":{"line":330,"column":46}},"98":{"start":{"line":331,"column":12},"end":{"line":331,"column":41}},"99":{"start":{"line":332,"column":12},"end":{"line":332,"column":42}},"100":{"start":{"line":333,"column":12},"end":{"line":333,"column":32}},"101":{"start":{"line":335,"column":8},"end":{"line":335,"column":33}},"102":{"start":{"line":336,"column":8},"end":{"line":340,"column":11}},"103":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"104":{"start":{"line":338,"column":16},"end":{"line":338,"column":29}},"105":{"start":{"line":341,"column":8},"end":{"line":341,"column":22}},"106":{"start":{"line":342,"column":8},"end":{"line":342,"column":74}},"107":{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},"108":{"start":{"line":344,"column":36},"end":{"line":344,"column":81}},"109":{"start":{"line":345,"column":12},"end":{"line":345,"column":41}},"110":{"start":{"line":346,"column":12},"end":{"line":346,"column":63}},"111":{"start":{"line":347,"column":12},"end":{"line":352,"column":15}},"112":{"start":{"line":348,"column":16},"end":{"line":348,"column":45}},"113":{"start":{"line":349,"column":16},"end":{"line":349,"column":46}},"114":{"start":{"line":350,"column":16},"end":{"line":350,"column":36}},"115":{"start":{"line":351,"column":16},"end":{"line":351,"column":43}},"116":{"start":{"line":354,"column":8},"end":{"line":354,"column":32}},"117":{"start":{"line":360,"column":8},"end":{"line":360,"column":33}},"118":{"start":{"line":366,"column":8},"end":{"line":366,"column":48}},"119":{"start":{"line":367,"column":8},"end":{"line":367,"column":45}},"120":{"start":{"line":368,"column":8},"end":{"line":371,"column":11}},"121":{"start":{"line":369,"column":12},"end":{"line":369,"column":50}},"122":{"start":{"line":370,"column":12},"end":{"line":370,"column":26}},"123":{"start":{"line":375,"column":8},"end":{"line":375,"column":32}},"124":{"start":{"line":390,"column":8},"end":{"line":390,"column":25}},"125":{"start":{"line":391,"column":8},"end":{"line":391,"column":23}},"126":{"start":{"line":392,"column":8},"end":{"line":392,"column":55}},"127":{"start":{"line":394,"column":8},"end":{"line":394,"column":33}},"128":{"start":{"line":395,"column":8},"end":{"line":395,"column":34}},"129":{"start":{"line":396,"column":8},"end":{"line":396,"column":55}},"130":{"start":{"line":397,"column":8},"end":{"line":397,"column":75}},"131":{"start":{"line":399,"column":8},"end":{"line":399,"column":55}},"132":{"start":{"line":401,"column":8},"end":{"line":401,"column":27}},"133":{"start":{"line":402,"column":8},"end":{"line":402,"column":21}},"134":{"start":{"line":412,"column":8},"end":{"line":412,"column":32}},"135":{"start":{"line":414,"column":8},"end":{"line":414,"column":31}},"136":{"start":{"line":415,"column":8},"end":{"line":415,"column":31}},"137":{"start":{"line":416,"column":8},"end":{"line":416,"column":32}},"138":{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},"139":{"start":{"line":419,"column":12},"end":{"line":419,"column":56}},"140":{"start":{"line":420,"column":12},"end":{"line":420,"column":84}},"141":{"start":{"line":423,"column":8},"end":{"line":423,"column":31}},"142":{"start":{"line":424,"column":8},"end":{"line":429,"column":10}},"143":{"start":{"line":431,"column":8},"end":{"line":431,"column":31}},"144":{"start":{"line":432,"column":8},"end":{"line":432,"column":32}},"145":{"start":{"line":436,"column":8},"end":{"line":436,"column":20}},"146":{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},"147":{"start":{"line":441,"column":12},"end":{"line":441,"column":63}},"148":{"start":{"line":442,"column":12},"end":{"line":442,"column":52}},"149":{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},"150":{"start":{"line":445,"column":46},"end":{"line":445,"column":69}},"151":{"start":{"line":446,"column":16},"end":{"line":446,"column":64}},"152":{"start":{"line":447,"column":16},"end":{"line":447,"column":88}},"153":{"start":{"line":448,"column":16},"end":{"line":448,"column":70}},"154":{"start":{"line":451,"column":8},"end":{"line":451,"column":39}},"155":{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},"156":{"start":{"line":458,"column":12},"end":{"line":458,"column":49}},"157":{"start":{"line":459,"column":12},"end":{"line":459,"column":84}},"158":{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},"159":{"start":{"line":463,"column":12},"end":{"line":463,"column":52}},"160":{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},"161":{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},"162":{"start":{"line":470,"column":29},"end":{"line":470,"column":74}},"163":{"start":{"line":471,"column":30},"end":{"line":471,"column":59}},"164":{"start":{"line":472,"column":16},"end":{"line":472,"column":80}},"165":{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},"166":{"start":{"line":474,"column":29},"end":{"line":474,"column":51}},"167":{"start":{"line":475,"column":30},"end":{"line":475,"column":59}},"168":{"start":{"line":476,"column":16},"end":{"line":476,"column":80}},"169":{"start":{"line":485,"column":8},"end":{"line":485,"column":20}},"170":{"start":{"line":489,"column":8},"end":{"line":489,"column":72}},"171":{"start":{"line":493,"column":8},"end":{"line":493,"column":74}},"172":{"start":{"line":497,"column":8},"end":{"line":497,"column":53}},"173":{"start":{"line":508,"column":8},"end":{"line":514,"column":11}},"174":{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},"175":{"start":{"line":510,"column":16},"end":{"line":510,"column":31}},"176":{"start":{"line":512,"column":16},"end":{"line":512,"column":31}},"177":{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},"178":{"start":{"line":525,"column":12},"end":{"line":525,"column":19}},"179":{"start":{"line":527,"column":20},"end":{"line":527,"column":25}},"180":{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},"181":{"start":{"line":529,"column":12},"end":{"line":529,"column":25}},"182":{"start":{"line":531,"column":25},"end":{"line":531,"column":45}},"183":{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},"184":{"start":{"line":533,"column":12},"end":{"line":533,"column":98}},"185":{"start":{"line":535,"column":12},"end":{"line":535,"column":54}},"186":{"start":{"line":537,"column":8},"end":{"line":541,"column":9}},"187":{"start":{"line":537,"column":19},"end":{"line":537,"column":20}},"188":{"start":{"line":538,"column":12},"end":{"line":538,"column":46}},"189":{"start":{"line":539,"column":12},"end":{"line":539,"column":52}},"190":{"start":{"line":540,"column":12},"end":{"line":540,"column":98}},"191":{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},"192":{"start":{"line":543,"column":12},"end":{"line":543,"column":46}},"193":{"start":{"line":544,"column":12},"end":{"line":544,"column":52}},"194":{"start":{"line":545,"column":12},"end":{"line":545,"column":35}},"195":{"start":{"line":551,"column":8},"end":{"line":551,"column":64}},"196":{"start":{"line":552,"column":8},"end":{"line":552,"column":48}},"197":{"start":{"line":553,"column":8},"end":{"line":553,"column":31}},"198":{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},"199":{"start":{"line":558,"column":12},"end":{"line":558,"column":92}},"200":{"start":{"line":559,"column":12},"end":{"line":559,"column":52}},"201":{"start":{"line":561,"column":8},"end":{"line":561,"column":31}},"202":{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},"203":{"start":{"line":566,"column":12},"end":{"line":566,"column":83}},"204":{"start":{"line":567,"column":12},"end":{"line":567,"column":53}},"205":{"start":{"line":569,"column":8},"end":{"line":569,"column":32}},"206":{"start":{"line":573,"column":8},"end":{"line":573,"column":45}},"207":{"start":{"line":574,"column":8},"end":{"line":574,"column":76}},"208":{"start":{"line":575,"column":8},"end":{"line":575,"column":49}},"209":{"start":{"line":576,"column":8},"end":{"line":576,"column":32}},"210":{"start":{"line":580,"column":27},"end":{"line":580,"column":65}},"211":{"start":{"line":581,"column":8},"end":{"line":581,"column":45}},"212":{"start":{"line":582,"column":8},"end":{"line":582,"column":28}},"213":{"start":{"line":591,"column":8},"end":{"line":591,"column":74}},"214":{"start":{"line":592,"column":8},"end":{"line":592,"column":56}},"215":{"start":{"line":597,"column":8},"end":{"line":597,"column":62}},"216":{"start":{"line":598,"column":8},"end":{"line":598,"column":56}},"217":{"start":{"line":602,"column":30},"end":{"line":602,"column":69}},"218":{"start":{"line":603,"column":8},"end":{"line":603,"column":55}},"219":{"start":{"line":611,"column":8},"end":{"line":613,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":37},"end":{"line":114,"column":5}},"line":65},"1":{"name":"(anonymous_1)","decl":{"start":{"line":120,"column":4},"end":{"line":120,"column":5}},"loc":{"start":{"line":120,"column":15},"end":{"line":122,"column":5}},"line":120},"2":{"name":"(anonymous_2)","decl":{"start":{"line":127,"column":4},"end":{"line":127,"column":5}},"loc":{"start":{"line":127,"column":13},"end":{"line":129,"column":5}},"line":127},"3":{"name":"(anonymous_3)","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":5}},"loc":{"start":{"line":134,"column":22},"end":{"line":137,"column":5}},"line":134},"4":{"name":"(anonymous_4)","decl":{"start":{"line":139,"column":4},"end":{"line":139,"column":5}},"loc":{"start":{"line":139,"column":18},"end":{"line":148,"column":5}},"line":139},"5":{"name":"(anonymous_5)","decl":{"start":{"line":152,"column":4},"end":{"line":152,"column":5}},"loc":{"start":{"line":152,"column":40},"end":{"line":157,"column":5}},"line":152},"6":{"name":"(anonymous_6)","decl":{"start":{"line":159,"column":4},"end":{"line":159,"column":5}},"loc":{"start":{"line":159,"column":18},"end":{"line":165,"column":5}},"line":159},"7":{"name":"(anonymous_7)","decl":{"start":{"line":167,"column":4},"end":{"line":167,"column":5}},"loc":{"start":{"line":167,"column":14},"end":{"line":169,"column":5}},"line":167},"8":{"name":"(anonymous_8)","decl":{"start":{"line":171,"column":4},"end":{"line":171,"column":5}},"loc":{"start":{"line":171,"column":11},"end":{"line":173,"column":5}},"line":171},"9":{"name":"(anonymous_9)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":51},"end":{"line":186,"column":5}},"line":177},"10":{"name":"(anonymous_10)","decl":{"start":{"line":188,"column":4},"end":{"line":188,"column":5}},"loc":{"start":{"line":188,"column":18},"end":{"line":195,"column":5}},"line":188},"11":{"name":"(anonymous_11)","decl":{"start":{"line":197,"column":4},"end":{"line":197,"column":5}},"loc":{"start":{"line":197,"column":14},"end":{"line":199,"column":5}},"line":197},"12":{"name":"(anonymous_12)","decl":{"start":{"line":201,"column":4},"end":{"line":201,"column":5}},"loc":{"start":{"line":201,"column":11},"end":{"line":204,"column":5}},"line":201},"13":{"name":"(anonymous_13)","decl":{"start":{"line":202,"column":23},"end":{"line":202,"column":24}},"loc":{"start":{"line":202,"column":29},"end":{"line":202,"column":31}},"line":202},"14":{"name":"(anonymous_14)","decl":{"start":{"line":206,"column":4},"end":{"line":206,"column":5}},"loc":{"start":{"line":206,"column":41},"end":{"line":209,"column":5}},"line":206},"15":{"name":"(anonymous_15)","decl":{"start":{"line":208,"column":23},"end":{"line":208,"column":24}},"loc":{"start":{"line":208,"column":29},"end":{"line":208,"column":71}},"line":208},"16":{"name":"(anonymous_16)","decl":{"start":{"line":214,"column":4},"end":{"line":214,"column":5}},"loc":{"start":{"line":214,"column":31},"end":{"line":217,"column":5}},"line":214},"17":{"name":"(anonymous_17)","decl":{"start":{"line":219,"column":4},"end":{"line":219,"column":5}},"loc":{"start":{"line":219,"column":18},"end":{"line":226,"column":5}},"line":219},"18":{"name":"(anonymous_18)","decl":{"start":{"line":230,"column":4},"end":{"line":230,"column":5}},"loc":{"start":{"line":230,"column":31},"end":{"line":233,"column":5}},"line":230},"19":{"name":"(anonymous_19)","decl":{"start":{"line":235,"column":4},"end":{"line":235,"column":5}},"loc":{"start":{"line":235,"column":18},"end":{"line":240,"column":5}},"line":235},"20":{"name":"(anonymous_20)","decl":{"start":{"line":245,"column":4},"end":{"line":245,"column":5}},"loc":{"start":{"line":245,"column":24},"end":{"line":247,"column":5}},"line":245},"21":{"name":"(anonymous_21)","decl":{"start":{"line":249,"column":4},"end":{"line":249,"column":5}},"loc":{"start":{"line":249,"column":18},"end":{"line":260,"column":5}},"line":249},"22":{"name":"(anonymous_22)","decl":{"start":{"line":265,"column":4},"end":{"line":265,"column":5}},"loc":{"start":{"line":265,"column":31},"end":{"line":267,"column":5}},"line":265},"23":{"name":"(anonymous_23)","decl":{"start":{"line":269,"column":4},"end":{"line":269,"column":5}},"loc":{"start":{"line":269,"column":18},"end":{"line":277,"column":5}},"line":269},"24":{"name":"(anonymous_24)","decl":{"start":{"line":281,"column":4},"end":{"line":281,"column":5}},"loc":{"start":{"line":281,"column":37},"end":{"line":284,"column":5}},"line":281},"25":{"name":"(anonymous_25)","decl":{"start":{"line":290,"column":4},"end":{"line":290,"column":5}},"loc":{"start":{"line":290,"column":18},"end":{"line":317,"column":5}},"line":290},"26":{"name":"(anonymous_26)","decl":{"start":{"line":319,"column":4},"end":{"line":319,"column":5}},"loc":{"start":{"line":319,"column":35},"end":{"line":355,"column":5}},"line":319},"27":{"name":"(anonymous_27)","decl":{"start":{"line":321,"column":43},"end":{"line":321,"column":44}},"loc":{"start":{"line":321,"column":56},"end":{"line":323,"column":9}},"line":321},"28":{"name":"(anonymous_28)","decl":{"start":{"line":325,"column":25},"end":{"line":325,"column":26}},"loc":{"start":{"line":325,"column":31},"end":{"line":334,"column":9}},"line":325},"29":{"name":"(anonymous_29)","decl":{"start":{"line":336,"column":20},"end":{"line":336,"column":21}},"loc":{"start":{"line":336,"column":27},"end":{"line":340,"column":9}},"line":336},"30":{"name":"(anonymous_30)","decl":{"start":{"line":347,"column":31},"end":{"line":347,"column":32}},"loc":{"start":{"line":347,"column":44},"end":{"line":352,"column":13}},"line":347},"31":{"name":"(anonymous_31)","decl":{"start":{"line":359,"column":4},"end":{"line":359,"column":5}},"loc":{"start":{"line":359,"column":22},"end":{"line":361,"column":5}},"line":359},"32":{"name":"(anonymous_32)","decl":{"start":{"line":365,"column":4},"end":{"line":365,"column":5}},"loc":{"start":{"line":365,"column":22},"end":{"line":372,"column":5}},"line":365},"33":{"name":"(anonymous_33)","decl":{"start":{"line":368,"column":24},"end":{"line":368,"column":25}},"loc":{"start":{"line":368,"column":30},"end":{"line":371,"column":9}},"line":368},"34":{"name":"(anonymous_34)","decl":{"start":{"line":374,"column":4},"end":{"line":374,"column":5}},"loc":{"start":{"line":374,"column":18},"end":{"line":376,"column":5}},"line":374},"35":{"name":"(anonymous_35)","decl":{"start":{"line":389,"column":4},"end":{"line":389,"column":5}},"loc":{"start":{"line":389,"column":28},"end":{"line":405,"column":5}},"line":389},"36":{"name":"(anonymous_36)","decl":{"start":{"line":411,"column":4},"end":{"line":411,"column":5}},"loc":{"start":{"line":411,"column":12},"end":{"line":433,"column":5}},"line":411},"37":{"name":"(anonymous_37)","decl":{"start":{"line":435,"column":4},"end":{"line":435,"column":5}},"loc":{"start":{"line":435,"column":20},"end":{"line":437,"column":5}},"line":435},"38":{"name":"(anonymous_38)","decl":{"start":{"line":439,"column":4},"end":{"line":439,"column":5}},"loc":{"start":{"line":439,"column":20},"end":{"line":452,"column":5}},"line":439},"39":{"name":"(anonymous_39)","decl":{"start":{"line":454,"column":4},"end":{"line":454,"column":5}},"loc":{"start":{"line":454,"column":44},"end":{"line":465,"column":5}},"line":454},"40":{"name":"(anonymous_40)","decl":{"start":{"line":467,"column":4},"end":{"line":467,"column":5}},"loc":{"start":{"line":467,"column":20},"end":{"line":481,"column":5}},"line":467},"41":{"name":"(anonymous_41)","decl":{"start":{"line":484,"column":4},"end":{"line":484,"column":5}},"loc":{"start":{"line":484,"column":16},"end":{"line":486,"column":5}},"line":484},"42":{"name":"(anonymous_42)","decl":{"start":{"line":488,"column":4},"end":{"line":488,"column":5}},"loc":{"start":{"line":488,"column":15},"end":{"line":490,"column":5}},"line":488},"43":{"name":"(anonymous_43)","decl":{"start":{"line":492,"column":4},"end":{"line":492,"column":5}},"loc":{"start":{"line":492,"column":16},"end":{"line":494,"column":5}},"line":492},"44":{"name":"(anonymous_44)","decl":{"start":{"line":496,"column":4},"end":{"line":496,"column":5}},"loc":{"start":{"line":496,"column":14},"end":{"line":498,"column":5}},"line":496},"45":{"name":"(anonymous_45)","decl":{"start":{"line":507,"column":4},"end":{"line":507,"column":5}},"loc":{"start":{"line":507,"column":28},"end":{"line":515,"column":5}},"line":507},"46":{"name":"(anonymous_46)","decl":{"start":{"line":508,"column":61},"end":{"line":508,"column":62}},"loc":{"start":{"line":508,"column":72},"end":{"line":514,"column":9}},"line":508},"47":{"name":"(anonymous_47)","decl":{"start":{"line":521,"column":4},"end":{"line":521,"column":5}},"loc":{"start":{"line":521,"column":20},"end":{"line":547,"column":5}},"line":521},"48":{"name":"(anonymous_48)","decl":{"start":{"line":550,"column":4},"end":{"line":550,"column":5}},"loc":{"start":{"line":550,"column":16},"end":{"line":554,"column":5}},"line":550},"49":{"name":"(anonymous_49)","decl":{"start":{"line":556,"column":4},"end":{"line":556,"column":5}},"loc":{"start":{"line":556,"column":40},"end":{"line":562,"column":5}},"line":556},"50":{"name":"(anonymous_50)","decl":{"start":{"line":564,"column":4},"end":{"line":564,"column":5}},"loc":{"start":{"line":564,"column":30},"end":{"line":570,"column":5}},"line":564},"51":{"name":"(anonymous_51)","decl":{"start":{"line":572,"column":4},"end":{"line":572,"column":5}},"loc":{"start":{"line":572,"column":29},"end":{"line":577,"column":5}},"line":572},"52":{"name":"(anonymous_52)","decl":{"start":{"line":579,"column":4},"end":{"line":579,"column":5}},"loc":{"start":{"line":579,"column":22},"end":{"line":583,"column":5}},"line":579},"53":{"name":"(anonymous_53)","decl":{"start":{"line":590,"column":4},"end":{"line":590,"column":5}},"loc":{"start":{"line":590,"column":25},"end":{"line":593,"column":5}},"line":590},"54":{"name":"(anonymous_54)","decl":{"start":{"line":596,"column":4},"end":{"line":596,"column":5}},"loc":{"start":{"line":596,"column":15},"end":{"line":599,"column":5}},"line":596},"55":{"name":"(anonymous_55)","decl":{"start":{"line":601,"column":4},"end":{"line":601,"column":5}},"loc":{"start":{"line":601,"column":16},"end":{"line":604,"column":5}},"line":601},"56":{"name":"(anonymous_56)","decl":{"start":{"line":610,"column":4},"end":{"line":610,"column":5}},"loc":{"start":{"line":610,"column":21},"end":{"line":614,"column":5}},"line":610}},"branchMap":{"0":{"loc":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},{"start":{},"end":{}}],"line":140},"1":{"loc":{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},"type":"if","locations":[{"start":{"line":160,"column":8},"end":{"line":164,"column":9}},{"start":{},"end":{}}],"line":160},"2":{"loc":{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},"type":"if","locations":[{"start":{"line":189,"column":8},"end":{"line":194,"column":9}},{"start":{},"end":{}}],"line":189},"3":{"loc":{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},"type":"if","locations":[{"start":{"line":220,"column":8},"end":{"line":225,"column":9}},{"start":{},"end":{}}],"line":220},"4":{"loc":{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},"type":"if","locations":[{"start":{"line":236,"column":8},"end":{"line":239,"column":9}},{"start":{},"end":{}}],"line":236},"5":{"loc":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":250},"6":{"loc":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"type":"if","locations":[{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},{"start":{},"end":{}}],"line":252},"7":{"loc":{"start":{"line":252,"column":16},"end":{"line":252,"column":62}},"type":"binary-expr","locations":[{"start":{"line":252,"column":16},"end":{"line":252,"column":28}},{"start":{"line":252,"column":32},"end":{"line":252,"column":62}}],"line":252},"8":{"loc":{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},"type":"if","locations":[{"start":{"line":270,"column":8},"end":{"line":276,"column":9}},{"start":{},"end":{}}],"line":270},"9":{"loc":{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},"type":"if","locations":[{"start":{"line":292,"column":8},"end":{"line":315,"column":9}},{"start":{},"end":{}}],"line":292},"10":{"loc":{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},"type":"if","locations":[{"start":{"line":303,"column":12},"end":{"line":307,"column":13}},{"start":{},"end":{}}],"line":303},"11":{"loc":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"type":"if","locations":[{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},{"start":{},"end":{}}],"line":337},"12":{"loc":{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},"type":"if","locations":[{"start":{"line":343,"column":8},"end":{"line":353,"column":9}},{"start":{},"end":{}}],"line":343},"13":{"loc":{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},"type":"if","locations":[{"start":{"line":418,"column":8},"end":{"line":421,"column":9}},{"start":{},"end":{}}],"line":418},"14":{"loc":{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},"type":"if","locations":[{"start":{"line":440,"column":8},"end":{"line":450,"column":9}},{"start":{},"end":{}}],"line":440},"15":{"loc":{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},"type":"if","locations":[{"start":{"line":444,"column":12},"end":{"line":449,"column":13}},{"start":{},"end":{}}],"line":444},"16":{"loc":{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},"type":"if","locations":[{"start":{"line":456,"column":8},"end":{"line":460,"column":9}},{"start":{},"end":{}}],"line":456},"17":{"loc":{"start":{"line":456,"column":12},"end":{"line":457,"column":43}},"type":"binary-expr","locations":[{"start":{"line":456,"column":12},"end":{"line":456,"column":88}},{"start":{"line":457,"column":12},"end":{"line":457,"column":43}}],"line":456},"18":{"loc":{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},"type":"if","locations":[{"start":{"line":462,"column":8},"end":{"line":464,"column":9}},{"start":{},"end":{}}],"line":462},"19":{"loc":{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},"type":"if","locations":[{"start":{"line":468,"column":8},"end":{"line":480,"column":9}},{"start":{},"end":{}}],"line":468},"20":{"loc":{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},"type":"if","locations":[{"start":{"line":469,"column":12},"end":{"line":479,"column":13}},{"start":{"line":473,"column":19},"end":{"line":479,"column":13}}],"line":469},"21":{"loc":{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},"type":"if","locations":[{"start":{"line":473,"column":19},"end":{"line":479,"column":13}},{"start":{"line":477,"column":19},"end":{"line":479,"column":13}}],"line":473},"22":{"loc":{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},"type":"if","locations":[{"start":{"line":509,"column":12},"end":{"line":513,"column":13}},{"start":{"line":511,"column":19},"end":{"line":513,"column":13}}],"line":509},"23":{"loc":{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},"type":"if","locations":[{"start":{"line":524,"column":8},"end":{"line":526,"column":9}},{"start":{},"end":{}}],"line":524},"24":{"loc":{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},"type":"if","locations":[{"start":{"line":528,"column":8},"end":{"line":530,"column":9}},{"start":{},"end":{}}],"line":528},"25":{"loc":{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},"type":"if","locations":[{"start":{"line":532,"column":8},"end":{"line":536,"column":9}},{"start":{"line":534,"column":15},"end":{"line":536,"column":9}}],"line":532},"26":{"loc":{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},"type":"if","locations":[{"start":{"line":542,"column":8},"end":{"line":546,"column":9}},{"start":{},"end":{}}],"line":542},"27":{"loc":{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},"type":"if","locations":[{"start":{"line":557,"column":8},"end":{"line":560,"column":9}},{"start":{},"end":{}}],"line":557},"28":{"loc":{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},"type":"if","locations":[{"start":{"line":565,"column":8},"end":{"line":568,"column":9}},{"start":{},"end":{}}],"line":565}},"s":{"0":4,"1":4,"2":4,"3":4,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e37d3925631906eaa7678c52e3d5c658ab7e81d5"} -,"/home/runner/work/blockpy/blockpy/src/corgis.js": {"path":"/home/runner/work/blockpy/blockpy/src/corgis.js","statementMap":{"0":{"start":{"line":5,"column":32},"end":{"line":5,"column":34}},"1":{"start":{"line":6,"column":41},"end":{"line":6,"column":43}},"2":{"start":{"line":14,"column":22},"end":{"line":21,"column":1}},"3":{"start":{"line":15,"column":4},"end":{"line":20,"column":38}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":21}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":24}},"7":{"start":{"line":40,"column":0},"end":{"line":63,"column":2}},"8":{"start":{"line":42,"column":16},"end":{"line":42,"column":31}},"9":{"start":{"line":43,"column":17},"end":{"line":43,"column":50}},"10":{"start":{"line":44,"column":17},"end":{"line":44,"column":44}},"11":{"start":{"line":45,"column":18},"end":{"line":45,"column":20}},"12":{"start":{"line":46,"column":4},"end":{"line":50,"column":7}},"13":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"14":{"start":{"line":48,"column":12},"end":{"line":48,"column":88}},"15":{"start":{"line":53,"column":4},"end":{"line":62,"column":7}},"16":{"start":{"line":55,"column":8},"end":{"line":55,"column":38}},"17":{"start":{"line":56,"column":8},"end":{"line":56,"column":46}},"18":{"start":{"line":58,"column":8},"end":{"line":58,"column":31}},"19":{"start":{"line":59,"column":8},"end":{"line":59,"column":25}},"20":{"start":{"line":61,"column":8},"end":{"line":61,"column":39}},"21":{"start":{"line":77,"column":0},"end":{"line":101,"column":2}},"22":{"start":{"line":78,"column":25},"end":{"line":78,"column":27}},"23":{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},"24":{"start":{"line":80,"column":19},"end":{"line":80,"column":101}},"25":{"start":{"line":81,"column":8},"end":{"line":81,"column":59}},"26":{"start":{"line":83,"column":25},"end":{"line":83,"column":58}},"27":{"start":{"line":85,"column":26},"end":{"line":85,"column":60}},"28":{"start":{"line":86,"column":24},"end":{"line":88,"column":10}},"29":{"start":{"line":87,"column":12},"end":{"line":87,"column":80}},"30":{"start":{"line":89,"column":25},"end":{"line":89,"column":58}},"31":{"start":{"line":91,"column":8},"end":{"line":97,"column":11}},"32":{"start":{"line":92,"column":12},"end":{"line":92,"column":43}},"33":{"start":{"line":93,"column":12},"end":{"line":93,"column":87}},"34":{"start":{"line":94,"column":12},"end":{"line":94,"column":69}},"35":{"start":{"line":95,"column":12},"end":{"line":95,"column":77}},"36":{"start":{"line":96,"column":12},"end":{"line":96,"column":65}},"37":{"start":{"line":98,"column":8},"end":{"line":98,"column":63}},"38":{"start":{"line":100,"column":4},"end":{"line":100,"column":26}},"39":{"start":{"line":110,"column":0},"end":{"line":145,"column":2}},"40":{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},"41":{"start":{"line":112,"column":19},"end":{"line":112,"column":68}},"42":{"start":{"line":113,"column":8},"end":{"line":143,"column":11}},"43":{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},"44":{"start":{"line":116,"column":32},"end":{"line":116,"column":57}},"45":{"start":{"line":117,"column":24},"end":{"line":117,"column":114}},"46":{"start":{"line":118,"column":23},"end":{"line":118,"column":101}},"47":{"start":{"line":119,"column":12},"end":{"line":139,"column":15}},"48":{"start":{"line":120,"column":34},"end":{"line":120,"column":59}},"49":{"start":{"line":121,"column":32},"end":{"line":121,"column":36}},"50":{"start":{"line":122,"column":26},"end":{"line":122,"column":151}},"51":{"start":{"line":123,"column":29},"end":{"line":123,"column":72}},"52":{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},"53":{"start":{"line":125,"column":20},"end":{"line":125,"column":41}},"54":{"start":{"line":127,"column":20},"end":{"line":130,"column":23}},"55":{"start":{"line":128,"column":24},"end":{"line":128,"column":90}},"56":{"start":{"line":129,"column":24},"end":{"line":129,"column":45}},"57":{"start":{"line":133,"column":16},"end":{"line":138,"column":36}},"58":{"start":{"line":140,"column":12},"end":{"line":140,"column":33}},"59":{"start":{"line":142,"column":12},"end":{"line":142,"column":77}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":22},"end":{"line":14,"column":23}},"loc":{"start":{"line":14,"column":37},"end":{"line":21,"column":1}},"line":14},"1":{"name":"BlockPyCorgis","decl":{"start":{"line":33,"column":16},"end":{"line":33,"column":29}},"loc":{"start":{"line":33,"column":36},"end":{"line":38,"column":1}},"line":33},"2":{"name":"(anonymous_2)","decl":{"start":{"line":40,"column":39},"end":{"line":40,"column":40}},"loc":{"start":{"line":40,"column":59},"end":{"line":63,"column":1}},"line":40},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":60},"end":{"line":46,"column":61}},"loc":{"start":{"line":46,"column":70},"end":{"line":50,"column":5}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":34},"end":{"line":53,"column":35}},"loc":{"start":{"line":53,"column":46},"end":{"line":57,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":57,"column":12},"end":{"line":57,"column":13}},"loc":{"start":{"line":57,"column":25},"end":{"line":60,"column":5}},"line":57},"6":{"name":"(anonymous_6)","decl":{"start":{"line":60,"column":14},"end":{"line":60,"column":15}},"loc":{"start":{"line":60,"column":26},"end":{"line":62,"column":5}},"line":60},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":40},"end":{"line":77,"column":41}},"loc":{"start":{"line":77,"column":62},"end":{"line":101,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":86,"column":51},"end":{"line":86,"column":52}},"loc":{"start":{"line":86,"column":67},"end":{"line":88,"column":9}},"line":86},"9":{"name":"(anonymous_9)","decl":{"start":{"line":91,"column":55},"end":{"line":91,"column":56}},"loc":{"start":{"line":91,"column":61},"end":{"line":97,"column":9}},"line":91},"10":{"name":"(anonymous_10)","decl":{"start":{"line":110,"column":37},"end":{"line":110,"column":38}},"loc":{"start":{"line":110,"column":49},"end":{"line":145,"column":1}},"line":110},"11":{"name":"(anonymous_11)","decl":{"start":{"line":113,"column":40},"end":{"line":113,"column":41}},"loc":{"start":{"line":113,"column":50},"end":{"line":143,"column":9}},"line":113},"12":{"name":"(anonymous_12)","decl":{"start":{"line":119,"column":45},"end":{"line":119,"column":46}},"loc":{"start":{"line":119,"column":55},"end":{"line":139,"column":13}},"line":119},"13":{"name":"(anonymous_13)","decl":{"start":{"line":127,"column":31},"end":{"line":127,"column":32}},"loc":{"start":{"line":127,"column":37},"end":{"line":130,"column":21}},"line":127}},"branchMap":{"0":{"loc":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},{"start":{},"end":{}}],"line":47},"1":{"loc":{"start":{"line":47,"column":12},"end":{"line":47,"column":65}},"type":"binary-expr","locations":[{"start":{"line":47,"column":12},"end":{"line":47,"column":16}},{"start":{"line":47,"column":20},"end":{"line":47,"column":65}}],"line":47},"2":{"loc":{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},"type":"if","locations":[{"start":{"line":79,"column":4},"end":{"line":99,"column":5}},{"start":{},"end":{}}],"line":79},"3":{"loc":{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":144,"column":5}},{"start":{},"end":{}}],"line":111},"4":{"loc":{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},"type":"if","locations":[{"start":{"line":124,"column":16},"end":{"line":131,"column":17}},{"start":{"line":126,"column":23},"end":{"line":131,"column":17}}],"line":124}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":1,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"426447481e96aae108685621cb3be3c184b93d80"} -,"/home/runner/work/blockpy/blockpy/src/dialog.js": {"path":"/home/runner/work/blockpy/blockpy/src/dialog.js","statementMap":{"0":{"start":{"line":3,"column":25},"end":{"line":26,"column":1}},"1":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"2":{"start":{"line":41,"column":4},"end":{"line":41,"column":19}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":45}},"4":{"start":{"line":44,"column":4},"end":{"line":44,"column":43}},"5":{"start":{"line":45,"column":4},"end":{"line":45,"column":47}},"6":{"start":{"line":46,"column":4},"end":{"line":46,"column":46}},"7":{"start":{"line":47,"column":4},"end":{"line":47,"column":48}},"8":{"start":{"line":49,"column":4},"end":{"line":49,"column":24}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":51,"column":4},"end":{"line":54,"column":7}},"11":{"start":{"line":52,"column":8},"end":{"line":52,"column":19}},"12":{"start":{"line":53,"column":8},"end":{"line":53,"column":31}},"13":{"start":{"line":55,"column":4},"end":{"line":58,"column":7}},"14":{"start":{"line":56,"column":8},"end":{"line":56,"column":18}},"15":{"start":{"line":61,"column":0},"end":{"line":63,"column":2}},"16":{"start":{"line":62,"column":4},"end":{"line":62,"column":27}},"17":{"start":{"line":73,"column":0},"end":{"line":87,"column":2}},"18":{"start":{"line":74,"column":4},"end":{"line":74,"column":30}},"19":{"start":{"line":75,"column":4},"end":{"line":75,"column":28}},"20":{"start":{"line":76,"column":4},"end":{"line":76,"column":27}},"21":{"start":{"line":77,"column":4},"end":{"line":77,"column":27}},"22":{"start":{"line":78,"column":4},"end":{"line":80,"column":7}},"23":{"start":{"line":82,"column":4},"end":{"line":86,"column":7}},"24":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"25":{"start":{"line":84,"column":12},"end":{"line":84,"column":22}},"26":{"start":{"line":89,"column":0},"end":{"line":98,"column":2}},"27":{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},"28":{"start":{"line":91,"column":8},"end":{"line":91,"column":25}},"29":{"start":{"line":93,"column":4},"end":{"line":93,"column":31}},"30":{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},"31":{"start":{"line":95,"column":4},"end":{"line":95,"column":17}},"32":{"start":{"line":96,"column":4},"end":{"line":96,"column":41}},"33":{"start":{"line":100,"column":0},"end":{"line":102,"column":2}},"34":{"start":{"line":101,"column":4},"end":{"line":101,"column":152}},"35":{"start":{"line":104,"column":0},"end":{"line":107,"column":2}},"36":{"start":{"line":105,"column":4},"end":{"line":106,"column":94}},"37":{"start":{"line":109,"column":0},"end":{"line":112,"column":2}},"38":{"start":{"line":110,"column":4},"end":{"line":111,"column":94}},"39":{"start":{"line":114,"column":0},"end":{"line":117,"column":2}},"40":{"start":{"line":115,"column":4},"end":{"line":116,"column":74}},"41":{"start":{"line":119,"column":0},"end":{"line":122,"column":2}},"42":{"start":{"line":120,"column":4},"end":{"line":121,"column":74}},"43":{"start":{"line":124,"column":0},"end":{"line":127,"column":2}},"44":{"start":{"line":125,"column":4},"end":{"line":126,"column":74}},"45":{"start":{"line":129,"column":0},"end":{"line":132,"column":2}},"46":{"start":{"line":130,"column":4},"end":{"line":131,"column":74}},"47":{"start":{"line":134,"column":0},"end":{"line":137,"column":2}},"48":{"start":{"line":135,"column":4},"end":{"line":136,"column":94}},"49":{"start":{"line":139,"column":0},"end":{"line":141,"column":2}},"50":{"start":{"line":140,"column":4},"end":{"line":140,"column":149}},"51":{"start":{"line":143,"column":0},"end":{"line":145,"column":2}},"52":{"start":{"line":144,"column":4},"end":{"line":144,"column":30}},"53":{"start":{"line":147,"column":0},"end":{"line":149,"column":2}},"54":{"start":{"line":151,"column":0},"end":{"line":154,"column":2}},"55":{"start":{"line":152,"column":4},"end":{"line":153,"column":40}},"56":{"start":{"line":156,"column":0},"end":{"line":159,"column":2}},"57":{"start":{"line":157,"column":4},"end":{"line":158,"column":40}},"58":{"start":{"line":161,"column":0},"end":{"line":190,"column":2}},"59":{"start":{"line":162,"column":19},"end":{"line":162,"column":81}},"60":{"start":{"line":163,"column":4},"end":{"line":163,"column":96}},"61":{"start":{"line":164,"column":4},"end":{"line":189,"column":7}},"62":{"start":{"line":192,"column":0},"end":{"line":216,"column":2}},"63":{"start":{"line":193,"column":20},"end":{"line":193,"column":64}},"64":{"start":{"line":194,"column":22},"end":{"line":194,"column":76}},"65":{"start":{"line":195,"column":14},"end":{"line":200,"column":5}},"66":{"start":{"line":196,"column":22},"end":{"line":196,"column":79}},"67":{"start":{"line":197,"column":21},"end":{"line":197,"column":75}},"68":{"start":{"line":198,"column":8},"end":{"line":198,"column":54}},"69":{"start":{"line":199,"column":8},"end":{"line":199,"column":48}},"70":{"start":{"line":201,"column":4},"end":{"line":214,"column":25}},"71":{"start":{"line":218,"column":0},"end":{"line":244,"column":2}},"72":{"start":{"line":219,"column":27},"end":{"line":223,"column":100}},"73":{"start":{"line":224,"column":4},"end":{"line":236,"column":7}},"74":{"start":{"line":238,"column":4},"end":{"line":243,"column":7}},"75":{"start":{"line":240,"column":8},"end":{"line":242,"column":11}},"76":{"start":{"line":241,"column":12},"end":{"line":241,"column":70}}},"fnMap":{"0":{"name":"BlockPyDialog","decl":{"start":{"line":39,"column":16},"end":{"line":39,"column":29}},"loc":{"start":{"line":39,"column":41},"end":{"line":59,"column":1}},"line":39},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":16}},"loc":{"start":{"line":49,"column":21},"end":{"line":49,"column":23}},"line":49},"2":{"name":"(anonymous_2)","decl":{"start":{"line":50,"column":14},"end":{"line":50,"column":15}},"loc":{"start":{"line":50,"column":20},"end":{"line":50,"column":22}},"line":50},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":26},"end":{"line":51,"column":27}},"loc":{"start":{"line":51,"column":32},"end":{"line":54,"column":5}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":27},"end":{"line":55,"column":28}},"loc":{"start":{"line":55,"column":33},"end":{"line":58,"column":5}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":61,"column":32},"end":{"line":61,"column":33}},"loc":{"start":{"line":61,"column":44},"end":{"line":63,"column":1}},"line":61},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":31},"end":{"line":73,"column":32}},"loc":{"start":{"line":73,"column":63},"end":{"line":87,"column":1}},"line":73},"7":{"name":"(anonymous_7)","decl":{"start":{"line":82,"column":35},"end":{"line":82,"column":36}},"loc":{"start":{"line":82,"column":48},"end":{"line":86,"column":5}},"line":82},"8":{"name":"(anonymous_8)","decl":{"start":{"line":89,"column":34},"end":{"line":89,"column":35}},"loc":{"start":{"line":89,"column":75},"end":{"line":98,"column":1}},"line":89},"9":{"name":"(anonymous_9)","decl":{"start":{"line":100,"column":53},"end":{"line":100,"column":54}},"loc":{"start":{"line":100,"column":65},"end":{"line":102,"column":1}},"line":100},"10":{"name":"(anonymous_10)","decl":{"start":{"line":104,"column":52},"end":{"line":104,"column":53}},"loc":{"start":{"line":104,"column":70},"end":{"line":107,"column":1}},"line":104},"11":{"name":"(anonymous_11)","decl":{"start":{"line":109,"column":55},"end":{"line":109,"column":56}},"loc":{"start":{"line":109,"column":73},"end":{"line":112,"column":1}},"line":109},"12":{"name":"(anonymous_12)","decl":{"start":{"line":114,"column":47},"end":{"line":114,"column":48}},"loc":{"start":{"line":114,"column":65},"end":{"line":117,"column":1}},"line":114},"13":{"name":"(anonymous_13)","decl":{"start":{"line":119,"column":49},"end":{"line":119,"column":50}},"loc":{"start":{"line":119,"column":67},"end":{"line":122,"column":1}},"line":119},"14":{"name":"(anonymous_14)","decl":{"start":{"line":124,"column":46},"end":{"line":124,"column":47}},"loc":{"start":{"line":124,"column":64},"end":{"line":127,"column":1}},"line":124},"15":{"name":"(anonymous_15)","decl":{"start":{"line":129,"column":46},"end":{"line":129,"column":47}},"loc":{"start":{"line":129,"column":64},"end":{"line":132,"column":1}},"line":129},"16":{"name":"(anonymous_16)","decl":{"start":{"line":134,"column":51},"end":{"line":134,"column":52}},"loc":{"start":{"line":134,"column":69},"end":{"line":137,"column":1}},"line":134},"17":{"name":"(anonymous_17)","decl":{"start":{"line":139,"column":51},"end":{"line":139,"column":52}},"loc":{"start":{"line":139,"column":68},"end":{"line":141,"column":1}},"line":139},"18":{"name":"(anonymous_18)","decl":{"start":{"line":143,"column":49},"end":{"line":143,"column":50}},"loc":{"start":{"line":143,"column":75},"end":{"line":145,"column":1}},"line":143},"19":{"name":"(anonymous_19)","decl":{"start":{"line":147,"column":44},"end":{"line":147,"column":45}},"loc":{"start":{"line":147,"column":56},"end":{"line":149,"column":1}},"line":147},"20":{"name":"(anonymous_20)","decl":{"start":{"line":151,"column":59},"end":{"line":151,"column":60}},"loc":{"start":{"line":151,"column":71},"end":{"line":154,"column":1}},"line":151},"21":{"name":"(anonymous_21)","decl":{"start":{"line":156,"column":48},"end":{"line":156,"column":49}},"loc":{"start":{"line":156,"column":60},"end":{"line":159,"column":1}},"line":156},"22":{"name":"(anonymous_22)","decl":{"start":{"line":161,"column":37},"end":{"line":161,"column":38}},"loc":{"start":{"line":161,"column":49},"end":{"line":190,"column":1}},"line":161},"23":{"name":"(anonymous_23)","decl":{"start":{"line":192,"column":38},"end":{"line":192,"column":39}},"loc":{"start":{"line":192,"column":50},"end":{"line":216,"column":1}},"line":192},"24":{"name":"(anonymous_24)","decl":{"start":{"line":195,"column":14},"end":{"line":195,"column":15}},"loc":{"start":{"line":195,"column":20},"end":{"line":200,"column":5}},"line":195},"25":{"name":"(anonymous_25)","decl":{"start":{"line":218,"column":38},"end":{"line":218,"column":39}},"loc":{"start":{"line":218,"column":66},"end":{"line":244,"column":1}},"line":218},"26":{"name":"(anonymous_26)","decl":{"start":{"line":238,"column":58},"end":{"line":238,"column":59}},"loc":{"start":{"line":238,"column":64},"end":{"line":243,"column":5}},"line":238},"27":{"name":"(anonymous_27)","decl":{"start":{"line":240,"column":48},"end":{"line":240,"column":49}},"loc":{"start":{"line":240,"column":54},"end":{"line":242,"column":9}},"line":240}},"branchMap":{"0":{"loc":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},{"start":{},"end":{}}],"line":83},"1":{"loc":{"start":{"line":83,"column":12},"end":{"line":83,"column":53}},"type":"binary-expr","locations":[{"start":{"line":83,"column":12},"end":{"line":83,"column":33}},{"start":{"line":83,"column":37},"end":{"line":83,"column":53}}],"line":83},"2":{"loc":{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":92,"column":5}},{"start":{},"end":{}}],"line":90},"3":{"loc":{"start":{"line":163,"column":15},"end":{"line":163,"column":95}},"type":"cond-expr","locations":[{"start":{"line":163,"column":26},"end":{"line":163,"column":90}},{"start":{"line":163,"column":93},"end":{"line":163,"column":95}}],"line":163},"4":{"loc":{"start":{"line":194,"column":22},"end":{"line":194,"column":76}},"type":"cond-expr","locations":[{"start":{"line":194,"column":62},"end":{"line":194,"column":64}},{"start":{"line":194,"column":67},"end":{"line":194,"column":76}}],"line":194},"5":{"loc":{"start":{"line":219,"column":27},"end":{"line":223,"column":100}},"type":"cond-expr","locations":[{"start":{"line":219,"column":41},"end":{"line":223,"column":5}},{"start":{"line":223,"column":8},"end":{"line":223,"column":100}}],"line":219}},"s":{"0":5,"1":6,"2":6,"3":6,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":0,"12":0,"13":6,"14":0,"15":5,"16":0,"17":5,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":5,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":5,"34":0,"35":5,"36":0,"37":5,"38":0,"39":5,"40":0,"41":5,"42":0,"43":5,"44":0,"45":5,"46":0,"47":5,"48":0,"49":5,"50":0,"51":5,"52":0,"53":5,"54":5,"55":0,"56":5,"57":0,"58":5,"59":0,"60":0,"61":0,"62":5,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":5,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":6,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"55330ff8c89789a90d0ed04585df40e01513b922"} -,"/home/runner/work/blockpy/blockpy/src/editors.js": {"path":"/home/runner/work/blockpy/blockpy/src/editors.js","statementMap":{"0":{"start":{"line":30,"column":25},"end":{"line":40,"column":1}},"1":{"start":{"line":42,"column":27},"end":{"line":42,"column":47}},"2":{"start":{"line":44,"column":26},"end":{"line":47,"column":1}},"3":{"start":{"line":49,"column":28},"end":{"line":62,"column":12}},"4":{"start":{"line":49,"column":60},"end":{"line":56,"column":1}},"5":{"start":{"line":66,"column":8},"end":{"line":66,"column":25}},"6":{"start":{"line":67,"column":8},"end":{"line":67,"column":23}},"7":{"start":{"line":68,"column":8},"end":{"line":68,"column":28}},"8":{"start":{"line":69,"column":8},"end":{"line":69,"column":30}},"9":{"start":{"line":70,"column":8},"end":{"line":70,"column":30}},"10":{"start":{"line":71,"column":8},"end":{"line":71,"column":26}},"11":{"start":{"line":72,"column":8},"end":{"line":72,"column":73}},"12":{"start":{"line":72,"column":44},"end":{"line":72,"column":71}},"13":{"start":{"line":73,"column":8},"end":{"line":73,"column":76}},"14":{"start":{"line":77,"column":25},"end":{"line":77,"column":40}},"15":{"start":{"line":78,"column":23},"end":{"line":78,"column":64}},"16":{"start":{"line":79,"column":8},"end":{"line":79,"column":34}},"17":{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},"18":{"start":{"line":81,"column":8},"end":{"line":81,"column":57}},"19":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"20":{"start":{"line":82,"column":19},"end":{"line":82,"column":20}},"21":{"start":{"line":83,"column":12},"end":{"line":83,"column":55}},"22":{"start":{"line":88,"column":8},"end":{"line":88,"column":48}},"23":{"start":{"line":92,"column":24},"end":{"line":92,"column":36}},"24":{"start":{"line":93,"column":24},"end":{"line":93,"column":62}},"25":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"26":{"start":{"line":95,"column":12},"end":{"line":95,"column":62}},"27":{"start":{"line":97,"column":8},"end":{"line":97,"column":33}},"28":{"start":{"line":98,"column":8},"end":{"line":98,"column":51}},"29":{"start":{"line":102,"column":20},"end":{"line":102,"column":34}},"30":{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},"31":{"start":{"line":104,"column":12},"end":{"line":104,"column":34}},"32":{"start":{"line":106,"column":12},"end":{"line":106,"column":23}},"33":{"start":{"line":108,"column":19},"end":{"line":108,"column":56}},"34":{"start":{"line":109,"column":19},"end":{"line":109,"column":53}},"35":{"start":{"line":110,"column":8},"end":{"line":110,"column":60}},"36":{"start":{"line":114,"column":34},"end":{"line":114,"column":61}},"37":{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},"38":{"start":{"line":116,"column":12},"end":{"line":116,"column":42}},"39":{"start":{"line":118,"column":29},"end":{"line":118,"column":62}},"40":{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},"41":{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},"42":{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},"43":{"start":{"line":122,"column":20},"end":{"line":122,"column":64}},"44":{"start":{"line":124,"column":20},"end":{"line":124,"column":95}},"45":{"start":{"line":125,"column":20},"end":{"line":125,"column":47}},"46":{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},"47":{"start":{"line":130,"column":12},"end":{"line":130,"column":42}},"48":{"start":{"line":132,"column":12},"end":{"line":132,"column":39}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":49,"column":50},"end":{"line":49,"column":51}},"loc":{"start":{"line":49,"column":60},"end":{"line":56,"column":1}},"line":49},"1":{"name":"(anonymous_1)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":27},"end":{"line":74,"column":5}},"line":65},"2":{"name":"(anonymous_2)","decl":{"start":{"line":72,"column":34},"end":{"line":72,"column":35}},"loc":{"start":{"line":72,"column":44},"end":{"line":72,"column":71}},"line":72},"3":{"name":"(anonymous_3)","decl":{"start":{"line":76,"column":4},"end":{"line":76,"column":5}},"loc":{"start":{"line":76,"column":25},"end":{"line":85,"column":5}},"line":76},"4":{"name":"(anonymous_4)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":17},"end":{"line":89,"column":5}},"line":87},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":4},"end":{"line":91,"column":5}},"loc":{"start":{"line":91,"column":30},"end":{"line":99,"column":5}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":31},"end":{"line":111,"column":5}},"line":101},"7":{"name":"(anonymous_7)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":5}},"loc":{"start":{"line":113,"column":20},"end":{"line":135,"column":5}},"line":113}},"branchMap":{"0":{"loc":{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},"type":"if","locations":[{"start":{"line":94,"column":8},"end":{"line":96,"column":9}},{"start":{},"end":{}}],"line":94},"1":{"loc":{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":107,"column":9}},{"start":{"line":105,"column":15},"end":{"line":107,"column":9}}],"line":103},"2":{"loc":{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},"type":"if","locations":[{"start":{"line":115,"column":8},"end":{"line":117,"column":9}},{"start":{},"end":{}}],"line":115},"3":{"loc":{"start":{"line":115,"column":12},"end":{"line":115,"column":59}},"type":"binary-expr","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":31}},{"start":{"line":115,"column":35},"end":{"line":115,"column":59}}],"line":115},"4":{"loc":{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},"type":"if","locations":[{"start":{"line":119,"column":8},"end":{"line":128,"column":9}},{"start":{},"end":{}}],"line":119},"5":{"loc":{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},"type":"if","locations":[{"start":{"line":120,"column":12},"end":{"line":127,"column":13}},{"start":{},"end":{}}],"line":120},"6":{"loc":{"start":{"line":120,"column":16},"end":{"line":120,"column":51}},"type":"binary-expr","locations":[{"start":{"line":120,"column":16},"end":{"line":120,"column":33}},{"start":{"line":120,"column":37},"end":{"line":120,"column":51}}],"line":120},"7":{"loc":{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},"type":"if","locations":[{"start":{"line":121,"column":16},"end":{"line":126,"column":17}},{"start":{"line":123,"column":23},"end":{"line":126,"column":17}}],"line":121},"8":{"loc":{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},"type":"if","locations":[{"start":{"line":129,"column":8},"end":{"line":133,"column":9}},{"start":{"line":131,"column":15},"end":{"line":133,"column":9}}],"line":129}},"s":{"0":4,"1":4,"2":4,"3":4,"4":40,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0},"f":{"0":40,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"36f8bf6fc908147be501102bcffa9a6f01deb0d7"} -,"/home/runner/work/blockpy/blockpy/src/engine.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine.js","statementMap":{"0":{"start":{"line":24,"column":8},"end":{"line":24,"column":25}},"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":56}},"2":{"start":{"line":27,"column":8},"end":{"line":33,"column":10}},"3":{"start":{"line":36,"column":8},"end":{"line":36,"column":65}},"4":{"start":{"line":39,"column":8},"end":{"line":39,"column":34}},"5":{"start":{"line":45,"column":8},"end":{"line":45,"column":37}},"6":{"start":{"line":46,"column":8},"end":{"line":46,"column":35}},"7":{"start":{"line":53,"column":21},"end":{"line":53,"column":48}},"8":{"start":{"line":54,"column":8},"end":{"line":54,"column":32}},"9":{"start":{"line":55,"column":8},"end":{"line":55,"column":30}},"10":{"start":{"line":56,"column":8},"end":{"line":56,"column":31}},"11":{"start":{"line":57,"column":8},"end":{"line":57,"column":34}},"12":{"start":{"line":58,"column":8},"end":{"line":58,"column":42}},"13":{"start":{"line":62,"column":22},"end":{"line":62,"column":49}},"14":{"start":{"line":63,"column":8},"end":{"line":63,"column":27}},"15":{"start":{"line":64,"column":8},"end":{"line":64,"column":34}},"16":{"start":{"line":65,"column":8},"end":{"line":65,"column":36}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":28}},"18":{"start":{"line":67,"column":8},"end":{"line":67,"column":34}},"19":{"start":{"line":68,"column":8},"end":{"line":68,"column":45}},"20":{"start":{"line":69,"column":8},"end":{"line":69,"column":31}},"21":{"start":{"line":70,"column":8},"end":{"line":70,"column":29}},"22":{"start":{"line":74,"column":8},"end":{"line":78,"column":10}},"23":{"start":{"line":87,"column":8},"end":{"line":87,"column":33}},"24":{"start":{"line":89,"column":8},"end":{"line":89,"column":28}},"25":{"start":{"line":91,"column":8},"end":{"line":91,"column":36}},"26":{"start":{"line":93,"column":8},"end":{"line":93,"column":45}},"27":{"start":{"line":95,"column":8},"end":{"line":95,"column":46}},"28":{"start":{"line":101,"column":8},"end":{"line":101,"column":34}},"29":{"start":{"line":110,"column":8},"end":{"line":110,"column":63}},"30":{"start":{"line":111,"column":24},"end":{"line":114,"column":9}},"31":{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},"32":{"start":{"line":116,"column":12},"end":{"line":119,"column":15}},"33":{"start":{"line":117,"column":16},"end":{"line":117,"column":56}},"34":{"start":{"line":118,"column":16},"end":{"line":118,"column":36}},"35":{"start":{"line":121,"column":12},"end":{"line":121,"column":83}},"36":{"start":{"line":123,"column":8},"end":{"line":123,"column":76}},"37":{"start":{"line":127,"column":8},"end":{"line":127,"column":65}},"38":{"start":{"line":128,"column":8},"end":{"line":133,"column":49}},"39":{"start":{"line":137,"column":8},"end":{"line":137,"column":63}},"40":{"start":{"line":138,"column":30},"end":{"line":138,"column":69}},"41":{"start":{"line":139,"column":8},"end":{"line":139,"column":37}},"42":{"start":{"line":140,"column":8},"end":{"line":155,"column":11}},"43":{"start":{"line":141,"column":12},"end":{"line":141,"column":79}},"44":{"start":{"line":142,"column":28},"end":{"line":145,"column":13}},"45":{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},"46":{"start":{"line":148,"column":16},"end":{"line":148,"column":56}},"47":{"start":{"line":149,"column":16},"end":{"line":149,"column":55}},"48":{"start":{"line":151,"column":16},"end":{"line":152,"column":52}},"49":{"start":{"line":154,"column":12},"end":{"line":154,"column":80}},"50":{"start":{"line":159,"column":8},"end":{"line":159,"column":66}},"51":{"start":{"line":160,"column":8},"end":{"line":165,"column":71}},"52":{"start":{"line":169,"column":8},"end":{"line":169,"column":68}},"53":{"start":{"line":173,"column":8},"end":{"line":173,"column":63}},"54":{"start":{"line":174,"column":8},"end":{"line":178,"column":10}},"55":{"start":{"line":175,"column":12},"end":{"line":177,"column":64}},"56":{"start":{"line":185,"column":23},"end":{"line":185,"column":34}},"57":{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},"58":{"start":{"line":188,"column":12},"end":{"line":188,"column":25}},"59":{"start":{"line":190,"column":8},"end":{"line":190,"column":53}},"60":{"start":{"line":191,"column":8},"end":{"line":191,"column":47}},"61":{"start":{"line":193,"column":21},"end":{"line":193,"column":25}},"62":{"start":{"line":194,"column":23},"end":{"line":194,"column":52}},"63":{"start":{"line":195,"column":8},"end":{"line":195,"column":30}},"64":{"start":{"line":196,"column":8},"end":{"line":196,"column":28}},"65":{"start":{"line":197,"column":8},"end":{"line":197,"column":29}},"66":{"start":{"line":198,"column":8},"end":{"line":209,"column":11}},"67":{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},"68":{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},"69":{"start":{"line":204,"column":20},"end":{"line":204,"column":77}},"70":{"start":{"line":206,"column":16},"end":{"line":206,"column":75}},"71":{"start":{"line":207,"column":16},"end":{"line":207,"column":63}},"72":{"start":{"line":210,"column":8},"end":{"line":210,"column":70}},"73":{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},"74":{"start":{"line":220,"column":12},"end":{"line":220,"column":34}},"75":{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},"76":{"start":{"line":229,"column":12},"end":{"line":229,"column":36}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":22},"end":{"line":47,"column":5}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":52,"column":4},"end":{"line":52,"column":5}},"loc":{"start":{"line":52,"column":19},"end":{"line":59,"column":5}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":61,"column":4},"end":{"line":61,"column":5}},"loc":{"start":{"line":61,"column":24},"end":{"line":71,"column":5}},"line":61},"3":{"name":"(anonymous_3)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":27},"end":{"line":79,"column":5}},"line":73},"4":{"name":"(anonymous_4)","decl":{"start":{"line":84,"column":4},"end":{"line":84,"column":5}},"loc":{"start":{"line":84,"column":12},"end":{"line":96,"column":5}},"line":84},"5":{"name":"(anonymous_5)","decl":{"start":{"line":98,"column":4},"end":{"line":98,"column":5}},"loc":{"start":{"line":98,"column":38},"end":{"line":103,"column":5}},"line":98},"6":{"name":"(anonymous_6)","decl":{"start":{"line":105,"column":4},"end":{"line":105,"column":5}},"loc":{"start":{"line":105,"column":11},"end":{"line":107,"column":5}},"line":105},"7":{"name":"(anonymous_7)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":5}},"loc":{"start":{"line":109,"column":31},"end":{"line":124,"column":5}},"line":109},"8":{"name":"(anonymous_8)","decl":{"start":{"line":116,"column":27},"end":{"line":116,"column":28}},"loc":{"start":{"line":116,"column":33},"end":{"line":119,"column":13}},"line":116},"9":{"name":"(anonymous_9)","decl":{"start":{"line":126,"column":4},"end":{"line":126,"column":5}},"loc":{"start":{"line":126,"column":12},"end":{"line":134,"column":5}},"line":126},"10":{"name":"(anonymous_10)","decl":{"start":{"line":136,"column":4},"end":{"line":136,"column":5}},"loc":{"start":{"line":136,"column":15},"end":{"line":156,"column":5}},"line":136},"11":{"name":"(anonymous_11)","decl":{"start":{"line":140,"column":29},"end":{"line":140,"column":30}},"loc":{"start":{"line":140,"column":44},"end":{"line":155,"column":9}},"line":140},"12":{"name":"(anonymous_12)","decl":{"start":{"line":158,"column":4},"end":{"line":158,"column":5}},"loc":{"start":{"line":158,"column":13},"end":{"line":166,"column":5}},"line":158},"13":{"name":"(anonymous_13)","decl":{"start":{"line":168,"column":4},"end":{"line":168,"column":5}},"loc":{"start":{"line":168,"column":15},"end":{"line":170,"column":5}},"line":168},"14":{"name":"(anonymous_14)","decl":{"start":{"line":172,"column":4},"end":{"line":172,"column":5}},"loc":{"start":{"line":172,"column":14},"end":{"line":179,"column":5}},"line":172},"15":{"name":"(anonymous_15)","decl":{"start":{"line":174,"column":42},"end":{"line":174,"column":43}},"loc":{"start":{"line":175,"column":12},"end":{"line":177,"column":64}},"line":175},"16":{"name":"(anonymous_16)","decl":{"start":{"line":184,"column":4},"end":{"line":184,"column":5}},"loc":{"start":{"line":184,"column":16},"end":{"line":211,"column":5}},"line":184},"17":{"name":"(anonymous_17)","decl":{"start":{"line":198,"column":49},"end":{"line":198,"column":50}},"loc":{"start":{"line":198,"column":67},"end":{"line":209,"column":9}},"line":198},"18":{"name":"(anonymous_18)","decl":{"start":{"line":218,"column":4},"end":{"line":218,"column":5}},"loc":{"start":{"line":218,"column":20},"end":{"line":222,"column":5}},"line":218},"19":{"name":"(anonymous_19)","decl":{"start":{"line":227,"column":4},"end":{"line":227,"column":5}},"loc":{"start":{"line":227,"column":22},"end":{"line":231,"column":5}},"line":227}},"branchMap":{"0":{"loc":{"start":{"line":98,"column":15},"end":{"line":98,"column":36}},"type":"default-arg","locations":[{"start":{"line":98,"column":31},"end":{"line":98,"column":36}}],"line":98},"1":{"loc":{"start":{"line":109,"column":8},"end":{"line":109,"column":29}},"type":"default-arg","locations":[{"start":{"line":109,"column":24},"end":{"line":109,"column":29}}],"line":109},"2":{"loc":{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},"type":"if","locations":[{"start":{"line":115,"column":8},"end":{"line":122,"column":9}},{"start":{"line":120,"column":15},"end":{"line":122,"column":9}}],"line":115},"3":{"loc":{"start":{"line":115,"column":12},"end":{"line":115,"column":86}},"type":"binary-expr","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":66}},{"start":{"line":115,"column":70},"end":{"line":115,"column":86}}],"line":115},"4":{"loc":{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":146,"column":12},"end":{"line":153,"column":13}},{"start":{"line":150,"column":19},"end":{"line":153,"column":13}}],"line":146},"5":{"loc":{"start":{"line":146,"column":16},"end":{"line":147,"column":51}},"type":"binary-expr","locations":[{"start":{"line":146,"column":16},"end":{"line":146,"column":70}},{"start":{"line":147,"column":16},"end":{"line":147,"column":51}}],"line":146},"6":{"loc":{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},"type":"if","locations":[{"start":{"line":187,"column":8},"end":{"line":189,"column":9}},{"start":{},"end":{}}],"line":187},"7":{"loc":{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},"type":"if","locations":[{"start":{"line":199,"column":12},"end":{"line":208,"column":13}},{"start":{},"end":{}}],"line":199},"8":{"loc":{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},"type":"if","locations":[{"start":{"line":202,"column":16},"end":{"line":205,"column":17}},{"start":{},"end":{}}],"line":202},"9":{"loc":{"start":{"line":202,"column":20},"end":{"line":203,"column":73}},"type":"binary-expr","locations":[{"start":{"line":202,"column":20},"end":{"line":202,"column":28}},{"start":{"line":203,"column":20},"end":{"line":203,"column":73}}],"line":202},"10":{"loc":{"start":{"line":203,"column":22},"end":{"line":203,"column":72}},"type":"binary-expr","locations":[{"start":{"line":203,"column":22},"end":{"line":203,"column":47}},{"start":{"line":203,"column":51},"end":{"line":203,"column":72}}],"line":203},"11":{"loc":{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},"type":"if","locations":[{"start":{"line":219,"column":8},"end":{"line":221,"column":9}},{"start":{},"end":{}}],"line":219},"12":{"loc":{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},"type":"if","locations":[{"start":{"line":228,"column":8},"end":{"line":230,"column":9}},{"start":{},"end":{}}],"line":228}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ab5a283d7d1b2eefbd5abf0a0515ca8f120fbaa2"} -,"/home/runner/work/blockpy/blockpy/src/feedback.js": {"path":"/home/runner/work/blockpy/blockpy/src/feedback.js","statementMap":{"0":{"start":{"line":3,"column":27},"end":{"line":75,"column":1}},"1":{"start":{"line":89,"column":8},"end":{"line":89,"column":25}},"2":{"start":{"line":90,"column":8},"end":{"line":90,"column":23}},"3":{"start":{"line":92,"column":8},"end":{"line":92,"column":64}},"4":{"start":{"line":94,"column":8},"end":{"line":94,"column":68}},"5":{"start":{"line":95,"column":8},"end":{"line":95,"column":62}},"6":{"start":{"line":96,"column":8},"end":{"line":96,"column":66}},"7":{"start":{"line":97,"column":8},"end":{"line":97,"column":68}},"8":{"start":{"line":100,"column":8},"end":{"line":100,"column":103}},"9":{"start":{"line":100,"column":56},"end":{"line":100,"column":101}},"10":{"start":{"line":107,"column":8},"end":{"line":109,"column":16}},"11":{"start":{"line":117,"column":31},"end":{"line":117,"column":34}},"12":{"start":{"line":118,"column":27},"end":{"line":118,"column":48}},"13":{"start":{"line":120,"column":30},"end":{"line":120,"column":61}},"14":{"start":{"line":121,"column":29},"end":{"line":121,"column":71}},"15":{"start":{"line":122,"column":26},"end":{"line":122,"column":47}},"16":{"start":{"line":124,"column":8},"end":{"line":126,"column":45}},"17":{"start":{"line":134,"column":8},"end":{"line":134,"column":44}},"18":{"start":{"line":135,"column":8},"end":{"line":135,"column":42}},"19":{"start":{"line":136,"column":8},"end":{"line":136,"column":39}},"20":{"start":{"line":137,"column":8},"end":{"line":137,"column":41}},"21":{"start":{"line":138,"column":8},"end":{"line":138,"column":50}},"22":{"start":{"line":139,"column":8},"end":{"line":139,"column":54}},"23":{"start":{"line":140,"column":8},"end":{"line":140,"column":37}},"24":{"start":{"line":141,"column":8},"end":{"line":141,"column":35}},"25":{"start":{"line":142,"column":8},"end":{"line":142,"column":48}},"26":{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},"27":{"start":{"line":147,"column":27},"end":{"line":147,"column":84}},"28":{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},"29":{"start":{"line":149,"column":27},"end":{"line":149,"column":74}},"30":{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},"31":{"start":{"line":151,"column":20},"end":{"line":151,"column":50}},"32":{"start":{"line":155,"column":8},"end":{"line":155,"column":20}},"33":{"start":{"line":174,"column":22},"end":{"line":174,"column":64}},"34":{"start":{"line":175,"column":23},"end":{"line":175,"column":66}},"35":{"start":{"line":176,"column":20},"end":{"line":176,"column":60}},"36":{"start":{"line":177,"column":19},"end":{"line":177,"column":58}},"37":{"start":{"line":178,"column":19},"end":{"line":178,"column":40}},"38":{"start":{"line":179,"column":24},"end":{"line":179,"column":67}},"39":{"start":{"line":182,"column":24},"end":{"line":182,"column":59}},"40":{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},"41":{"start":{"line":184,"column":12},"end":{"line":184,"column":35}},"42":{"start":{"line":185,"column":12},"end":{"line":185,"column":32}},"43":{"start":{"line":186,"column":12},"end":{"line":186,"column":44}},"44":{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},"45":{"start":{"line":191,"column":12},"end":{"line":191,"column":42}},"46":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"47":{"start":{"line":196,"column":12},"end":{"line":196,"column":35}},"48":{"start":{"line":200,"column":8},"end":{"line":200,"column":89}},"49":{"start":{"line":201,"column":8},"end":{"line":201,"column":44}},"50":{"start":{"line":202,"column":8},"end":{"line":202,"column":46}},"51":{"start":{"line":203,"column":8},"end":{"line":203,"column":40}},"52":{"start":{"line":205,"column":8},"end":{"line":207,"column":11}},"53":{"start":{"line":206,"column":12},"end":{"line":206,"column":46}},"54":{"start":{"line":210,"column":8},"end":{"line":210,"column":100}},"55":{"start":{"line":213,"column":8},"end":{"line":213,"column":69}},"56":{"start":{"line":216,"column":19},"end":{"line":216,"column":59}},"57":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"58":{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},"59":{"start":{"line":219,"column":12},"end":{"line":219,"column":53}},"60":{"start":{"line":223,"column":28},"end":{"line":223,"column":69}},"61":{"start":{"line":224,"column":8},"end":{"line":224,"column":54}},"62":{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},"63":{"start":{"line":226,"column":33},"end":{"line":226,"column":35}},"64":{"start":{"line":227,"column":12},"end":{"line":231,"column":15}},"65":{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},"66":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"67":{"start":{"line":232,"column":12},"end":{"line":232,"column":62}},"68":{"start":{"line":235,"column":8},"end":{"line":238,"column":9}},"69":{"start":{"line":235,"column":19},"end":{"line":235,"column":20}},"70":{"start":{"line":236,"column":31},"end":{"line":236,"column":43}},"71":{"start":{"line":237,"column":12},"end":{"line":237,"column":176}},"72":{"start":{"line":237,"column":82},"end":{"line":237,"column":174}},"73":{"start":{"line":242,"column":8},"end":{"line":242,"column":30}},"74":{"start":{"line":243,"column":8},"end":{"line":243,"column":86}},"75":{"start":{"line":247,"column":23},"end":{"line":247,"column":41}},"76":{"start":{"line":248,"column":8},"end":{"line":248,"column":73}},"77":{"start":{"line":249,"column":8},"end":{"line":249,"column":37}},"78":{"start":{"line":250,"column":8},"end":{"line":250,"column":37}},"79":{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},"80":{"start":{"line":252,"column":12},"end":{"line":252,"column":43}},"81":{"start":{"line":254,"column":12},"end":{"line":254,"column":44}},"82":{"start":{"line":256,"column":8},"end":{"line":256,"column":107}},"83":{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},"84":{"start":{"line":258,"column":12},"end":{"line":258,"column":36}},"85":{"start":{"line":260,"column":8},"end":{"line":262,"column":11}},"86":{"start":{"line":261,"column":12},"end":{"line":261,"column":94}},"87":{"start":{"line":269,"column":8},"end":{"line":269,"column":46}},"88":{"start":{"line":271,"column":8},"end":{"line":271,"column":35}},"89":{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},"90":{"start":{"line":273,"column":12},"end":{"line":273,"column":54}},"91":{"start":{"line":279,"column":8},"end":{"line":279,"column":36}},"92":{"start":{"line":283,"column":22},"end":{"line":283,"column":71}},"93":{"start":{"line":284,"column":25},"end":{"line":284,"column":89}},"94":{"start":{"line":285,"column":21},"end":{"line":285,"column":69}},"95":{"start":{"line":286,"column":23},"end":{"line":286,"column":50}},"96":{"start":{"line":287,"column":22},"end":{"line":287,"column":73}},"97":{"start":{"line":288,"column":31},"end":{"line":288,"column":89}},"98":{"start":{"line":289,"column":8},"end":{"line":289,"column":64}},"99":{"start":{"line":290,"column":30},"end":{"line":290,"column":87}},"100":{"start":{"line":291,"column":23},"end":{"line":291,"column":62}},"101":{"start":{"line":292,"column":26},"end":{"line":292,"column":55}},"102":{"start":{"line":293,"column":20},"end":{"line":293,"column":67}},"103":{"start":{"line":294,"column":8},"end":{"line":297,"column":35}},"104":{"start":{"line":298,"column":8},"end":{"line":310,"column":11}},"105":{"start":{"line":314,"column":8},"end":{"line":314,"column":38}},"106":{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},"107":{"start":{"line":316,"column":12},"end":{"line":316,"column":19}},"108":{"start":{"line":318,"column":25},"end":{"line":318,"column":53}},"109":{"start":{"line":319,"column":25},"end":{"line":319,"column":69}},"110":{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},"111":{"start":{"line":321,"column":12},"end":{"line":321,"column":19}},"112":{"start":{"line":323,"column":24},"end":{"line":323,"column":26}},"113":{"start":{"line":324,"column":8},"end":{"line":326,"column":11}},"114":{"start":{"line":325,"column":12},"end":{"line":325,"column":64}},"115":{"start":{"line":327,"column":8},"end":{"line":329,"column":11}},"116":{"start":{"line":328,"column":12},"end":{"line":328,"column":64}},"117":{"start":{"line":330,"column":24},"end":{"line":330,"column":33}},"118":{"start":{"line":331,"column":8},"end":{"line":345,"column":9}},"119":{"start":{"line":331,"column":21},"end":{"line":331,"column":22}},"120":{"start":{"line":332,"column":44},"end":{"line":332,"column":56}},"121":{"start":{"line":333,"column":30},"end":{"line":333,"column":59}},"122":{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},"123":{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},"124":{"start":{"line":336,"column":20},"end":{"line":336,"column":44}},"125":{"start":{"line":338,"column":16},"end":{"line":338,"column":47}},"126":{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},"127":{"start":{"line":341,"column":20},"end":{"line":341,"column":45}},"128":{"start":{"line":343,"column":16},"end":{"line":343,"column":51}},"129":{"start":{"line":346,"column":8},"end":{"line":346,"column":49}},"130":{"start":{"line":347,"column":8},"end":{"line":353,"column":11}},"131":{"start":{"line":348,"column":12},"end":{"line":349,"column":49}},"132":{"start":{"line":350,"column":12},"end":{"line":352,"column":15}},"133":{"start":{"line":351,"column":16},"end":{"line":351,"column":63}},"134":{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},"135":{"start":{"line":358,"column":12},"end":{"line":358,"column":77}},"136":{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},"137":{"start":{"line":360,"column":16},"end":{"line":360,"column":38}},"138":{"start":{"line":366,"column":8},"end":{"line":366,"column":49}},"139":{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},"140":{"start":{"line":371,"column":12},"end":{"line":371,"column":32}},"141":{"start":{"line":374,"column":8},"end":{"line":374,"column":30}},"142":{"start":{"line":375,"column":8},"end":{"line":375,"column":29}},"143":{"start":{"line":376,"column":8},"end":{"line":376,"column":49}},"144":{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},"145":{"start":{"line":379,"column":12},"end":{"line":379,"column":27}},"146":{"start":{"line":381,"column":8},"end":{"line":381,"column":44}},"147":{"start":{"line":382,"column":8},"end":{"line":382,"column":46}},"148":{"start":{"line":383,"column":8},"end":{"line":383,"column":40}},"149":{"start":{"line":384,"column":8},"end":{"line":384,"column":50}},"150":{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},"151":{"start":{"line":386,"column":12},"end":{"line":386,"column":55}},"152":{"start":{"line":391,"column":8},"end":{"line":408,"column":11}},"153":{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},"154":{"start":{"line":393,"column":16},"end":{"line":393,"column":28}},"155":{"start":{"line":395,"column":25},"end":{"line":395,"column":37}},"156":{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},"157":{"start":{"line":397,"column":16},"end":{"line":397,"column":82}},"158":{"start":{"line":399,"column":23},"end":{"line":399,"column":81}},"159":{"start":{"line":400,"column":23},"end":{"line":400,"column":72}},"160":{"start":{"line":401,"column":24},"end":{"line":402,"column":71}},"161":{"start":{"line":403,"column":25},"end":{"line":403,"column":27}},"162":{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},"163":{"start":{"line":405,"column":16},"end":{"line":405,"column":69}},"164":{"start":{"line":407,"column":12},"end":{"line":407,"column":48}},"165":{"start":{"line":412,"column":19},"end":{"line":412,"column":32}},"166":{"start":{"line":413,"column":19},"end":{"line":413,"column":47}},"167":{"start":{"line":414,"column":18},"end":{"line":414,"column":51}},"168":{"start":{"line":415,"column":24},"end":{"line":415,"column":26}},"169":{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},"170":{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},"171":{"start":{"line":418,"column":34},"end":{"line":418,"column":82}},"172":{"start":{"line":419,"column":31},"end":{"line":419,"column":45}},"173":{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},"174":{"start":{"line":421,"column":20},"end":{"line":423,"column":60}},"175":{"start":{"line":425,"column":20},"end":{"line":425,"column":46}},"176":{"start":{"line":427,"column":16},"end":{"line":427,"column":50}},"177":{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},"178":{"start":{"line":431,"column":16},"end":{"line":431,"column":108}},"179":{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},"180":{"start":{"line":434,"column":16},"end":{"line":434,"column":109}},"181":{"start":{"line":437,"column":8},"end":{"line":437,"column":34}},"182":{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},"183":{"start":{"line":442,"column":12},"end":{"line":442,"column":67}},"184":{"start":{"line":443,"column":12},"end":{"line":443,"column":70}},"185":{"start":{"line":445,"column":12},"end":{"line":445,"column":68}},"186":{"start":{"line":446,"column":12},"end":{"line":446,"column":71}},"187":{"start":{"line":448,"column":22},"end":{"line":448,"column":76}},"188":{"start":{"line":449,"column":8},"end":{"line":449,"column":60}},"189":{"start":{"line":451,"column":8},"end":{"line":451,"column":36}},"190":{"start":{"line":453,"column":8},"end":{"line":453,"column":120}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":88,"column":4},"end":{"line":88,"column":5}},"loc":{"start":{"line":88,"column":27},"end":{"line":101,"column":5}},"line":88},"1":{"name":"(anonymous_1)","decl":{"start":{"line":100,"column":50},"end":{"line":100,"column":51}},"loc":{"start":{"line":100,"column":56},"end":{"line":100,"column":101}},"line":100},"2":{"name":"(anonymous_2)","decl":{"start":{"line":106,"column":4},"end":{"line":106,"column":5}},"loc":{"start":{"line":106,"column":21},"end":{"line":110,"column":5}},"line":106},"3":{"name":"(anonymous_3)","decl":{"start":{"line":116,"column":4},"end":{"line":116,"column":5}},"loc":{"start":{"line":116,"column":24},"end":{"line":127,"column":5}},"line":116},"4":{"name":"(anonymous_4)","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":5}},"loc":{"start":{"line":133,"column":27},"end":{"line":143,"column":5}},"line":133},"5":{"name":"(anonymous_5)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":44},"end":{"line":162,"column":5}},"line":145},"6":{"name":"(anonymous_6)","decl":{"start":{"line":164,"column":4},"end":{"line":164,"column":5}},"loc":{"start":{"line":164,"column":28},"end":{"line":166,"column":5}},"line":164},"7":{"name":"(anonymous_7)","decl":{"start":{"line":172,"column":4},"end":{"line":172,"column":5}},"loc":{"start":{"line":172,"column":37},"end":{"line":239,"column":5}},"line":172},"8":{"name":"(anonymous_8)","decl":{"start":{"line":205,"column":43},"end":{"line":205,"column":44}},"loc":{"start":{"line":205,"column":57},"end":{"line":207,"column":9}},"line":205},"9":{"name":"(anonymous_9)","decl":{"start":{"line":227,"column":67},"end":{"line":227,"column":68}},"loc":{"start":{"line":227,"column":77},"end":{"line":231,"column":13}},"line":227},"10":{"name":"(anonymous_10)","decl":{"start":{"line":237,"column":76},"end":{"line":237,"column":77}},"loc":{"start":{"line":237,"column":82},"end":{"line":237,"column":174}},"line":237},"11":{"name":"(anonymous_11)","decl":{"start":{"line":241,"column":4},"end":{"line":241,"column":5}},"loc":{"start":{"line":241,"column":28},"end":{"line":244,"column":5}},"line":241},"12":{"name":"(anonymous_12)","decl":{"start":{"line":246,"column":4},"end":{"line":246,"column":5}},"loc":{"start":{"line":246,"column":59},"end":{"line":263,"column":5}},"line":246},"13":{"name":"(anonymous_13)","decl":{"start":{"line":260,"column":23},"end":{"line":260,"column":24}},"loc":{"start":{"line":260,"column":29},"end":{"line":262,"column":9}},"line":260},"14":{"name":"(anonymous_14)","decl":{"start":{"line":268,"column":4},"end":{"line":268,"column":5}},"loc":{"start":{"line":268,"column":38},"end":{"line":280,"column":5}},"line":268},"15":{"name":"(anonymous_15)","decl":{"start":{"line":282,"column":4},"end":{"line":282,"column":5}},"loc":{"start":{"line":282,"column":35},"end":{"line":311,"column":5}},"line":282},"16":{"name":"(anonymous_16)","decl":{"start":{"line":313,"column":4},"end":{"line":313,"column":5}},"loc":{"start":{"line":313,"column":41},"end":{"line":354,"column":5}},"line":313},"17":{"name":"(anonymous_17)","decl":{"start":{"line":324,"column":48},"end":{"line":324,"column":49}},"loc":{"start":{"line":324,"column":61},"end":{"line":326,"column":9}},"line":324},"18":{"name":"(anonymous_18)","decl":{"start":{"line":327,"column":92},"end":{"line":327,"column":93}},"loc":{"start":{"line":327,"column":105},"end":{"line":329,"column":9}},"line":327},"19":{"name":"(anonymous_19)","decl":{"start":{"line":347,"column":34},"end":{"line":347,"column":35}},"loc":{"start":{"line":347,"column":40},"end":{"line":353,"column":9}},"line":347},"20":{"name":"(anonymous_20)","decl":{"start":{"line":350,"column":55},"end":{"line":350,"column":56}},"loc":{"start":{"line":350,"column":66},"end":{"line":352,"column":13}},"line":350},"21":{"name":"(anonymous_21)","decl":{"start":{"line":356,"column":4},"end":{"line":356,"column":5}},"loc":{"start":{"line":356,"column":27},"end":{"line":363,"column":5}},"line":356},"22":{"name":"(anonymous_22)","decl":{"start":{"line":365,"column":4},"end":{"line":365,"column":5}},"loc":{"start":{"line":365,"column":27},"end":{"line":367,"column":5}},"line":365},"23":{"name":"(anonymous_23)","decl":{"start":{"line":369,"column":4},"end":{"line":369,"column":5}},"loc":{"start":{"line":369,"column":40},"end":{"line":388,"column":5}},"line":369},"24":{"name":"(anonymous_24)","decl":{"start":{"line":390,"column":4},"end":{"line":390,"column":5}},"loc":{"start":{"line":390,"column":44},"end":{"line":409,"column":5}},"line":390},"25":{"name":"(anonymous_25)","decl":{"start":{"line":391,"column":35},"end":{"line":391,"column":36}},"loc":{"start":{"line":391,"column":44},"end":{"line":408,"column":9}},"line":391},"26":{"name":"(anonymous_26)","decl":{"start":{"line":411,"column":4},"end":{"line":411,"column":5}},"loc":{"start":{"line":411,"column":62},"end":{"line":438,"column":5}},"line":411},"27":{"name":"(anonymous_27)","decl":{"start":{"line":440,"column":4},"end":{"line":440,"column":5}},"loc":{"start":{"line":440,"column":50},"end":{"line":454,"column":5}},"line":440}},"branchMap":{"0":{"loc":{"start":{"line":125,"column":12},"end":{"line":126,"column":43}},"type":"binary-expr","locations":[{"start":{"line":125,"column":13},"end":{"line":125,"column":42}},{"start":{"line":126,"column":13},"end":{"line":126,"column":42}}],"line":125},"1":{"loc":{"start":{"line":133,"column":10},"end":{"line":133,"column":25}},"type":"default-arg","locations":[{"start":{"line":133,"column":18},"end":{"line":133,"column":25}}],"line":133},"2":{"loc":{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},"type":"if","locations":[{"start":{"line":146,"column":8},"end":{"line":154,"column":9}},{"start":{},"end":{}}],"line":146},"3":{"loc":{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":148,"column":12},"end":{"line":153,"column":13}},{"start":{},"end":{}}],"line":148},"4":{"loc":{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},"type":"if","locations":[{"start":{"line":150,"column":16},"end":{"line":152,"column":17}},{"start":{},"end":{}}],"line":150},"5":{"loc":{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},"type":"if","locations":[{"start":{"line":183,"column":8},"end":{"line":187,"column":9}},{"start":{},"end":{}}],"line":183},"6":{"loc":{"start":{"line":183,"column":12},"end":{"line":183,"column":62}},"type":"binary-expr","locations":[{"start":{"line":183,"column":12},"end":{"line":183,"column":21}},{"start":{"line":183,"column":25},"end":{"line":183,"column":62}}],"line":183},"7":{"loc":{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":192,"column":9}},{"start":{},"end":{}}],"line":190},"8":{"loc":{"start":{"line":190,"column":12},"end":{"line":190,"column":88}},"type":"binary-expr","locations":[{"start":{"line":190,"column":12},"end":{"line":190,"column":51}},{"start":{"line":190,"column":55},"end":{"line":190,"column":88}}],"line":190},"9":{"loc":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},{"start":{},"end":{}}],"line":195},"10":{"loc":{"start":{"line":195,"column":12},"end":{"line":195,"column":62}},"type":"binary-expr","locations":[{"start":{"line":195,"column":12},"end":{"line":195,"column":37}},{"start":{"line":195,"column":41},"end":{"line":195,"column":62}}],"line":195},"11":{"loc":{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},"type":"if","locations":[{"start":{"line":218,"column":8},"end":{"line":220,"column":9}},{"start":{},"end":{}}],"line":218},"12":{"loc":{"start":{"line":218,"column":12},"end":{"line":218,"column":47}},"type":"binary-expr","locations":[{"start":{"line":218,"column":12},"end":{"line":218,"column":25}},{"start":{"line":218,"column":29},"end":{"line":218,"column":47}}],"line":218},"13":{"loc":{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},"type":"if","locations":[{"start":{"line":225,"column":8},"end":{"line":233,"column":9}},{"start":{},"end":{}}],"line":225},"14":{"loc":{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},"type":"if","locations":[{"start":{"line":228,"column":16},"end":{"line":230,"column":17}},{"start":{},"end":{}}],"line":228},"15":{"loc":{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},"type":"if","locations":[{"start":{"line":251,"column":8},"end":{"line":255,"column":9}},{"start":{"line":253,"column":15},"end":{"line":255,"column":9}}],"line":251},"16":{"loc":{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":257,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":257},"17":{"loc":{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},"type":"if","locations":[{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},{"start":{},"end":{}}],"line":272},"18":{"loc":{"start":{"line":289,"column":18},"end":{"line":289,"column":63}},"type":"cond-expr","locations":[{"start":{"line":289,"column":39},"end":{"line":289,"column":53}},{"start":{"line":289,"column":56},"end":{"line":289,"column":63}}],"line":289},"19":{"loc":{"start":{"line":294,"column":16},"end":{"line":297,"column":34}},"type":"cond-expr","locations":[{"start":{"line":294,"column":50},"end":{"line":294,"column":52}},{"start":{"line":295,"column":14},"end":{"line":297,"column":34}}],"line":294},"20":{"loc":{"start":{"line":295,"column":14},"end":{"line":297,"column":34}},"type":"cond-expr","locations":[{"start":{"line":296,"column":18},"end":{"line":296,"column":64}},{"start":{"line":297,"column":18},"end":{"line":297,"column":34}}],"line":295},"21":{"loc":{"start":{"line":299,"column":69},"end":{"line":299,"column":114}},"type":"cond-expr","locations":[{"start":{"line":299,"column":81},"end":{"line":299,"column":109}},{"start":{"line":299,"column":112},"end":{"line":299,"column":114}}],"line":299},"22":{"loc":{"start":{"line":301,"column":52},"end":{"line":301,"column":98}},"type":"cond-expr","locations":[{"start":{"line":301,"column":61},"end":{"line":301,"column":63}},{"start":{"line":301,"column":66},"end":{"line":301,"column":98}}],"line":301},"23":{"loc":{"start":{"line":304,"column":14},"end":{"line":304,"column":71}},"type":"cond-expr","locations":[{"start":{"line":304,"column":23},"end":{"line":304,"column":25}},{"start":{"line":304,"column":28},"end":{"line":304,"column":71}}],"line":304},"24":{"loc":{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},"type":"if","locations":[{"start":{"line":315,"column":8},"end":{"line":317,"column":9}},{"start":{},"end":{}}],"line":315},"25":{"loc":{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},"type":"if","locations":[{"start":{"line":320,"column":8},"end":{"line":322,"column":9}},{"start":{},"end":{}}],"line":320},"26":{"loc":{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},"type":"if","locations":[{"start":{"line":334,"column":12},"end":{"line":344,"column":13}},{"start":{"line":339,"column":19},"end":{"line":344,"column":13}}],"line":334},"27":{"loc":{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},"type":"if","locations":[{"start":{"line":335,"column":16},"end":{"line":337,"column":17}},{"start":{},"end":{}}],"line":335},"28":{"loc":{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},"type":"if","locations":[{"start":{"line":340,"column":16},"end":{"line":342,"column":17}},{"start":{},"end":{}}],"line":340},"29":{"loc":{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},"type":"if","locations":[{"start":{"line":357,"column":8},"end":{"line":362,"column":9}},{"start":{},"end":{}}],"line":357},"30":{"loc":{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},"type":"if","locations":[{"start":{"line":359,"column":12},"end":{"line":361,"column":13}},{"start":{},"end":{}}],"line":359},"31":{"loc":{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},"type":"if","locations":[{"start":{"line":370,"column":8},"end":{"line":372,"column":9}},{"start":{},"end":{}}],"line":370},"32":{"loc":{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":8},"end":{"line":380,"column":9}},{"start":{},"end":{}}],"line":378},"33":{"loc":{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},"type":"if","locations":[{"start":{"line":385,"column":8},"end":{"line":387,"column":9}},{"start":{},"end":{}}],"line":385},"34":{"loc":{"start":{"line":385,"column":12},"end":{"line":385,"column":51}},"type":"binary-expr","locations":[{"start":{"line":385,"column":12},"end":{"line":385,"column":32}},{"start":{"line":385,"column":36},"end":{"line":385,"column":51}}],"line":385},"35":{"loc":{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},"type":"if","locations":[{"start":{"line":392,"column":12},"end":{"line":394,"column":13}},{"start":{},"end":{}}],"line":392},"36":{"loc":{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},"type":"if","locations":[{"start":{"line":396,"column":12},"end":{"line":398,"column":13}},{"start":{},"end":{}}],"line":396},"37":{"loc":{"start":{"line":401,"column":24},"end":{"line":402,"column":71}},"type":"cond-expr","locations":[{"start":{"line":402,"column":41},"end":{"line":402,"column":66}},{"start":{"line":402,"column":69},"end":{"line":402,"column":71}}],"line":401},"38":{"loc":{"start":{"line":401,"column":25},"end":{"line":402,"column":37}},"type":"binary-expr","locations":[{"start":{"line":401,"column":25},"end":{"line":401,"column":51}},{"start":{"line":402,"column":12},"end":{"line":402,"column":37}}],"line":401},"39":{"loc":{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},"type":"if","locations":[{"start":{"line":404,"column":12},"end":{"line":406,"column":13}},{"start":{},"end":{}}],"line":404},"40":{"loc":{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},"type":"if","locations":[{"start":{"line":416,"column":8},"end":{"line":436,"column":9}},{"start":{"line":429,"column":15},"end":{"line":436,"column":9}}],"line":416},"41":{"loc":{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},"type":"if","locations":[{"start":{"line":417,"column":12},"end":{"line":428,"column":13}},{"start":{},"end":{}}],"line":417},"42":{"loc":{"start":{"line":417,"column":16},"end":{"line":417,"column":78}},"type":"binary-expr","locations":[{"start":{"line":417,"column":16},"end":{"line":417,"column":25}},{"start":{"line":417,"column":29},"end":{"line":417,"column":48}},{"start":{"line":417,"column":52},"end":{"line":417,"column":78}}],"line":417},"43":{"loc":{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},"type":"if","locations":[{"start":{"line":420,"column":16},"end":{"line":426,"column":17}},{"start":{"line":424,"column":23},"end":{"line":426,"column":17}}],"line":420},"44":{"loc":{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},"type":"if","locations":[{"start":{"line":430,"column":12},"end":{"line":432,"column":13}},{"start":{},"end":{}}],"line":430},"45":{"loc":{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},"type":"if","locations":[{"start":{"line":433,"column":12},"end":{"line":435,"column":13}},{"start":{},"end":{}}],"line":433},"46":{"loc":{"start":{"line":433,"column":16},"end":{"line":433,"column":57}},"type":"binary-expr","locations":[{"start":{"line":433,"column":16},"end":{"line":433,"column":31}},{"start":{"line":433,"column":35},"end":{"line":433,"column":57}}],"line":433},"47":{"loc":{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},"type":"if","locations":[{"start":{"line":441,"column":8},"end":{"line":447,"column":9}},{"start":{"line":444,"column":15},"end":{"line":447,"column":9}}],"line":441}},"s":{"0":5,"1":5,"2":5,"3":5,"4":5,"5":5,"6":5,"7":5,"8":5,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0},"f":{"0":5,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"b":{"0":[0,0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"44c16dc6aa8ddd7a3f547b00bef0da7cdece90ca"} -,"/home/runner/work/blockpy/blockpy/src/files.js": {"path":"/home/runner/work/blockpy/blockpy/src/files.js","statementMap":{"0":{"start":{"line":5,"column":16},"end":{"line":24,"column":1}},"1":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":32}},"3":{"start":{"line":9,"column":30},"end":{"line":9,"column":32}},"4":{"start":{"line":10,"column":30},"end":{"line":10,"column":36}},"5":{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},"6":{"start":{"line":12,"column":8},"end":{"line":12,"column":56}},"7":{"start":{"line":13,"column":8},"end":{"line":13,"column":53}},"8":{"start":{"line":15,"column":4},"end":{"line":23,"column":11}},"9":{"start":{"line":26,"column":24},"end":{"line":134,"column":1}},"10":{"start":{"line":136,"column":40},"end":{"line":176,"column":1}},"11":{"start":{"line":190,"column":28},"end":{"line":199,"column":1}},"12":{"start":{"line":201,"column":31},"end":{"line":210,"column":1}},"13":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"14":{"start":{"line":214,"column":8},"end":{"line":214,"column":33}},"15":{"start":{"line":216,"column":8},"end":{"line":216,"column":24}},"16":{"start":{"line":220,"column":29},"end":{"line":220,"column":43}},"17":{"start":{"line":221,"column":26},"end":{"line":221,"column":37}},"18":{"start":{"line":223,"column":20},"end":{"line":227,"column":1}},"19":{"start":{"line":229,"column":31},"end":{"line":229,"column":63}},"20":{"start":{"line":231,"column":33},"end":{"line":232,"column":89}},"21":{"start":{"line":234,"column":33},"end":{"line":239,"column":75}},"22":{"start":{"line":243,"column":8},"end":{"line":243,"column":25}},"23":{"start":{"line":244,"column":8},"end":{"line":244,"column":33}},"24":{"start":{"line":245,"column":8},"end":{"line":245,"column":39}},"25":{"start":{"line":246,"column":8},"end":{"line":246,"column":26}},"26":{"start":{"line":247,"column":8},"end":{"line":247,"column":27}},"27":{"start":{"line":252,"column":4},"end":{"line":252,"column":90}},"28":{"start":{"line":256,"column":4},"end":{"line":256,"column":66}},"29":{"start":{"line":256,"column":29},"end":{"line":256,"column":37}},"30":{"start":{"line":256,"column":55},"end":{"line":256,"column":63}},"31":{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},"32":{"start":{"line":261,"column":20},"end":{"line":261,"column":48}},"33":{"start":{"line":262,"column":25},"end":{"line":262,"column":27}},"34":{"start":{"line":263,"column":8},"end":{"line":267,"column":9}},"35":{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},"36":{"start":{"line":265,"column":16},"end":{"line":265,"column":74}},"37":{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},"38":{"start":{"line":270,"column":12},"end":{"line":270,"column":38}},"39":{"start":{"line":272,"column":12},"end":{"line":272,"column":30}},"40":{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},"41":{"start":{"line":276,"column":12},"end":{"line":276,"column":30}},"42":{"start":{"line":278,"column":12},"end":{"line":278,"column":22}},"43":{"start":{"line":284,"column":4},"end":{"line":289,"column":8}},"44":{"start":{"line":285,"column":8},"end":{"line":288,"column":10}},"45":{"start":{"line":293,"column":4},"end":{"line":298,"column":7}},"46":{"start":{"line":294,"column":21},"end":{"line":294,"column":23}},"47":{"start":{"line":295,"column":8},"end":{"line":296,"column":55}},"48":{"start":{"line":296,"column":12},"end":{"line":296,"column":53}},"49":{"start":{"line":297,"column":8},"end":{"line":297,"column":38}},"50":{"start":{"line":306,"column":8},"end":{"line":306,"column":25}},"51":{"start":{"line":307,"column":8},"end":{"line":307,"column":25}},"52":{"start":{"line":308,"column":8},"end":{"line":308,"column":26}},"53":{"start":{"line":310,"column":8},"end":{"line":310,"column":26}},"54":{"start":{"line":311,"column":8},"end":{"line":311,"column":27}},"55":{"start":{"line":313,"column":8},"end":{"line":313,"column":31}},"56":{"start":{"line":314,"column":8},"end":{"line":314,"column":30}},"57":{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},"58":{"start":{"line":324,"column":12},"end":{"line":324,"column":41}},"59":{"start":{"line":326,"column":8},"end":{"line":326,"column":47}},"60":{"start":{"line":330,"column":8},"end":{"line":330,"column":39}},"61":{"start":{"line":334,"column":25},"end":{"line":334,"column":29}},"62":{"start":{"line":335,"column":8},"end":{"line":355,"column":10}},"63":{"start":{"line":338,"column":12},"end":{"line":354,"column":35}},"64":{"start":{"line":339,"column":16},"end":{"line":353,"column":23}},"65":{"start":{"line":339,"column":48},"end":{"line":339,"column":89}},"66":{"start":{"line":341,"column":40},"end":{"line":341,"column":52}},"67":{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},"68":{"start":{"line":344,"column":39},"end":{"line":344,"column":121}},"69":{"start":{"line":345,"column":28},"end":{"line":345,"column":59}},"70":{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},"71":{"start":{"line":348,"column":39},"end":{"line":348,"column":90}},"72":{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},"73":{"start":{"line":350,"column":32},"end":{"line":350,"column":84}},"74":{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},"75":{"start":{"line":377,"column":12},"end":{"line":377,"column":58}},"76":{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},"77":{"start":{"line":379,"column":12},"end":{"line":379,"column":59}},"78":{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},"79":{"start":{"line":381,"column":12},"end":{"line":381,"column":62}},"80":{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},"81":{"start":{"line":383,"column":12},"end":{"line":383,"column":60}},"82":{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},"83":{"start":{"line":385,"column":12},"end":{"line":385,"column":66}},"84":{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},"85":{"start":{"line":387,"column":12},"end":{"line":387,"column":66}},"86":{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},"87":{"start":{"line":389,"column":12},"end":{"line":389,"column":88}},"88":{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},"89":{"start":{"line":391,"column":12},"end":{"line":391,"column":88}},"90":{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},"91":{"start":{"line":393,"column":12},"end":{"line":393,"column":88}},"92":{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},"93":{"start":{"line":395,"column":12},"end":{"line":395,"column":88}},"94":{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},"95":{"start":{"line":397,"column":12},"end":{"line":397,"column":58}},"96":{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},"97":{"start":{"line":399,"column":12},"end":{"line":399,"column":62}},"98":{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},"99":{"start":{"line":401,"column":12},"end":{"line":401,"column":71}},"100":{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},"101":{"start":{"line":403,"column":12},"end":{"line":403,"column":50}},"102":{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},"103":{"start":{"line":405,"column":12},"end":{"line":405,"column":86}},"104":{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},"105":{"start":{"line":409,"column":12},"end":{"line":409,"column":88}},"106":{"start":{"line":411,"column":12},"end":{"line":411,"column":78}},"107":{"start":{"line":416,"column":8},"end":{"line":416,"column":27}},"108":{"start":{"line":417,"column":25},"end":{"line":417,"column":37}},"109":{"start":{"line":418,"column":8},"end":{"line":422,"column":9}},"110":{"start":{"line":418,"column":19},"end":{"line":418,"column":20}},"111":{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},"112":{"start":{"line":420,"column":16},"end":{"line":420,"column":53}},"113":{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},"114":{"start":{"line":424,"column":26},"end":{"line":424,"column":54}},"115":{"start":{"line":425,"column":12},"end":{"line":425,"column":43}},"116":{"start":{"line":426,"column":12},"end":{"line":426,"column":32}},"117":{"start":{"line":431,"column":8},"end":{"line":431,"column":34}},"118":{"start":{"line":432,"column":8},"end":{"line":432,"column":42}},"119":{"start":{"line":433,"column":8},"end":{"line":433,"column":35}},"120":{"start":{"line":434,"column":8},"end":{"line":434,"column":41}},"121":{"start":{"line":435,"column":8},"end":{"line":435,"column":53}},"122":{"start":{"line":439,"column":8},"end":{"line":446,"column":9}},"123":{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},"124":{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},"125":{"start":{"line":442,"column":20},"end":{"line":442,"column":45}},"126":{"start":{"line":443,"column":20},"end":{"line":443,"column":47}},"127":{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},"128":{"start":{"line":453,"column":31},"end":{"line":453,"column":52}},"129":{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},"130":{"start":{"line":455,"column":16},"end":{"line":455,"column":48}},"131":{"start":{"line":457,"column":16},"end":{"line":457,"column":48}},"132":{"start":{"line":459,"column":12},"end":{"line":459,"column":48}},"133":{"start":{"line":460,"column":12},"end":{"line":460,"column":32}},"134":{"start":{"line":463,"column":26},"end":{"line":463,"column":62}},"135":{"start":{"line":464,"column":12},"end":{"line":464,"column":44}},"136":{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},"137":{"start":{"line":466,"column":16},"end":{"line":466,"column":43}},"138":{"start":{"line":468,"column":16},"end":{"line":468,"column":43}},"139":{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},"140":{"start":{"line":471,"column":16},"end":{"line":471,"column":41}},"141":{"start":{"line":473,"column":12},"end":{"line":473,"column":27}},"142":{"start":{"line":478,"column":8},"end":{"line":478,"column":34}},"143":{"start":{"line":479,"column":8},"end":{"line":479,"column":47}},"144":{"start":{"line":483,"column":8},"end":{"line":483,"column":46}},"145":{"start":{"line":487,"column":8},"end":{"line":487,"column":37}},"146":{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},"147":{"start":{"line":497,"column":23},"end":{"line":497,"column":56}},"148":{"start":{"line":498,"column":12},"end":{"line":498,"column":30}},"149":{"start":{"line":499,"column":12},"end":{"line":499,"column":24}},"150":{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},"151":{"start":{"line":501,"column":12},"end":{"line":501,"column":25}},"152":{"start":{"line":504,"column":24},"end":{"line":504,"column":106}},"153":{"start":{"line":504,"column":72},"end":{"line":504,"column":105}},"154":{"start":{"line":505,"column":12},"end":{"line":505,"column":34}},"155":{"start":{"line":510,"column":19},"end":{"line":510,"column":40}},"156":{"start":{"line":511,"column":8},"end":{"line":511,"column":37}},"157":{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},"158":{"start":{"line":513,"column":12},"end":{"line":513,"column":76}},"159":{"start":{"line":513,"column":56},"end":{"line":513,"column":74}},"160":{"start":{"line":515,"column":8},"end":{"line":515,"column":20}},"161":{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},"162":{"start":{"line":520,"column":12},"end":{"line":520,"column":25}},"163":{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},"164":{"start":{"line":522,"column":12},"end":{"line":522,"column":25}},"165":{"start":{"line":525,"column":24},"end":{"line":525,"column":106}},"166":{"start":{"line":525,"column":72},"end":{"line":525,"column":105}},"167":{"start":{"line":526,"column":12},"end":{"line":526,"column":34}},"168":{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},"169":{"start":{"line":532,"column":12},"end":{"line":532,"column":85}},"170":{"start":{"line":532,"column":61},"end":{"line":532,"column":83}},"171":{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},"172":{"start":{"line":559,"column":12},"end":{"line":559,"column":33}},"173":{"start":{"line":561,"column":25},"end":{"line":561,"column":47}},"174":{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},"175":{"start":{"line":564,"column":12},"end":{"line":564,"column":59}},"176":{"start":{"line":565,"column":12},"end":{"line":565,"column":59}},"177":{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},"178":{"start":{"line":569,"column":12},"end":{"line":569,"column":56}},"179":{"start":{"line":570,"column":12},"end":{"line":570,"column":56}},"180":{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},"181":{"start":{"line":572,"column":12},"end":{"line":572,"column":56}},"182":{"start":{"line":575,"column":32},"end":{"line":575,"column":71}},"183":{"start":{"line":576,"column":35},"end":{"line":576,"column":84}},"184":{"start":{"line":577,"column":33},"end":{"line":577,"column":80}},"185":{"start":{"line":579,"column":26},"end":{"line":579,"column":71}},"186":{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},"187":{"start":{"line":581,"column":12},"end":{"line":581,"column":31}},"188":{"start":{"line":584,"column":29},"end":{"line":584,"column":79}},"189":{"start":{"line":585,"column":31},"end":{"line":585,"column":85}},"190":{"start":{"line":586,"column":29},"end":{"line":586,"column":86}},"191":{"start":{"line":587,"column":28},"end":{"line":587,"column":85}},"192":{"start":{"line":588,"column":28},"end":{"line":588,"column":51}},"193":{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},"194":{"start":{"line":590,"column":12},"end":{"line":590,"column":117}},"195":{"start":{"line":592,"column":32},"end":{"line":592,"column":89}},"196":{"start":{"line":593,"column":30},"end":{"line":593,"column":85}},"197":{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},"198":{"start":{"line":595,"column":12},"end":{"line":596,"column":102}},"199":{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},"200":{"start":{"line":598,"column":12},"end":{"line":599,"column":103}},"201":{"start":{"line":604,"column":8},"end":{"line":608,"column":9}},"202":{"start":{"line":604,"column":19},"end":{"line":604,"column":20}},"203":{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},"204":{"start":{"line":606,"column":16},"end":{"line":606,"column":36}},"205":{"start":{"line":609,"column":8},"end":{"line":609,"column":25}},"206":{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},"207":{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},"208":{"start":{"line":615,"column":16},"end":{"line":615,"column":101}},"209":{"start":{"line":617,"column":12},"end":{"line":617,"column":29}},"210":{"start":{"line":619,"column":8},"end":{"line":632,"column":9}},"211":{"start":{"line":621,"column":16},"end":{"line":621,"column":101}},"212":{"start":{"line":623,"column":16},"end":{"line":623,"column":102}},"213":{"start":{"line":625,"column":16},"end":{"line":625,"column":108}},"214":{"start":{"line":627,"column":16},"end":{"line":627,"column":104}},"215":{"start":{"line":629,"column":16},"end":{"line":629,"column":115}},"216":{"start":{"line":631,"column":16},"end":{"line":631,"column":116}},"217":{"start":{"line":633,"column":8},"end":{"line":633,"column":25}},"218":{"start":{"line":637,"column":19},"end":{"line":637,"column":53}},"219":{"start":{"line":638,"column":23},"end":{"line":638,"column":76}},"220":{"start":{"line":639,"column":23},"end":{"line":639,"column":76}},"221":{"start":{"line":640,"column":24},"end":{"line":640,"column":78}},"222":{"start":{"line":641,"column":29},"end":{"line":641,"column":46}},"223":{"start":{"line":642,"column":8},"end":{"line":647,"column":11}},"224":{"start":{"line":643,"column":28},"end":{"line":643,"column":66}},"225":{"start":{"line":644,"column":12},"end":{"line":644,"column":77}},"226":{"start":{"line":646,"column":12},"end":{"line":646,"column":37}},"227":{"start":{"line":648,"column":18},"end":{"line":660,"column":9}},"228":{"start":{"line":649,"column":25},"end":{"line":649,"column":27}},"229":{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},"230":{"start":{"line":651,"column":16},"end":{"line":651,"column":41}},"231":{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},"232":{"start":{"line":653,"column":16},"end":{"line":653,"column":29}},"233":{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},"234":{"start":{"line":657,"column":16},"end":{"line":657,"column":49}},"235":{"start":{"line":658,"column":16},"end":{"line":658,"column":39}},"236":{"start":{"line":661,"column":8},"end":{"line":665,"column":11}},"237":{"start":{"line":662,"column":12},"end":{"line":662,"column":31}},"238":{"start":{"line":663,"column":12},"end":{"line":663,"column":18}},"239":{"start":{"line":664,"column":12},"end":{"line":664,"column":48}},"240":{"start":{"line":666,"column":8},"end":{"line":666,"column":87}},"241":{"start":{"line":675,"column":20},"end":{"line":675,"column":35}},"242":{"start":{"line":677,"column":29},"end":{"line":677,"column":116}},"243":{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},"244":{"start":{"line":679,"column":12},"end":{"line":679,"column":24}},"245":{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},"246":{"start":{"line":682,"column":12},"end":{"line":687,"column":13}},"247":{"start":{"line":683,"column":16},"end":{"line":683,"column":49}},"248":{"start":{"line":685,"column":16},"end":{"line":685,"column":81}},"249":{"start":{"line":686,"column":16},"end":{"line":686,"column":28}},"250":{"start":{"line":688,"column":12},"end":{"line":688,"column":44}},"251":{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},"252":{"start":{"line":690,"column":12},"end":{"line":690,"column":66}},"253":{"start":{"line":692,"column":12},"end":{"line":694,"column":15}},"254":{"start":{"line":693,"column":16},"end":{"line":693,"column":75}},"255":{"start":{"line":699,"column":26},"end":{"line":699,"column":28}},"256":{"start":{"line":700,"column":8},"end":{"line":714,"column":11}},"257":{"start":{"line":701,"column":12},"end":{"line":713,"column":15}},"258":{"start":{"line":702,"column":37},"end":{"line":702,"column":86}},"259":{"start":{"line":703,"column":34},"end":{"line":703,"column":63}},"260":{"start":{"line":704,"column":34},"end":{"line":704,"column":63}},"261":{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},"262":{"start":{"line":706,"column":20},"end":{"line":706,"column":46}},"263":{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},"264":{"start":{"line":709,"column":20},"end":{"line":709,"column":57}},"265":{"start":{"line":711,"column":16},"end":{"line":711,"column":65}},"266":{"start":{"line":712,"column":16},"end":{"line":712,"column":49}},"267":{"start":{"line":715,"column":8},"end":{"line":715,"column":25}},"268":{"start":{"line":719,"column":34},"end":{"line":719,"column":64}},"269":{"start":{"line":720,"column":8},"end":{"line":735,"column":11}},"270":{"start":{"line":721,"column":12},"end":{"line":734,"column":15}},"271":{"start":{"line":722,"column":16},"end":{"line":733,"column":19}},"272":{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},"273":{"start":{"line":724,"column":24},"end":{"line":724,"column":47}},"274":{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},"275":{"start":{"line":727,"column":24},"end":{"line":731,"column":27}},"276":{"start":{"line":728,"column":28},"end":{"line":728,"column":65}},"277":{"start":{"line":729,"column":28},"end":{"line":729,"column":98}},"278":{"start":{"line":730,"column":28},"end":{"line":730,"column":66}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":17}},"loc":{"start":{"line":5,"column":77},"end":{"line":24,"column":1}},"line":5},"1":{"name":"chompSpecialFile","decl":{"start":{"line":212,"column":16},"end":{"line":212,"column":32}},"loc":{"start":{"line":212,"column":43},"end":{"line":218,"column":1}},"line":212},"2":{"name":"(anonymous_2)","decl":{"start":{"line":242,"column":4},"end":{"line":242,"column":5}},"loc":{"start":{"line":242,"column":42},"end":{"line":248,"column":5}},"line":242},"3":{"name":"makeModelFile","decl":{"start":{"line":251,"column":16},"end":{"line":251,"column":29}},"loc":{"start":{"line":251,"column":50},"end":{"line":253,"column":1}},"line":251},"4":{"name":"makeMockModelFile","decl":{"start":{"line":255,"column":9},"end":{"line":255,"column":26}},"loc":{"start":{"line":255,"column":47},"end":{"line":257,"column":1}},"line":255},"5":{"name":"(anonymous_5)","decl":{"start":{"line":256,"column":23},"end":{"line":256,"column":24}},"loc":{"start":{"line":256,"column":29},"end":{"line":256,"column":37}},"line":256},"6":{"name":"(anonymous_6)","decl":{"start":{"line":256,"column":49},"end":{"line":256,"column":50}},"loc":{"start":{"line":256,"column":55},"end":{"line":256,"column":63}},"line":256},"7":{"name":"loadConcatenatedFile","decl":{"start":{"line":259,"column":16},"end":{"line":259,"column":36}},"loc":{"start":{"line":259,"column":70},"end":{"line":281,"column":1}},"line":259},"8":{"name":"createConcatenatedFile","decl":{"start":{"line":283,"column":16},"end":{"line":283,"column":38}},"loc":{"start":{"line":283,"column":54},"end":{"line":290,"column":1}},"line":283},"9":{"name":"(anonymous_9)","decl":{"start":{"line":284,"column":46},"end":{"line":284,"column":47}},"loc":{"start":{"line":284,"column":54},"end":{"line":289,"column":5}},"line":284},"10":{"name":"observeConcatenatedFile","decl":{"start":{"line":292,"column":16},"end":{"line":292,"column":39}},"loc":{"start":{"line":292,"column":55},"end":{"line":299,"column":1}},"line":292},"11":{"name":"(anonymous_11)","decl":{"start":{"line":293,"column":27},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":33},"end":{"line":298,"column":5}},"line":293},"12":{"name":"(anonymous_12)","decl":{"start":{"line":295,"column":32},"end":{"line":295,"column":33}},"loc":{"start":{"line":296,"column":12},"end":{"line":296,"column":53}},"line":296},"13":{"name":"(anonymous_13)","decl":{"start":{"line":305,"column":4},"end":{"line":305,"column":5}},"loc":{"start":{"line":305,"column":22},"end":{"line":320,"column":5}},"line":305},"14":{"name":"(anonymous_14)","decl":{"start":{"line":322,"column":4},"end":{"line":322,"column":5}},"loc":{"start":{"line":322,"column":34},"end":{"line":327,"column":5}},"line":322},"15":{"name":"(anonymous_15)","decl":{"start":{"line":329,"column":4},"end":{"line":329,"column":5}},"loc":{"start":{"line":329,"column":31},"end":{"line":331,"column":5}},"line":329},"16":{"name":"(anonymous_16)","decl":{"start":{"line":333,"column":4},"end":{"line":333,"column":5}},"loc":{"start":{"line":333,"column":17},"end":{"line":356,"column":5}},"line":333},"17":{"name":"(anonymous_17)","decl":{"start":{"line":337,"column":66},"end":{"line":337,"column":67}},"loc":{"start":{"line":338,"column":12},"end":{"line":354,"column":35}},"line":338},"18":{"name":"(anonymous_18)","decl":{"start":{"line":338,"column":32},"end":{"line":338,"column":33}},"loc":{"start":{"line":338,"column":50},"end":{"line":354,"column":13}},"line":338},"19":{"name":"(anonymous_19)","decl":{"start":{"line":339,"column":29},"end":{"line":339,"column":30}},"loc":{"start":{"line":339,"column":48},"end":{"line":339,"column":89}},"line":339},"20":{"name":"(anonymous_20)","decl":{"start":{"line":340,"column":29},"end":{"line":340,"column":30}},"loc":{"start":{"line":340,"column":47},"end":{"line":353,"column":21}},"line":340},"21":{"name":"(anonymous_21)","decl":{"start":{"line":375,"column":4},"end":{"line":375,"column":5}},"loc":{"start":{"line":375,"column":23},"end":{"line":413,"column":5}},"line":375},"22":{"name":"(anonymous_22)","decl":{"start":{"line":415,"column":4},"end":{"line":415,"column":5}},"loc":{"start":{"line":415,"column":33},"end":{"line":428,"column":5}},"line":415},"23":{"name":"(anonymous_23)","decl":{"start":{"line":430,"column":4},"end":{"line":430,"column":5}},"loc":{"start":{"line":430,"column":17},"end":{"line":436,"column":5}},"line":430},"24":{"name":"(anonymous_24)","decl":{"start":{"line":438,"column":4},"end":{"line":438,"column":5}},"loc":{"start":{"line":438,"column":25},"end":{"line":448,"column":5}},"line":438},"25":{"name":"(anonymous_25)","decl":{"start":{"line":450,"column":4},"end":{"line":450,"column":5}},"loc":{"start":{"line":450,"column":43},"end":{"line":475,"column":5}},"line":450},"26":{"name":"(anonymous_26)","decl":{"start":{"line":477,"column":4},"end":{"line":477,"column":5}},"loc":{"start":{"line":477,"column":34},"end":{"line":480,"column":5}},"line":477},"27":{"name":"(anonymous_27)","decl":{"start":{"line":482,"column":4},"end":{"line":482,"column":5}},"loc":{"start":{"line":482,"column":23},"end":{"line":484,"column":5}},"line":482},"28":{"name":"(anonymous_28)","decl":{"start":{"line":486,"column":4},"end":{"line":486,"column":5}},"loc":{"start":{"line":486,"column":22},"end":{"line":488,"column":5}},"line":486},"29":{"name":"(anonymous_29)","decl":{"start":{"line":495,"column":4},"end":{"line":495,"column":5}},"loc":{"start":{"line":495,"column":25},"end":{"line":507,"column":5}},"line":495},"30":{"name":"(anonymous_30)","decl":{"start":{"line":504,"column":59},"end":{"line":504,"column":60}},"loc":{"start":{"line":504,"column":72},"end":{"line":504,"column":105}},"line":504},"31":{"name":"(anonymous_31)","decl":{"start":{"line":509,"column":4},"end":{"line":509,"column":5}},"loc":{"start":{"line":509,"column":33},"end":{"line":516,"column":5}},"line":509},"32":{"name":"(anonymous_32)","decl":{"start":{"line":513,"column":44},"end":{"line":513,"column":45}},"loc":{"start":{"line":513,"column":56},"end":{"line":513,"column":74}},"line":513},"33":{"name":"(anonymous_33)","decl":{"start":{"line":518,"column":4},"end":{"line":518,"column":5}},"loc":{"start":{"line":518,"column":36},"end":{"line":528,"column":5}},"line":518},"34":{"name":"(anonymous_34)","decl":{"start":{"line":525,"column":59},"end":{"line":525,"column":60}},"loc":{"start":{"line":525,"column":72},"end":{"line":525,"column":105}},"line":525},"35":{"name":"(anonymous_35)","decl":{"start":{"line":530,"column":4},"end":{"line":530,"column":5}},"loc":{"start":{"line":530,"column":24},"end":{"line":534,"column":5}},"line":530},"36":{"name":"(anonymous_36)","decl":{"start":{"line":532,"column":49},"end":{"line":532,"column":50}},"loc":{"start":{"line":532,"column":61},"end":{"line":532,"column":83}},"line":532},"37":{"name":"(anonymous_37)","decl":{"start":{"line":536,"column":4},"end":{"line":536,"column":5}},"loc":{"start":{"line":536,"column":39},"end":{"line":601,"column":5}},"line":536},"38":{"name":"(anonymous_38)","decl":{"start":{"line":603,"column":4},"end":{"line":603,"column":5}},"loc":{"start":{"line":603,"column":46},"end":{"line":610,"column":5}},"line":603},"39":{"name":"(anonymous_39)","decl":{"start":{"line":612,"column":4},"end":{"line":612,"column":5}},"loc":{"start":{"line":612,"column":49},"end":{"line":634,"column":5}},"line":612},"40":{"name":"(anonymous_40)","decl":{"start":{"line":636,"column":4},"end":{"line":636,"column":5}},"loc":{"start":{"line":636,"column":24},"end":{"line":667,"column":5}},"line":636},"41":{"name":"(anonymous_41)","decl":{"start":{"line":642,"column":29},"end":{"line":642,"column":30}},"loc":{"start":{"line":642,"column":35},"end":{"line":647,"column":9}},"line":642},"42":{"name":"(anonymous_42)","decl":{"start":{"line":648,"column":18},"end":{"line":648,"column":19}},"loc":{"start":{"line":648,"column":24},"end":{"line":660,"column":9}},"line":648},"43":{"name":"(anonymous_43)","decl":{"start":{"line":661,"column":20},"end":{"line":661,"column":21}},"loc":{"start":{"line":661,"column":27},"end":{"line":665,"column":9}},"line":661},"44":{"name":"(anonymous_44)","decl":{"start":{"line":666,"column":72},"end":{"line":666,"column":73}},"loc":{"start":{"line":666,"column":76},"end":{"line":666,"column":78}},"line":666},"45":{"name":"(anonymous_45)","decl":{"start":{"line":669,"column":4},"end":{"line":669,"column":5}},"loc":{"start":{"line":669,"column":32},"end":{"line":696,"column":5}},"line":669},"46":{"name":"(anonymous_46)","decl":{"start":{"line":692,"column":58},"end":{"line":692,"column":59}},"loc":{"start":{"line":692,"column":68},"end":{"line":694,"column":13}},"line":692},"47":{"name":"(anonymous_47)","decl":{"start":{"line":698,"column":4},"end":{"line":698,"column":5}},"loc":{"start":{"line":698,"column":27},"end":{"line":716,"column":5}},"line":698},"48":{"name":"(anonymous_48)","decl":{"start":{"line":700,"column":38},"end":{"line":700,"column":39}},"loc":{"start":{"line":700,"column":68},"end":{"line":714,"column":9}},"line":700},"49":{"name":"(anonymous_49)","decl":{"start":{"line":701,"column":32},"end":{"line":701,"column":33}},"loc":{"start":{"line":701,"column":53},"end":{"line":713,"column":13}},"line":701},"50":{"name":"(anonymous_50)","decl":{"start":{"line":718,"column":4},"end":{"line":718,"column":5}},"loc":{"start":{"line":718,"column":31},"end":{"line":737,"column":5}},"line":718},"51":{"name":"(anonymous_51)","decl":{"start":{"line":720,"column":38},"end":{"line":720,"column":39}},"loc":{"start":{"line":720,"column":70},"end":{"line":735,"column":9}},"line":720},"52":{"name":"(anonymous_52)","decl":{"start":{"line":721,"column":50},"end":{"line":721,"column":51}},"loc":{"start":{"line":721,"column":82},"end":{"line":734,"column":13}},"line":721},"53":{"name":"(anonymous_53)","decl":{"start":{"line":722,"column":54},"end":{"line":722,"column":55}},"loc":{"start":{"line":722,"column":83},"end":{"line":733,"column":17}},"line":722},"54":{"name":"(anonymous_54)","decl":{"start":{"line":727,"column":97},"end":{"line":727,"column":98}},"loc":{"start":{"line":727,"column":107},"end":{"line":731,"column":25}},"line":727}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},{"start":{},"end":{}}],"line":6},"1":{"loc":{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},"type":"if","locations":[{"start":{"line":11,"column":4},"end":{"line":14,"column":5}},{"start":{},"end":{}}],"line":11},"2":{"loc":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},{"start":{"line":215,"column":11},"end":{"line":217,"column":5}}],"line":213},"3":{"loc":{"start":{"line":245,"column":24},"end":{"line":245,"column":38}},"type":"binary-expr","locations":[{"start":{"line":245,"column":24},"end":{"line":245,"column":32}},{"start":{"line":245,"column":36},"end":{"line":245,"column":38}}],"line":245},"4":{"loc":{"start":{"line":252,"column":73},"end":{"line":252,"column":87}},"type":"binary-expr","locations":[{"start":{"line":252,"column":73},"end":{"line":252,"column":81}},{"start":{"line":252,"column":85},"end":{"line":252,"column":87}}],"line":252},"5":{"loc":{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},"type":"if","locations":[{"start":{"line":260,"column":4},"end":{"line":280,"column":5}},{"start":{"line":274,"column":11},"end":{"line":280,"column":5}}],"line":260},"6":{"loc":{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},"type":"if","locations":[{"start":{"line":264,"column":12},"end":{"line":266,"column":13}},{"start":{},"end":{}}],"line":264},"7":{"loc":{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},"type":"if","locations":[{"start":{"line":269,"column":8},"end":{"line":273,"column":9}},{"start":{"line":271,"column":15},"end":{"line":273,"column":9}}],"line":269},"8":{"loc":{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},"type":"if","locations":[{"start":{"line":275,"column":8},"end":{"line":279,"column":9}},{"start":{"line":277,"column":15},"end":{"line":279,"column":9}}],"line":275},"9":{"loc":{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},"type":"if","locations":[{"start":{"line":323,"column":8},"end":{"line":325,"column":9}},{"start":{},"end":{}}],"line":323},"10":{"loc":{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},"type":"if","locations":[{"start":{"line":342,"column":24},"end":{"line":352,"column":25}},{"start":{"line":346,"column":31},"end":{"line":352,"column":25}}],"line":342},"11":{"loc":{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},"type":"if","locations":[{"start":{"line":346,"column":31},"end":{"line":352,"column":25}},{"start":{},"end":{}}],"line":346},"12":{"loc":{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},"type":"if","locations":[{"start":{"line":349,"column":28},"end":{"line":351,"column":29}},{"start":{},"end":{}}],"line":349},"13":{"loc":{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":376,"column":8},"end":{"line":412,"column":9}},{"start":{"line":378,"column":15},"end":{"line":412,"column":9}}],"line":376},"14":{"loc":{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":15},"end":{"line":412,"column":9}},{"start":{"line":380,"column":15},"end":{"line":412,"column":9}}],"line":378},"15":{"loc":{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":380,"column":15},"end":{"line":412,"column":9}},{"start":{"line":382,"column":15},"end":{"line":412,"column":9}}],"line":380},"16":{"loc":{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":382,"column":15},"end":{"line":412,"column":9}},{"start":{"line":384,"column":15},"end":{"line":412,"column":9}}],"line":382},"17":{"loc":{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":384,"column":15},"end":{"line":412,"column":9}},{"start":{"line":386,"column":15},"end":{"line":412,"column":9}}],"line":384},"18":{"loc":{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":386,"column":15},"end":{"line":412,"column":9}},{"start":{"line":388,"column":15},"end":{"line":412,"column":9}}],"line":386},"19":{"loc":{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":388,"column":15},"end":{"line":412,"column":9}},{"start":{"line":390,"column":15},"end":{"line":412,"column":9}}],"line":388},"20":{"loc":{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":390,"column":15},"end":{"line":412,"column":9}},{"start":{"line":392,"column":15},"end":{"line":412,"column":9}}],"line":390},"21":{"loc":{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":392,"column":15},"end":{"line":412,"column":9}},{"start":{"line":394,"column":15},"end":{"line":412,"column":9}}],"line":392},"22":{"loc":{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":394,"column":15},"end":{"line":412,"column":9}},{"start":{"line":396,"column":15},"end":{"line":412,"column":9}}],"line":394},"23":{"loc":{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":396,"column":15},"end":{"line":412,"column":9}},{"start":{"line":398,"column":15},"end":{"line":412,"column":9}}],"line":396},"24":{"loc":{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":398,"column":15},"end":{"line":412,"column":9}},{"start":{"line":400,"column":15},"end":{"line":412,"column":9}}],"line":398},"25":{"loc":{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":400,"column":15},"end":{"line":412,"column":9}},{"start":{"line":402,"column":15},"end":{"line":412,"column":9}}],"line":400},"26":{"loc":{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":402,"column":15},"end":{"line":412,"column":9}},{"start":{"line":404,"column":15},"end":{"line":412,"column":9}}],"line":402},"27":{"loc":{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":404,"column":15},"end":{"line":412,"column":9}},{"start":{"line":406,"column":15},"end":{"line":412,"column":9}}],"line":404},"28":{"loc":{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},"type":"if","locations":[{"start":{"line":406,"column":15},"end":{"line":412,"column":9}},{"start":{"line":410,"column":15},"end":{"line":412,"column":9}}],"line":406},"29":{"loc":{"start":{"line":406,"column":19},"end":{"line":408,"column":48}},"type":"binary-expr","locations":[{"start":{"line":406,"column":19},"end":{"line":406,"column":48}},{"start":{"line":407,"column":19},"end":{"line":407,"column":48}},{"start":{"line":408,"column":19},"end":{"line":408,"column":48}}],"line":406},"30":{"loc":{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},"type":"if","locations":[{"start":{"line":419,"column":12},"end":{"line":421,"column":13}},{"start":{},"end":{}}],"line":419},"31":{"loc":{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},"type":"if","locations":[{"start":{"line":423,"column":8},"end":{"line":427,"column":9}},{"start":{},"end":{}}],"line":423},"32":{"loc":{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},"type":"if","locations":[{"start":{"line":440,"column":12},"end":{"line":445,"column":13}},{"start":{},"end":{}}],"line":440},"33":{"loc":{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},"type":"if","locations":[{"start":{"line":441,"column":16},"end":{"line":444,"column":17}},{"start":{},"end":{}}],"line":441},"34":{"loc":{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},"type":"if","locations":[{"start":{"line":451,"column":8},"end":{"line":474,"column":9}},{"start":{"line":461,"column":15},"end":{"line":474,"column":9}}],"line":451},"35":{"loc":{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},"type":"if","locations":[{"start":{"line":454,"column":12},"end":{"line":458,"column":13}},{"start":{"line":456,"column":19},"end":{"line":458,"column":13}}],"line":454},"36":{"loc":{"start":{"line":459,"column":32},"end":{"line":459,"column":46}},"type":"binary-expr","locations":[{"start":{"line":459,"column":32},"end":{"line":459,"column":40}},{"start":{"line":459,"column":44},"end":{"line":459,"column":46}}],"line":459},"37":{"loc":{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},"type":"if","locations":[{"start":{"line":465,"column":12},"end":{"line":469,"column":13}},{"start":{"line":467,"column":19},"end":{"line":469,"column":13}}],"line":465},"38":{"loc":{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},"type":"if","locations":[{"start":{"line":470,"column":12},"end":{"line":472,"column":13}},{"start":{},"end":{}}],"line":470},"39":{"loc":{"start":{"line":478,"column":19},"end":{"line":478,"column":33}},"type":"binary-expr","locations":[{"start":{"line":478,"column":19},"end":{"line":478,"column":27}},{"start":{"line":478,"column":31},"end":{"line":478,"column":33}}],"line":478},"40":{"loc":{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},"type":"if","locations":[{"start":{"line":496,"column":8},"end":{"line":506,"column":9}},{"start":{"line":500,"column":15},"end":{"line":506,"column":9}}],"line":496},"41":{"loc":{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},"type":"if","locations":[{"start":{"line":500,"column":15},"end":{"line":506,"column":9}},{"start":{"line":502,"column":15},"end":{"line":506,"column":9}}],"line":500},"42":{"loc":{"start":{"line":505,"column":19},"end":{"line":505,"column":33}},"type":"binary-expr","locations":[{"start":{"line":505,"column":19},"end":{"line":505,"column":24}},{"start":{"line":505,"column":28},"end":{"line":505,"column":33}}],"line":505},"43":{"loc":{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},"type":"if","locations":[{"start":{"line":512,"column":8},"end":{"line":514,"column":9}},{"start":{},"end":{}}],"line":512},"44":{"loc":{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},"type":"if","locations":[{"start":{"line":519,"column":8},"end":{"line":527,"column":9}},{"start":{"line":521,"column":15},"end":{"line":527,"column":9}}],"line":519},"45":{"loc":{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},"type":"if","locations":[{"start":{"line":521,"column":15},"end":{"line":527,"column":9}},{"start":{"line":523,"column":15},"end":{"line":527,"column":9}}],"line":521},"46":{"loc":{"start":{"line":526,"column":19},"end":{"line":526,"column":33}},"type":"binary-expr","locations":[{"start":{"line":526,"column":19},"end":{"line":526,"column":24}},{"start":{"line":526,"column":28},"end":{"line":526,"column":33}}],"line":526},"47":{"loc":{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},"type":"if","locations":[{"start":{"line":531,"column":8},"end":{"line":533,"column":9}},{"start":{},"end":{}}],"line":531},"48":{"loc":{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},"type":"if","locations":[{"start":{"line":558,"column":8},"end":{"line":560,"column":9}},{"start":{},"end":{}}],"line":558},"49":{"loc":{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},"type":"if","locations":[{"start":{"line":563,"column":8},"end":{"line":566,"column":9}},{"start":{},"end":{}}],"line":563},"50":{"loc":{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},"type":"if","locations":[{"start":{"line":568,"column":8},"end":{"line":573,"column":9}},{"start":{"line":571,"column":15},"end":{"line":573,"column":9}}],"line":568},"51":{"loc":{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},"type":"if","locations":[{"start":{"line":571,"column":15},"end":{"line":573,"column":9}},{"start":{},"end":{}}],"line":571},"52":{"loc":{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},"type":"if","locations":[{"start":{"line":580,"column":8},"end":{"line":582,"column":9}},{"start":{},"end":{}}],"line":580},"53":{"loc":{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},"type":"if","locations":[{"start":{"line":589,"column":8},"end":{"line":591,"column":9}},{"start":{},"end":{}}],"line":589},"54":{"loc":{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},"type":"if","locations":[{"start":{"line":594,"column":8},"end":{"line":600,"column":9}},{"start":{"line":597,"column":15},"end":{"line":600,"column":9}}],"line":594},"55":{"loc":{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},"type":"if","locations":[{"start":{"line":597,"column":15},"end":{"line":600,"column":9}},{"start":{},"end":{}}],"line":597},"56":{"loc":{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},"type":"if","locations":[{"start":{"line":605,"column":12},"end":{"line":607,"column":13}},{"start":{},"end":{}}],"line":605},"57":{"loc":{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},"type":"if","locations":[{"start":{"line":613,"column":8},"end":{"line":618,"column":9}},{"start":{},"end":{}}],"line":613},"58":{"loc":{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},"type":"if","locations":[{"start":{"line":614,"column":12},"end":{"line":616,"column":13}},{"start":{},"end":{}}],"line":614},"59":{"loc":{"start":{"line":619,"column":8},"end":{"line":632,"column":9}},"type":"switch","locations":[{"start":{"line":620,"column":12},"end":{"line":621,"column":101}},{"start":{"line":622,"column":12},"end":{"line":623,"column":102}},{"start":{"line":624,"column":12},"end":{"line":625,"column":108}},{"start":{"line":626,"column":12},"end":{"line":627,"column":104}},{"start":{"line":628,"column":12},"end":{"line":629,"column":115}},{"start":{"line":630,"column":12},"end":{"line":631,"column":116}}],"line":619},"60":{"loc":{"start":{"line":644,"column":24},"end":{"line":644,"column":76}},"type":"cond-expr","locations":[{"start":{"line":644,"column":50},"end":{"line":644,"column":64}},{"start":{"line":644,"column":67},"end":{"line":644,"column":76}}],"line":644},"61":{"loc":{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},"type":"if","locations":[{"start":{"line":650,"column":12},"end":{"line":654,"column":13}},{"start":{"line":652,"column":19},"end":{"line":654,"column":13}}],"line":650},"62":{"loc":{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},"type":"if","locations":[{"start":{"line":652,"column":19},"end":{"line":654,"column":13}},{"start":{},"end":{}}],"line":652},"63":{"loc":{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},"type":"if","locations":[{"start":{"line":656,"column":12},"end":{"line":659,"column":13}},{"start":{},"end":{}}],"line":656},"64":{"loc":{"start":{"line":669,"column":20},"end":{"line":669,"column":30}},"type":"default-arg","locations":[{"start":{"line":669,"column":26},"end":{"line":669,"column":30}}],"line":669},"65":{"loc":{"start":{"line":677,"column":29},"end":{"line":677,"column":116}},"type":"binary-expr","locations":[{"start":{"line":677,"column":29},"end":{"line":677,"column":69}},{"start":{"line":677,"column":73},"end":{"line":677,"column":116}}],"line":677},"66":{"loc":{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},"type":"if","locations":[{"start":{"line":678,"column":8},"end":{"line":680,"column":9}},{"start":{},"end":{}}],"line":678},"67":{"loc":{"start":{"line":678,"column":12},"end":{"line":678,"column":35}},"type":"binary-expr","locations":[{"start":{"line":678,"column":12},"end":{"line":678,"column":25}},{"start":{"line":678,"column":29},"end":{"line":678,"column":35}}],"line":678},"68":{"loc":{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},"type":"if","locations":[{"start":{"line":681,"column":8},"end":{"line":695,"column":9}},{"start":{"line":689,"column":15},"end":{"line":695,"column":9}}],"line":681},"69":{"loc":{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},"type":"if","locations":[{"start":{"line":689,"column":15},"end":{"line":695,"column":9}},{"start":{"line":691,"column":15},"end":{"line":695,"column":9}}],"line":689},"70":{"loc":{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},"type":"if","locations":[{"start":{"line":705,"column":16},"end":{"line":707,"column":17}},{"start":{},"end":{}}],"line":705},"71":{"loc":{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},"type":"if","locations":[{"start":{"line":708,"column":16},"end":{"line":710,"column":17}},{"start":{},"end":{}}],"line":708},"72":{"loc":{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},"type":"if","locations":[{"start":{"line":723,"column":20},"end":{"line":725,"column":21}},{"start":{},"end":{}}],"line":723},"73":{"loc":{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},"type":"if","locations":[{"start":{"line":726,"column":20},"end":{"line":732,"column":21}},{"start":{},"end":{}}],"line":726}},"s":{"0":4,"1":36,"2":4,"3":36,"4":36,"5":36,"6":32,"7":32,"8":36,"9":4,"10":4,"11":4,"12":4,"13":0,"14":0,"15":0,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0},"f":{"0":36,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0},"b":{"0":[4,32],"1":[32,4],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0,0,0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"8c401a753260f6ac5861238a400d75519fd2d624"} -,"/home/runner/work/blockpy/blockpy/src/footer.js": {"path":"/home/runner/work/blockpy/blockpy/src/footer.js","statementMap":{"0":{"start":{"line":2,"column":25},"end":{"line":41,"column":1}}},"fnMap":{},"branchMap":{},"s":{"0":4},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"18c646073e7730ee72412b5a56f41f9eea4429a9"} -,"/home/runner/work/blockpy/blockpy/src/history.js": {"path":"/home/runner/work/blockpy/blockpy/src/history.js","statementMap":{"0":{"start":{"line":3,"column":36},"end":{"line":31,"column":1}},"1":{"start":{"line":43,"column":8},"end":{"line":43,"column":25}},"2":{"start":{"line":44,"column":8},"end":{"line":44,"column":23}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":30}},"4":{"start":{"line":46,"column":8},"end":{"line":46,"column":26}},"5":{"start":{"line":47,"column":8},"end":{"line":47,"column":29}},"6":{"start":{"line":51,"column":8},"end":{"line":51,"column":31}},"7":{"start":{"line":52,"column":8},"end":{"line":52,"column":29}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":63}},"9":{"start":{"line":54,"column":21},"end":{"line":54,"column":22}},"10":{"start":{"line":55,"column":8},"end":{"line":73,"column":15}},"11":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"12":{"start":{"line":63,"column":33},"end":{"line":63,"column":88}},"13":{"start":{"line":64,"column":32},"end":{"line":64,"column":93}},"14":{"start":{"line":65,"column":31},"end":{"line":65,"column":63}},"15":{"start":{"line":66,"column":29},"end":{"line":66,"column":89}},"16":{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},"17":{"start":{"line":68,"column":20},"end":{"line":68,"column":49}},"18":{"start":{"line":69,"column":20},"end":{"line":69,"column":48}},"19":{"start":{"line":70,"column":20},"end":{"line":70,"column":32}},"20":{"start":{"line":72,"column":16},"end":{"line":72,"column":45}},"21":{"start":{"line":74,"column":8},"end":{"line":74,"column":49}},"22":{"start":{"line":75,"column":8},"end":{"line":77,"column":11}},"23":{"start":{"line":76,"column":12},"end":{"line":76,"column":32}},"24":{"start":{"line":81,"column":8},"end":{"line":81,"column":29}},"25":{"start":{"line":82,"column":8},"end":{"line":82,"column":28}},"26":{"start":{"line":86,"column":24},"end":{"line":86,"column":57}},"27":{"start":{"line":87,"column":8},"end":{"line":87,"column":52}},"28":{"start":{"line":88,"column":8},"end":{"line":88,"column":28}},"29":{"start":{"line":92,"column":24},"end":{"line":92,"column":57}},"30":{"start":{"line":93,"column":8},"end":{"line":93,"column":75}},"31":{"start":{"line":94,"column":8},"end":{"line":94,"column":28}},"32":{"start":{"line":98,"column":8},"end":{"line":98,"column":52}},"33":{"start":{"line":99,"column":8},"end":{"line":99,"column":28}},"34":{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},"35":{"start":{"line":104,"column":28},"end":{"line":104,"column":61}},"36":{"start":{"line":105,"column":12},"end":{"line":105,"column":93}},"37":{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},"38":{"start":{"line":111,"column":28},"end":{"line":111,"column":61}},"39":{"start":{"line":112,"column":23},"end":{"line":112,"column":57}},"40":{"start":{"line":113,"column":12},"end":{"line":113,"column":67}},"41":{"start":{"line":114,"column":12},"end":{"line":114,"column":64}},"42":{"start":{"line":119,"column":8},"end":{"line":121,"column":72}},"43":{"start":{"line":126,"column":26},"end":{"line":134,"column":1}},"44":{"start":{"line":136,"column":19},"end":{"line":141,"column":1}},"45":{"start":{"line":142,"column":17},"end":{"line":146,"column":1}},"46":{"start":{"line":149,"column":4},"end":{"line":151,"column":53}},"47":{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},"48":{"start":{"line":169,"column":8},"end":{"line":169,"column":32}},"49":{"start":{"line":171,"column":14},"end":{"line":171,"column":24}},"50":{"start":{"line":172,"column":15},"end":{"line":172,"column":49}},"51":{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},"52":{"start":{"line":174,"column":8},"end":{"line":174,"column":53}},"53":{"start":{"line":176,"column":21},"end":{"line":176,"column":44}},"54":{"start":{"line":177,"column":23},"end":{"line":177,"column":50}},"55":{"start":{"line":178,"column":19},"end":{"line":178,"column":66}},"56":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"57":{"start":{"line":180,"column":12},"end":{"line":180,"column":59}},"58":{"start":{"line":182,"column":12},"end":{"line":182,"column":85}},"59":{"start":{"line":193,"column":0},"end":{"line":204,"column":2}},"60":{"start":{"line":194,"column":17},"end":{"line":194,"column":44}},"61":{"start":{"line":195,"column":15},"end":{"line":195,"column":33}},"62":{"start":{"line":196,"column":4},"end":{"line":203,"column":7}},"63":{"start":{"line":197,"column":8},"end":{"line":201,"column":15}},"64":{"start":{"line":198,"column":31},"end":{"line":198,"column":61}},"65":{"start":{"line":199,"column":27},"end":{"line":199,"column":80}},"66":{"start":{"line":200,"column":12},"end":{"line":200,"column":42}},"67":{"start":{"line":202,"column":8},"end":{"line":202,"column":57}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":27},"end":{"line":48,"column":5}},"line":42},"1":{"name":"(anonymous_1)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":18},"end":{"line":78,"column":5}},"line":50},"2":{"name":"(anonymous_2)","decl":{"start":{"line":56,"column":20},"end":{"line":56,"column":21}},"loc":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"line":57},"3":{"name":"(anonymous_3)","decl":{"start":{"line":62,"column":21},"end":{"line":62,"column":22}},"loc":{"start":{"line":62,"column":39},"end":{"line":73,"column":13}},"line":62},"4":{"name":"(anonymous_4)","decl":{"start":{"line":75,"column":29},"end":{"line":75,"column":30}},"loc":{"start":{"line":75,"column":38},"end":{"line":77,"column":9}},"line":75},"5":{"name":"(anonymous_5)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":18},"end":{"line":83,"column":5}},"line":80},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":4},"end":{"line":85,"column":5}},"loc":{"start":{"line":85,"column":19},"end":{"line":89,"column":5}},"line":85},"7":{"name":"(anonymous_7)","decl":{"start":{"line":91,"column":4},"end":{"line":91,"column":5}},"loc":{"start":{"line":91,"column":15},"end":{"line":95,"column":5}},"line":91},"8":{"name":"(anonymous_8)","decl":{"start":{"line":97,"column":4},"end":{"line":97,"column":5}},"loc":{"start":{"line":97,"column":23},"end":{"line":100,"column":5}},"line":97},"9":{"name":"(anonymous_9)","decl":{"start":{"line":102,"column":4},"end":{"line":102,"column":5}},"loc":{"start":{"line":102,"column":19},"end":{"line":107,"column":5}},"line":102},"10":{"name":"(anonymous_10)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":5}},"loc":{"start":{"line":109,"column":10},"end":{"line":116,"column":5}},"line":109},"11":{"name":"(anonymous_11)","decl":{"start":{"line":118,"column":4},"end":{"line":118,"column":5}},"loc":{"start":{"line":118,"column":23},"end":{"line":122,"column":5}},"line":118},"12":{"name":"isSameDay","decl":{"start":{"line":148,"column":9},"end":{"line":148,"column":18}},"loc":{"start":{"line":148,"column":34},"end":{"line":152,"column":1}},"line":148},"13":{"name":"prettyPrintDateTime","decl":{"start":{"line":160,"column":9},"end":{"line":160,"column":28}},"loc":{"start":{"line":160,"column":41},"end":{"line":185,"column":1}},"line":160},"14":{"name":"(anonymous_14)","decl":{"start":{"line":193,"column":38},"end":{"line":193,"column":39}},"loc":{"start":{"line":193,"column":49},"end":{"line":204,"column":1}},"line":193},"15":{"name":"(anonymous_15)","decl":{"start":{"line":196,"column":43},"end":{"line":196,"column":44}},"loc":{"start":{"line":196,"column":59},"end":{"line":203,"column":5}},"line":196},"16":{"name":"(anonymous_16)","decl":{"start":{"line":197,"column":37},"end":{"line":197,"column":38}},"loc":{"start":{"line":197,"column":63},"end":{"line":201,"column":9}},"line":197},"17":{"name":"(anonymous_17)","decl":{"start":{"line":202,"column":42},"end":{"line":202,"column":43}},"loc":{"start":{"line":202,"column":53},"end":{"line":202,"column":55}},"line":202}},"branchMap":{"0":{"loc":{"start":{"line":57,"column":16},"end":{"line":60,"column":101}},"type":"binary-expr","locations":[{"start":{"line":57,"column":16},"end":{"line":57,"column":59}},{"start":{"line":58,"column":20},"end":{"line":58,"column":50}},{"start":{"line":59,"column":20},"end":{"line":59,"column":55}},{"start":{"line":60,"column":21},"end":{"line":60,"column":57}},{"start":{"line":60,"column":61},"end":{"line":60,"column":100}}],"line":57},"1":{"loc":{"start":{"line":63,"column":33},"end":{"line":63,"column":88}},"type":"binary-expr","locations":[{"start":{"line":63,"column":33},"end":{"line":63,"column":68}},{"start":{"line":63,"column":72},"end":{"line":63,"column":88}}],"line":63},"2":{"loc":{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},"type":"if","locations":[{"start":{"line":67,"column":16},"end":{"line":71,"column":17}},{"start":{},"end":{}}],"line":67},"3":{"loc":{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":106,"column":9}},{"start":{},"end":{}}],"line":103},"4":{"loc":{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":115,"column":9}},{"start":{},"end":{}}],"line":110},"5":{"loc":{"start":{"line":119,"column":16},"end":{"line":121,"column":70}},"type":"binary-expr","locations":[{"start":{"line":119,"column":17},"end":{"line":119,"column":49}},{"start":{"line":120,"column":17},"end":{"line":120,"column":51}},{"start":{"line":121,"column":16},"end":{"line":121,"column":70}}],"line":119},"6":{"loc":{"start":{"line":149,"column":11},"end":{"line":151,"column":52}},"type":"binary-expr","locations":[{"start":{"line":149,"column":11},"end":{"line":149,"column":47}},{"start":{"line":150,"column":8},"end":{"line":150,"column":46}},{"start":{"line":151,"column":8},"end":{"line":151,"column":52}}],"line":149},"7":{"loc":{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":170,"column":5}},{"start":{},"end":{}}],"line":168},"8":{"loc":{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},"type":"if","locations":[{"start":{"line":173,"column":4},"end":{"line":184,"column":5}},{"start":{"line":175,"column":11},"end":{"line":184,"column":5}}],"line":173},"9":{"loc":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"type":"if","locations":[{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},{"start":{"line":181,"column":15},"end":{"line":183,"column":9}}],"line":179}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":4,"44":4,"45":4,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":4,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"b":{"0":[0,0,0,0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0,0],"7":[0,0],"8":[0,0],"9":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"b9921880890fc3b63982930ad1ae54b9804e1582"} -,"/home/runner/work/blockpy/blockpy/src/interface.js": {"path":"/home/runner/work/blockpy/blockpy/src/interface.js","statementMap":{"0":{"start":{"line":25,"column":41},"end":{"line":29,"column":1}},"1":{"start":{"line":38,"column":27},"end":{"line":38,"column":31}},"2":{"start":{"line":39,"column":4},"end":{"line":48,"column":7}},"3":{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},"4":{"start":{"line":41,"column":12},"end":{"line":41,"column":43}},"5":{"start":{"line":43,"column":8},"end":{"line":47,"column":16}},"6":{"start":{"line":44,"column":12},"end":{"line":46,"column":15}},"7":{"start":{"line":45,"column":16},"end":{"line":45,"column":50}},"8":{"start":{"line":50,"column":4},"end":{"line":73,"column":7}},"9":{"start":{"line":51,"column":8},"end":{"line":52,"column":69}},"10":{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},"11":{"start":{"line":55,"column":12},"end":{"line":65,"column":15}},"12":{"start":{"line":56,"column":30},"end":{"line":56,"column":105}},"13":{"start":{"line":57,"column":16},"end":{"line":58,"column":62}},"14":{"start":{"line":59,"column":16},"end":{"line":59,"column":31}},"15":{"start":{"line":61,"column":16},"end":{"line":62,"column":56}},"16":{"start":{"line":63,"column":16},"end":{"line":63,"column":47}},"17":{"start":{"line":64,"column":16},"end":{"line":64,"column":72}},"18":{"start":{"line":67,"column":12},"end":{"line":71,"column":15}},"19":{"start":{"line":68,"column":16},"end":{"line":69,"column":77}},"20":{"start":{"line":70,"column":16},"end":{"line":70,"column":48}},"21":{"start":{"line":79,"column":4},"end":{"line":233,"column":6}}},"fnMap":{"0":{"name":"makeExtraInterfaceSubscriptions","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":47}},"loc":{"start":{"line":36,"column":61},"end":{"line":74,"column":1}},"line":36},"1":{"name":"(anonymous_1)","decl":{"start":{"line":39,"column":44},"end":{"line":39,"column":45}},"loc":{"start":{"line":39,"column":50},"end":{"line":48,"column":5}},"line":39},"2":{"name":"(anonymous_2)","decl":{"start":{"line":43,"column":38},"end":{"line":43,"column":39}},"loc":{"start":{"line":43,"column":44},"end":{"line":47,"column":9}},"line":43},"3":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":86},"end":{"line":44,"column":87}},"loc":{"start":{"line":44,"column":100},"end":{"line":46,"column":13}},"line":44},"4":{"name":"(anonymous_4)","decl":{"start":{"line":50,"column":39},"end":{"line":50,"column":40}},"loc":{"start":{"line":50,"column":57},"end":{"line":73,"column":5}},"line":50},"5":{"name":"(anonymous_5)","decl":{"start":{"line":55,"column":80},"end":{"line":55,"column":81}},"loc":{"start":{"line":55,"column":87},"end":{"line":60,"column":13}},"line":55},"6":{"name":"(anonymous_6)","decl":{"start":{"line":60,"column":20},"end":{"line":60,"column":21}},"loc":{"start":{"line":60,"column":26},"end":{"line":65,"column":13}},"line":60},"7":{"name":"(anonymous_7)","decl":{"start":{"line":67,"column":43},"end":{"line":67,"column":44}},"loc":{"start":{"line":67,"column":49},"end":{"line":71,"column":13}},"line":67},"8":{"name":"makeInterface","decl":{"start":{"line":78,"column":16},"end":{"line":78,"column":29}},"loc":{"start":{"line":78,"column":36},"end":{"line":234,"column":1}},"line":78}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},"type":"if","locations":[{"start":{"line":40,"column":8},"end":{"line":42,"column":9}},{"start":{},"end":{}}],"line":40},"1":{"loc":{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":72,"column":9}},{"start":{"line":66,"column":15},"end":{"line":72,"column":9}}],"line":53}},"s":{"0":4,"1":3,"2":3,"3":1,"4":0,"5":1,"6":1,"7":0,"8":3,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"f":{"0":3,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,1],"1":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2d3615dfd1d2baaabdbe9e9c36fa3e7c79810053"} -,"/home/runner/work/blockpy/blockpy/src/server.js": {"path":"/home/runner/work/blockpy/blockpy/src/server.js","statementMap":{"0":{"start":{"line":8,"column":25},"end":{"line":14,"column":1}},"1":{"start":{"line":25,"column":4},"end":{"line":25,"column":21}},"2":{"start":{"line":28,"column":4},"end":{"line":28,"column":46}},"3":{"start":{"line":31,"column":4},"end":{"line":31,"column":54}},"4":{"start":{"line":34,"column":4},"end":{"line":37,"column":6}},"5":{"start":{"line":38,"column":4},"end":{"line":41,"column":6}},"6":{"start":{"line":43,"column":4},"end":{"line":43,"column":28}},"7":{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":21}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":24}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":30}},"11":{"start":{"line":51,"column":4},"end":{"line":51,"column":30}},"12":{"start":{"line":52,"column":4},"end":{"line":52,"column":31}},"13":{"start":{"line":53,"column":4},"end":{"line":53,"column":23}},"14":{"start":{"line":55,"column":4},"end":{"line":55,"column":28}},"15":{"start":{"line":62,"column":0},"end":{"line":82,"column":2}},"16":{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},"17":{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},"18":{"start":{"line":65,"column":24},"end":{"line":65,"column":46}},"19":{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},"20":{"start":{"line":67,"column":30},"end":{"line":70,"column":18}},"21":{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},"22":{"start":{"line":72,"column":20},"end":{"line":72,"column":83}},"23":{"start":{"line":74,"column":20},"end":{"line":74,"column":80}},"24":{"start":{"line":76,"column":16},"end":{"line":76,"column":52}},"25":{"start":{"line":79,"column":12},"end":{"line":79,"column":48}},"26":{"start":{"line":88,"column":0},"end":{"line":112,"column":2}},"27":{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},"28":{"start":{"line":90,"column":19},"end":{"line":90,"column":65}},"29":{"start":{"line":91,"column":8},"end":{"line":92,"column":66}},"30":{"start":{"line":94,"column":4},"end":{"line":99,"column":7}},"31":{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},"32":{"start":{"line":96,"column":23},"end":{"line":96,"column":74}},"33":{"start":{"line":97,"column":12},"end":{"line":97,"column":80}},"34":{"start":{"line":100,"column":17},"end":{"line":100,"column":21}},"35":{"start":{"line":101,"column":4},"end":{"line":111,"column":7}},"36":{"start":{"line":102,"column":8},"end":{"line":110,"column":30}},"37":{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},"38":{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},"39":{"start":{"line":105,"column":31},"end":{"line":105,"column":71}},"40":{"start":{"line":106,"column":30},"end":{"line":106,"column":51}},"41":{"start":{"line":107,"column":20},"end":{"line":107,"column":75}},"42":{"start":{"line":114,"column":0},"end":{"line":118,"column":2}},"43":{"start":{"line":115,"column":4},"end":{"line":116,"column":94}},"44":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"45":{"start":{"line":117,"column":4},"end":{"line":117,"column":40}},"46":{"start":{"line":123,"column":0},"end":{"line":134,"column":2}},"47":{"start":{"line":124,"column":16},"end":{"line":124,"column":31}},"48":{"start":{"line":125,"column":4},"end":{"line":125,"column":68}},"49":{"start":{"line":126,"column":4},"end":{"line":126,"column":70}},"50":{"start":{"line":127,"column":4},"end":{"line":127,"column":72}},"51":{"start":{"line":128,"column":4},"end":{"line":128,"column":76}},"52":{"start":{"line":129,"column":4},"end":{"line":129,"column":83}},"53":{"start":{"line":130,"column":4},"end":{"line":130,"column":84}},"54":{"start":{"line":131,"column":4},"end":{"line":131,"column":98}},"55":{"start":{"line":132,"column":4},"end":{"line":132,"column":100}},"56":{"start":{"line":133,"column":4},"end":{"line":133,"column":104}},"57":{"start":{"line":136,"column":0},"end":{"line":145,"column":2}},"58":{"start":{"line":137,"column":4},"end":{"line":139,"column":6}},"59":{"start":{"line":138,"column":8},"end":{"line":138,"column":70}},"60":{"start":{"line":140,"column":4},"end":{"line":142,"column":6}},"61":{"start":{"line":141,"column":8},"end":{"line":141,"column":72}},"62":{"start":{"line":156,"column":0},"end":{"line":158,"column":2}},"63":{"start":{"line":160,"column":0},"end":{"line":172,"column":2}},"64":{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},"65":{"start":{"line":162,"column":8},"end":{"line":162,"column":29}},"66":{"start":{"line":164,"column":24},"end":{"line":164,"column":67}},"67":{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},"68":{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},"69":{"start":{"line":167,"column":12},"end":{"line":167,"column":41}},"70":{"start":{"line":169,"column":8},"end":{"line":169,"column":75}},"71":{"start":{"line":171,"column":4},"end":{"line":171,"column":27}},"72":{"start":{"line":178,"column":0},"end":{"line":199,"column":2}},"73":{"start":{"line":179,"column":21},"end":{"line":179,"column":47}},"74":{"start":{"line":180,"column":15},"end":{"line":180,"column":35}},"75":{"start":{"line":181,"column":21},"end":{"line":181,"column":47}},"76":{"start":{"line":182,"column":18},"end":{"line":182,"column":41}},"77":{"start":{"line":183,"column":26},"end":{"line":183,"column":55}},"78":{"start":{"line":184,"column":14},"end":{"line":184,"column":24}},"79":{"start":{"line":185,"column":23},"end":{"line":185,"column":36}},"80":{"start":{"line":186,"column":17},"end":{"line":197,"column":5}},"81":{"start":{"line":198,"column":4},"end":{"line":198,"column":18}},"82":{"start":{"line":207,"column":0},"end":{"line":212,"column":2}},"83":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"84":{"start":{"line":209,"column":8},"end":{"line":209,"column":49}},"85":{"start":{"line":210,"column":8},"end":{"line":210,"column":68}},"86":{"start":{"line":218,"column":0},"end":{"line":238,"column":2}},"87":{"start":{"line":219,"column":4},"end":{"line":219,"column":31}},"88":{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},"89":{"start":{"line":221,"column":8},"end":{"line":221,"column":65}},"90":{"start":{"line":222,"column":8},"end":{"line":222,"column":45}},"91":{"start":{"line":224,"column":4},"end":{"line":237,"column":5}},"92":{"start":{"line":226,"column":12},"end":{"line":226,"column":57}},"93":{"start":{"line":227,"column":12},"end":{"line":227,"column":18}},"94":{"start":{"line":229,"column":12},"end":{"line":229,"column":57}},"95":{"start":{"line":230,"column":12},"end":{"line":230,"column":18}},"96":{"start":{"line":232,"column":12},"end":{"line":232,"column":57}},"97":{"start":{"line":233,"column":12},"end":{"line":233,"column":18}},"98":{"start":{"line":235,"column":12},"end":{"line":235,"column":58}},"99":{"start":{"line":236,"column":12},"end":{"line":236,"column":18}},"100":{"start":{"line":243,"column":0},"end":{"line":248,"column":2}},"101":{"start":{"line":244,"column":4},"end":{"line":244,"column":31}},"102":{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},"103":{"start":{"line":246,"column":8},"end":{"line":246,"column":30}},"104":{"start":{"line":250,"column":0},"end":{"line":264,"column":2}},"105":{"start":{"line":252,"column":17},"end":{"line":252,"column":41}},"106":{"start":{"line":253,"column":14},"end":{"line":253,"column":40}},"107":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"108":{"start":{"line":255,"column":8},"end":{"line":255,"column":71}},"109":{"start":{"line":258,"column":14},"end":{"line":258,"column":34}},"110":{"start":{"line":259,"column":16},"end":{"line":259,"column":46}},"111":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"112":{"start":{"line":261,"column":8},"end":{"line":261,"column":36}},"113":{"start":{"line":262,"column":8},"end":{"line":262,"column":67}},"114":{"start":{"line":266,"column":0},"end":{"line":273,"column":2}},"115":{"start":{"line":267,"column":14},"end":{"line":267,"column":34}},"116":{"start":{"line":268,"column":16},"end":{"line":268,"column":46}},"117":{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},"118":{"start":{"line":270,"column":8},"end":{"line":270,"column":40}},"119":{"start":{"line":271,"column":8},"end":{"line":271,"column":67}},"120":{"start":{"line":276,"column":0},"end":{"line":308,"column":2}},"121":{"start":{"line":278,"column":22},"end":{"line":302,"column":5}},"122":{"start":{"line":280,"column":8},"end":{"line":280,"column":42}},"123":{"start":{"line":281,"column":8},"end":{"line":301,"column":15}},"124":{"start":{"line":283,"column":16},"end":{"line":283,"column":50}},"125":{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},"126":{"start":{"line":285,"column":20},"end":{"line":285,"column":64}},"127":{"start":{"line":287,"column":20},"end":{"line":287,"column":44}},"128":{"start":{"line":288,"column":20},"end":{"line":288,"column":83}},"129":{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},"130":{"start":{"line":291,"column":20},"end":{"line":291,"column":39}},"131":{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},"132":{"start":{"line":294,"column":20},"end":{"line":294,"column":46}},"133":{"start":{"line":299,"column":16},"end":{"line":299,"column":86}},"134":{"start":{"line":300,"column":16},"end":{"line":300,"column":83}},"135":{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},"136":{"start":{"line":304,"column":8},"end":{"line":304,"column":22}},"137":{"start":{"line":306,"column":8},"end":{"line":306,"column":39}},"138":{"start":{"line":321,"column":0},"end":{"line":369,"column":2}},"139":{"start":{"line":322,"column":16},"end":{"line":322,"column":35}},"140":{"start":{"line":323,"column":18},"end":{"line":362,"column":5}},"141":{"start":{"line":325,"column":8},"end":{"line":325,"column":54}},"142":{"start":{"line":326,"column":19},"end":{"line":326,"column":46}},"143":{"start":{"line":328,"column":8},"end":{"line":361,"column":32}},"144":{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},"145":{"start":{"line":331,"column":20},"end":{"line":331,"column":43}},"146":{"start":{"line":333,"column":37},"end":{"line":333,"column":64}},"147":{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},"148":{"start":{"line":335,"column":24},"end":{"line":335,"column":51}},"149":{"start":{"line":337,"column":20},"end":{"line":337,"column":64}},"150":{"start":{"line":340,"column":20},"end":{"line":340,"column":83}},"151":{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},"152":{"start":{"line":343,"column":41},"end":{"line":343,"column":68}},"153":{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},"154":{"start":{"line":345,"column":28},"end":{"line":345,"column":55}},"155":{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},"156":{"start":{"line":348,"column":28},"end":{"line":348,"column":54}},"157":{"start":{"line":354,"column":16},"end":{"line":354,"column":86}},"158":{"start":{"line":356,"column":33},"end":{"line":356,"column":60}},"159":{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},"160":{"start":{"line":358,"column":20},"end":{"line":358,"column":93}},"161":{"start":{"line":363,"column":4},"end":{"line":363,"column":37}},"162":{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},"163":{"start":{"line":365,"column":8},"end":{"line":365,"column":25}},"164":{"start":{"line":367,"column":8},"end":{"line":367,"column":56}},"165":{"start":{"line":371,"column":0},"end":{"line":400,"column":2}},"166":{"start":{"line":372,"column":4},"end":{"line":372,"column":31}},"167":{"start":{"line":373,"column":4},"end":{"line":399,"column":11}},"168":{"start":{"line":380,"column":12},"end":{"line":380,"column":31}},"169":{"start":{"line":381,"column":12},"end":{"line":381,"column":56}},"170":{"start":{"line":382,"column":12},"end":{"line":382,"column":30}},"171":{"start":{"line":383,"column":12},"end":{"line":383,"column":35}},"172":{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},"173":{"start":{"line":387,"column":16},"end":{"line":387,"column":35}},"174":{"start":{"line":388,"column":16},"end":{"line":388,"column":84}},"175":{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},"176":{"start":{"line":390,"column":20},"end":{"line":390,"column":56}},"177":{"start":{"line":393,"column":16},"end":{"line":397,"column":36}},"178":{"start":{"line":394,"column":20},"end":{"line":394,"column":39}},"179":{"start":{"line":395,"column":20},"end":{"line":395,"column":90}},"180":{"start":{"line":396,"column":20},"end":{"line":396,"column":102}},"181":{"start":{"line":403,"column":0},"end":{"line":424,"column":2}},"182":{"start":{"line":404,"column":16},"end":{"line":404,"column":31}},"183":{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},"184":{"start":{"line":406,"column":19},"end":{"line":406,"column":42}},"185":{"start":{"line":407,"column":8},"end":{"line":407,"column":46}},"186":{"start":{"line":408,"column":8},"end":{"line":420,"column":30}},"187":{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},"188":{"start":{"line":411,"column":35},"end":{"line":411,"column":75}},"189":{"start":{"line":413,"column":35},"end":{"line":413,"column":106}},"190":{"start":{"line":414,"column":35},"end":{"line":414,"column":107}},"191":{"start":{"line":418,"column":31},"end":{"line":418,"column":97}},"192":{"start":{"line":419,"column":31},"end":{"line":419,"column":73}},"193":{"start":{"line":422,"column":8},"end":{"line":422,"column":62}},"194":{"start":{"line":426,"column":0},"end":{"line":448,"column":2}},"195":{"start":{"line":427,"column":16},"end":{"line":427,"column":31}},"196":{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},"197":{"start":{"line":429,"column":19},"end":{"line":429,"column":42}},"198":{"start":{"line":430,"column":8},"end":{"line":430,"column":51}},"199":{"start":{"line":431,"column":8},"end":{"line":431,"column":55}},"200":{"start":{"line":432,"column":8},"end":{"line":432,"column":51}},"201":{"start":{"line":433,"column":8},"end":{"line":433,"column":45}},"202":{"start":{"line":434,"column":8},"end":{"line":434,"column":51}},"203":{"start":{"line":435,"column":8},"end":{"line":435,"column":56}},"204":{"start":{"line":436,"column":8},"end":{"line":436,"column":47}},"205":{"start":{"line":437,"column":8},"end":{"line":437,"column":57}},"206":{"start":{"line":439,"column":8},"end":{"line":444,"column":30}},"207":{"start":{"line":442,"column":31},"end":{"line":442,"column":96}},"208":{"start":{"line":443,"column":31},"end":{"line":443,"column":73}},"209":{"start":{"line":446,"column":8},"end":{"line":446,"column":108}},"210":{"start":{"line":450,"column":0},"end":{"line":460,"column":2}},"211":{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},"212":{"start":{"line":452,"column":20},"end":{"line":452,"column":35}},"213":{"start":{"line":453,"column":19},"end":{"line":453,"column":42}},"214":{"start":{"line":454,"column":8},"end":{"line":458,"column":30}},"215":{"start":{"line":456,"column":31},"end":{"line":456,"column":83}},"216":{"start":{"line":457,"column":31},"end":{"line":457,"column":73}},"217":{"start":{"line":462,"column":0},"end":{"line":472,"column":2}},"218":{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},"219":{"start":{"line":464,"column":20},"end":{"line":464,"column":35}},"220":{"start":{"line":465,"column":19},"end":{"line":465,"column":42}},"221":{"start":{"line":466,"column":8},"end":{"line":470,"column":30}},"222":{"start":{"line":468,"column":31},"end":{"line":468,"column":100}},"223":{"start":{"line":469,"column":31},"end":{"line":469,"column":73}},"224":{"start":{"line":474,"column":0},"end":{"line":499,"column":2}},"225":{"start":{"line":475,"column":16},"end":{"line":475,"column":31}},"226":{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},"227":{"start":{"line":477,"column":19},"end":{"line":477,"column":42}},"228":{"start":{"line":478,"column":8},"end":{"line":478,"column":38}},"229":{"start":{"line":479,"column":8},"end":{"line":479,"column":38}},"230":{"start":{"line":480,"column":8},"end":{"line":480,"column":36}},"231":{"start":{"line":481,"column":8},"end":{"line":481,"column":36}},"232":{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},"233":{"start":{"line":483,"column":12},"end":{"line":483,"column":34}},"234":{"start":{"line":485,"column":17},"end":{"line":485,"column":90}},"235":{"start":{"line":485,"column":55},"end":{"line":485,"column":72}},"236":{"start":{"line":486,"column":8},"end":{"line":495,"column":79}},"237":{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},"238":{"start":{"line":490,"column":42},"end":{"line":490,"column":102}},"239":{"start":{"line":492,"column":42},"end":{"line":492,"column":103}},"240":{"start":{"line":494,"column":38},"end":{"line":494,"column":80}},"241":{"start":{"line":497,"column":8},"end":{"line":497,"column":100}},"242":{"start":{"line":501,"column":0},"end":{"line":518,"column":2}},"243":{"start":{"line":502,"column":16},"end":{"line":502,"column":31}},"244":{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},"245":{"start":{"line":504,"column":19},"end":{"line":504,"column":42}},"246":{"start":{"line":505,"column":8},"end":{"line":505,"column":38}},"247":{"start":{"line":506,"column":8},"end":{"line":506,"column":38}},"248":{"start":{"line":507,"column":8},"end":{"line":507,"column":36}},"249":{"start":{"line":508,"column":17},"end":{"line":508,"column":90}},"250":{"start":{"line":508,"column":55},"end":{"line":508,"column":72}},"251":{"start":{"line":509,"column":8},"end":{"line":514,"column":97}},"252":{"start":{"line":512,"column":38},"end":{"line":512,"column":101}},"253":{"start":{"line":513,"column":38},"end":{"line":513,"column":80}},"254":{"start":{"line":516,"column":8},"end":{"line":516,"column":100}},"255":{"start":{"line":520,"column":0},"end":{"line":538,"column":2}},"256":{"start":{"line":521,"column":16},"end":{"line":521,"column":31}},"257":{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},"258":{"start":{"line":523,"column":19},"end":{"line":523,"column":42}},"259":{"start":{"line":524,"column":8},"end":{"line":524,"column":38}},"260":{"start":{"line":525,"column":8},"end":{"line":525,"column":38}},"261":{"start":{"line":526,"column":8},"end":{"line":526,"column":44}},"262":{"start":{"line":527,"column":8},"end":{"line":527,"column":44}},"263":{"start":{"line":528,"column":17},"end":{"line":528,"column":90}},"264":{"start":{"line":528,"column":55},"end":{"line":528,"column":72}},"265":{"start":{"line":529,"column":8},"end":{"line":534,"column":79}},"266":{"start":{"line":532,"column":38},"end":{"line":532,"column":99}},"267":{"start":{"line":533,"column":38},"end":{"line":533,"column":80}},"268":{"start":{"line":536,"column":8},"end":{"line":536,"column":100}},"269":{"start":{"line":540,"column":0},"end":{"line":559,"column":2}},"270":{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},"271":{"start":{"line":542,"column":8},"end":{"line":542,"column":56}},"272":{"start":{"line":543,"column":8},"end":{"line":543,"column":15}},"273":{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},"274":{"start":{"line":546,"column":19},"end":{"line":546,"column":42}},"275":{"start":{"line":547,"column":8},"end":{"line":547,"column":40}},"276":{"start":{"line":548,"column":8},"end":{"line":548,"column":36}},"277":{"start":{"line":549,"column":8},"end":{"line":549,"column":30}},"278":{"start":{"line":550,"column":8},"end":{"line":550,"column":34}},"279":{"start":{"line":551,"column":8},"end":{"line":551,"column":38}},"280":{"start":{"line":552,"column":8},"end":{"line":552,"column":55}},"281":{"start":{"line":554,"column":8},"end":{"line":555,"column":11}},"282":{"start":{"line":557,"column":8},"end":{"line":557,"column":56}},"283":{"start":{"line":561,"column":0},"end":{"line":576,"column":2}},"284":{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},"285":{"start":{"line":563,"column":8},"end":{"line":563,"column":57}},"286":{"start":{"line":564,"column":8},"end":{"line":564,"column":15}},"287":{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},"288":{"start":{"line":567,"column":19},"end":{"line":567,"column":42}},"289":{"start":{"line":568,"column":8},"end":{"line":568,"column":38}},"290":{"start":{"line":569,"column":8},"end":{"line":569,"column":30}},"291":{"start":{"line":570,"column":8},"end":{"line":570,"column":56}},"292":{"start":{"line":572,"column":8},"end":{"line":572,"column":69}},"293":{"start":{"line":574,"column":8},"end":{"line":574,"column":57}},"294":{"start":{"line":578,"column":0},"end":{"line":597,"column":2}},"295":{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},"296":{"start":{"line":580,"column":8},"end":{"line":580,"column":70}},"297":{"start":{"line":581,"column":8},"end":{"line":581,"column":15}},"298":{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},"299":{"start":{"line":584,"column":19},"end":{"line":584,"column":42}},"300":{"start":{"line":585,"column":8},"end":{"line":585,"column":35}},"301":{"start":{"line":586,"column":31},"end":{"line":590,"column":9}},"302":{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},"303":{"start":{"line":588,"column":16},"end":{"line":588,"column":71}},"304":{"start":{"line":591,"column":8},"end":{"line":595,"column":30}},"305":{"start":{"line":593,"column":31},"end":{"line":593,"column":94}},"306":{"start":{"line":594,"column":31},"end":{"line":594,"column":73}},"307":{"start":{"line":604,"column":0},"end":{"line":628,"column":2}},"308":{"start":{"line":605,"column":16},"end":{"line":605,"column":31}},"309":{"start":{"line":606,"column":17},"end":{"line":606,"column":21}},"310":{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},"311":{"start":{"line":608,"column":19},"end":{"line":608,"column":42}},"312":{"start":{"line":609,"column":8},"end":{"line":609,"column":36}},"313":{"start":{"line":610,"column":8},"end":{"line":610,"column":28}},"314":{"start":{"line":611,"column":8},"end":{"line":623,"column":30}},"315":{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},"316":{"start":{"line":614,"column":35},"end":{"line":614,"column":59}},"317":{"start":{"line":616,"column":35},"end":{"line":616,"column":67}},"318":{"start":{"line":617,"column":35},"end":{"line":617,"column":102}},"319":{"start":{"line":621,"column":31},"end":{"line":621,"column":85}},"320":{"start":{"line":622,"column":31},"end":{"line":622,"column":58}},"321":{"start":{"line":625,"column":8},"end":{"line":625,"column":51}},"322":{"start":{"line":626,"column":8},"end":{"line":626,"column":96}},"323":{"start":{"line":630,"column":0},"end":{"line":648,"column":2}},"324":{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},"325":{"start":{"line":632,"column":8},"end":{"line":632,"column":33}},"326":{"start":{"line":634,"column":16},"end":{"line":634,"column":31}},"327":{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},"328":{"start":{"line":636,"column":8},"end":{"line":636,"column":56}},"329":{"start":{"line":637,"column":8},"end":{"line":637,"column":15}},"330":{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},"331":{"start":{"line":640,"column":19},"end":{"line":640,"column":42}},"332":{"start":{"line":641,"column":8},"end":{"line":641,"column":36}},"333":{"start":{"line":642,"column":8},"end":{"line":642,"column":32}},"334":{"start":{"line":643,"column":8},"end":{"line":643,"column":55}},"335":{"start":{"line":644,"column":8},"end":{"line":644,"column":107}},"336":{"start":{"line":646,"column":8},"end":{"line":646,"column":63}},"337":{"start":{"line":650,"column":0},"end":{"line":654,"column":2}},"338":{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},"339":{"start":{"line":652,"column":8},"end":{"line":652,"column":49}},"340":{"start":{"line":656,"column":0},"end":{"line":686,"column":2}},"341":{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},"342":{"start":{"line":658,"column":8},"end":{"line":658,"column":64}},"343":{"start":{"line":659,"column":8},"end":{"line":659,"column":15}},"344":{"start":{"line":661,"column":19},"end":{"line":661,"column":66}},"345":{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},"346":{"start":{"line":663,"column":19},"end":{"line":663,"column":42}},"347":{"start":{"line":664,"column":8},"end":{"line":664,"column":30}},"348":{"start":{"line":665,"column":8},"end":{"line":665,"column":34}},"349":{"start":{"line":666,"column":8},"end":{"line":666,"column":49}},"350":{"start":{"line":667,"column":8},"end":{"line":667,"column":43}},"351":{"start":{"line":668,"column":8},"end":{"line":684,"column":11}},"352":{"start":{"line":669,"column":12},"end":{"line":669,"column":36}},"353":{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},"354":{"start":{"line":671,"column":16},"end":{"line":671,"column":29}},"355":{"start":{"line":673,"column":12},"end":{"line":683,"column":31}},"356":{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},"357":{"start":{"line":676,"column":36},"end":{"line":676,"column":90}},"358":{"start":{"line":678,"column":36},"end":{"line":678,"column":109}},"359":{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},"360":{"start":{"line":681,"column":36},"end":{"line":681,"column":68}},"361":{"start":{"line":688,"column":0},"end":{"line":694,"column":2}},"362":{"start":{"line":689,"column":16},"end":{"line":689,"column":31}},"363":{"start":{"line":690,"column":17},"end":{"line":690,"column":21}},"364":{"start":{"line":691,"column":15},"end":{"line":691,"column":38}},"365":{"start":{"line":692,"column":4},"end":{"line":692,"column":38}},"366":{"start":{"line":693,"column":4},"end":{"line":693,"column":60}}},"fnMap":{"0":{"name":"BlockPyServer","decl":{"start":{"line":24,"column":16},"end":{"line":24,"column":29}},"loc":{"start":{"line":24,"column":36},"end":{"line":56,"column":1}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":34},"end":{"line":62,"column":35}},"loc":{"start":{"line":62,"column":54},"end":{"line":82,"column":1}},"line":62},"2":{"name":"(anonymous_2)","decl":{"start":{"line":88,"column":38},"end":{"line":88,"column":39}},"loc":{"start":{"line":88,"column":50},"end":{"line":112,"column":1}},"line":88},"3":{"name":"(anonymous_3)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":47},"end":{"line":99,"column":5}},"line":94},"4":{"name":"(anonymous_4)","decl":{"start":{"line":101,"column":36},"end":{"line":101,"column":37}},"loc":{"start":{"line":101,"column":56},"end":{"line":111,"column":5}},"line":101},"5":{"name":"pushAnyQueued","decl":{"start":{"line":102,"column":18},"end":{"line":102,"column":31}},"loc":{"start":{"line":102,"column":42},"end":{"line":110,"column":9}},"line":102},"6":{"name":"(anonymous_6)","decl":{"start":{"line":114,"column":49},"end":{"line":114,"column":50}},"loc":{"start":{"line":114,"column":76},"end":{"line":118,"column":1}},"line":114},"7":{"name":"(anonymous_7)","decl":{"start":{"line":115,"column":20},"end":{"line":115,"column":21}},"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"line":116},"8":{"name":"(anonymous_8)","decl":{"start":{"line":123,"column":46},"end":{"line":123,"column":47}},"loc":{"start":{"line":123,"column":58},"end":{"line":134,"column":1}},"line":123},"9":{"name":"(anonymous_9)","decl":{"start":{"line":136,"column":42},"end":{"line":136,"column":43}},"loc":{"start":{"line":136,"column":53},"end":{"line":145,"column":1}},"line":136},"10":{"name":"(anonymous_10)","decl":{"start":{"line":137,"column":20},"end":{"line":137,"column":21}},"loc":{"start":{"line":137,"column":26},"end":{"line":139,"column":5}},"line":137},"11":{"name":"(anonymous_11)","decl":{"start":{"line":140,"column":21},"end":{"line":140,"column":22}},"loc":{"start":{"line":140,"column":27},"end":{"line":142,"column":5}},"line":140},"12":{"name":"(anonymous_12)","decl":{"start":{"line":156,"column":48},"end":{"line":156,"column":49}},"loc":{"start":{"line":156,"column":60},"end":{"line":158,"column":1}},"line":156},"13":{"name":"(anonymous_13)","decl":{"start":{"line":160,"column":42},"end":{"line":160,"column":43}},"loc":{"start":{"line":160,"column":68},"end":{"line":172,"column":1}},"line":160},"14":{"name":"(anonymous_14)","decl":{"start":{"line":178,"column":43},"end":{"line":178,"column":44}},"loc":{"start":{"line":178,"column":55},"end":{"line":199,"column":1}},"line":178},"15":{"name":"(anonymous_15)","decl":{"start":{"line":207,"column":36},"end":{"line":207,"column":37}},"loc":{"start":{"line":207,"column":73},"end":{"line":212,"column":1}},"line":207},"16":{"name":"(anonymous_16)","decl":{"start":{"line":218,"column":38},"end":{"line":218,"column":39}},"loc":{"start":{"line":218,"column":57},"end":{"line":238,"column":1}},"line":218},"17":{"name":"(anonymous_17)","decl":{"start":{"line":243,"column":38},"end":{"line":243,"column":39}},"loc":{"start":{"line":243,"column":50},"end":{"line":248,"column":1}},"line":243},"18":{"name":"(anonymous_18)","decl":{"start":{"line":250,"column":39},"end":{"line":250,"column":40}},"loc":{"start":{"line":250,"column":62},"end":{"line":264,"column":1}},"line":250},"19":{"name":"(anonymous_19)","decl":{"start":{"line":266,"column":39},"end":{"line":266,"column":40}},"loc":{"start":{"line":266,"column":62},"end":{"line":273,"column":1}},"line":266},"20":{"name":"(anonymous_20)","decl":{"start":{"line":276,"column":37},"end":{"line":276,"column":38}},"loc":{"start":{"line":276,"column":80},"end":{"line":308,"column":1}},"line":276},"21":{"name":"(anonymous_21)","decl":{"start":{"line":278,"column":22},"end":{"line":278,"column":23}},"loc":{"start":{"line":278,"column":28},"end":{"line":302,"column":5}},"line":278},"22":{"name":"(anonymous_22)","decl":{"start":{"line":282,"column":18},"end":{"line":282,"column":19}},"loc":{"start":{"line":282,"column":32},"end":{"line":296,"column":13}},"line":282},"23":{"name":"(anonymous_23)","decl":{"start":{"line":298,"column":18},"end":{"line":298,"column":19}},"loc":{"start":{"line":298,"column":41},"end":{"line":301,"column":13}},"line":298},"24":{"name":"(anonymous_24)","decl":{"start":{"line":321,"column":43},"end":{"line":321,"column":44}},"loc":{"start":{"line":321,"column":117},"end":{"line":369,"column":1}},"line":321},"25":{"name":"(anonymous_25)","decl":{"start":{"line":323,"column":18},"end":{"line":323,"column":19}},"loc":{"start":{"line":323,"column":24},"end":{"line":362,"column":5}},"line":323},"26":{"name":"(anonymous_26)","decl":{"start":{"line":329,"column":18},"end":{"line":329,"column":19}},"loc":{"start":{"line":329,"column":32},"end":{"line":352,"column":13}},"line":329},"27":{"name":"(anonymous_27)","decl":{"start":{"line":353,"column":18},"end":{"line":353,"column":19}},"loc":{"start":{"line":353,"column":41},"end":{"line":360,"column":13}},"line":353},"28":{"name":"(anonymous_28)","decl":{"start":{"line":371,"column":40},"end":{"line":371,"column":41}},"loc":{"start":{"line":371,"column":112},"end":{"line":400,"column":1}},"line":371},"29":{"name":"(anonymous_29)","decl":{"start":{"line":379,"column":14},"end":{"line":379,"column":15}},"loc":{"start":{"line":379,"column":28},"end":{"line":384,"column":9}},"line":379},"30":{"name":"(anonymous_30)","decl":{"start":{"line":385,"column":14},"end":{"line":385,"column":15}},"loc":{"start":{"line":385,"column":46},"end":{"line":399,"column":9}},"line":385},"31":{"name":"(anonymous_31)","decl":{"start":{"line":393,"column":27},"end":{"line":393,"column":28}},"loc":{"start":{"line":393,"column":33},"end":{"line":397,"column":17}},"line":393},"32":{"name":"(anonymous_32)","decl":{"start":{"line":403,"column":41},"end":{"line":403,"column":42}},"loc":{"start":{"line":403,"column":66},"end":{"line":424,"column":1}},"line":403},"33":{"name":"(anonymous_33)","decl":{"start":{"line":409,"column":27},"end":{"line":409,"column":28}},"loc":{"start":{"line":409,"column":41},"end":{"line":416,"column":28}},"line":409},"34":{"name":"(anonymous_34)","decl":{"start":{"line":417,"column":27},"end":{"line":417,"column":28}},"loc":{"start":{"line":417,"column":59},"end":{"line":420,"column":28}},"line":417},"35":{"name":"(anonymous_35)","decl":{"start":{"line":426,"column":41},"end":{"line":426,"column":42}},"loc":{"start":{"line":426,"column":53},"end":{"line":448,"column":1}},"line":426},"36":{"name":"(anonymous_36)","decl":{"start":{"line":441,"column":27},"end":{"line":441,"column":28}},"loc":{"start":{"line":441,"column":59},"end":{"line":444,"column":28}},"line":441},"37":{"name":"(anonymous_37)","decl":{"start":{"line":450,"column":38},"end":{"line":450,"column":39}},"loc":{"start":{"line":450,"column":58},"end":{"line":460,"column":1}},"line":450},"38":{"name":"(anonymous_38)","decl":{"start":{"line":455,"column":27},"end":{"line":455,"column":28}},"loc":{"start":{"line":455,"column":59},"end":{"line":458,"column":28}},"line":455},"39":{"name":"(anonymous_39)","decl":{"start":{"line":462,"column":44},"end":{"line":462,"column":45}},"loc":{"start":{"line":462,"column":64},"end":{"line":472,"column":1}},"line":462},"40":{"name":"(anonymous_40)","decl":{"start":{"line":467,"column":27},"end":{"line":467,"column":28}},"loc":{"start":{"line":467,"column":59},"end":{"line":470,"column":28}},"line":467},"41":{"name":"(anonymous_41)","decl":{"start":{"line":474,"column":37},"end":{"line":474,"column":38}},"loc":{"start":{"line":474,"column":120},"end":{"line":499,"column":1}},"line":474},"42":{"name":"(anonymous_42)","decl":{"start":{"line":485,"column":45},"end":{"line":485,"column":46}},"loc":{"start":{"line":485,"column":55},"end":{"line":485,"column":72}},"line":485},"43":{"name":"(anonymous_43)","decl":{"start":{"line":488,"column":34},"end":{"line":488,"column":35}},"loc":{"start":{"line":488,"column":66},"end":{"line":495,"column":35}},"line":488},"44":{"name":"(anonymous_44)","decl":{"start":{"line":501,"column":39},"end":{"line":501,"column":40}},"loc":{"start":{"line":501,"column":91},"end":{"line":518,"column":1}},"line":501},"45":{"name":"(anonymous_45)","decl":{"start":{"line":508,"column":45},"end":{"line":508,"column":46}},"loc":{"start":{"line":508,"column":55},"end":{"line":508,"column":72}},"line":508},"46":{"name":"(anonymous_46)","decl":{"start":{"line":511,"column":34},"end":{"line":511,"column":35}},"loc":{"start":{"line":511,"column":66},"end":{"line":514,"column":35}},"line":511},"47":{"name":"(anonymous_47)","decl":{"start":{"line":520,"column":37},"end":{"line":520,"column":38}},"loc":{"start":{"line":520,"column":107},"end":{"line":538,"column":1}},"line":520},"48":{"name":"(anonymous_48)","decl":{"start":{"line":528,"column":45},"end":{"line":528,"column":46}},"loc":{"start":{"line":528,"column":55},"end":{"line":528,"column":72}},"line":528},"49":{"name":"(anonymous_49)","decl":{"start":{"line":531,"column":34},"end":{"line":531,"column":35}},"loc":{"start":{"line":531,"column":66},"end":{"line":534,"column":35}},"line":531},"50":{"name":"(anonymous_50)","decl":{"start":{"line":540,"column":35},"end":{"line":540,"column":36}},"loc":{"start":{"line":540,"column":94},"end":{"line":559,"column":1}},"line":540},"51":{"name":"(anonymous_51)","decl":{"start":{"line":554,"column":45},"end":{"line":554,"column":46}},"loc":{"start":{"line":554,"column":51},"end":{"line":555,"column":9}},"line":554},"52":{"name":"(anonymous_52)","decl":{"start":{"line":561,"column":36},"end":{"line":561,"column":37}},"loc":{"start":{"line":561,"column":64},"end":{"line":576,"column":1}},"line":561},"53":{"name":"(anonymous_53)","decl":{"start":{"line":578,"column":49},"end":{"line":578,"column":50}},"loc":{"start":{"line":578,"column":69},"end":{"line":597,"column":1}},"line":578},"54":{"name":"(anonymous_54)","decl":{"start":{"line":586,"column":31},"end":{"line":586,"column":32}},"loc":{"start":{"line":586,"column":41},"end":{"line":590,"column":9}},"line":586},"55":{"name":"(anonymous_55)","decl":{"start":{"line":592,"column":27},"end":{"line":592,"column":28}},"loc":{"start":{"line":592,"column":59},"end":{"line":595,"column":28}},"line":592},"56":{"name":"(anonymous_56)","decl":{"start":{"line":604,"column":35},"end":{"line":604,"column":36}},"loc":{"start":{"line":604,"column":86},"end":{"line":628,"column":1}},"line":604},"57":{"name":"(anonymous_57)","decl":{"start":{"line":612,"column":27},"end":{"line":612,"column":28}},"loc":{"start":{"line":612,"column":47},"end":{"line":619,"column":28}},"line":612},"58":{"name":"(anonymous_58)","decl":{"start":{"line":620,"column":27},"end":{"line":620,"column":28}},"loc":{"start":{"line":620,"column":65},"end":{"line":623,"column":28}},"line":620},"59":{"name":"(anonymous_59)","decl":{"start":{"line":630,"column":35},"end":{"line":630,"column":36}},"loc":{"start":{"line":630,"column":72},"end":{"line":648,"column":1}},"line":630},"60":{"name":"(anonymous_60)","decl":{"start":{"line":650,"column":44},"end":{"line":650,"column":45}},"loc":{"start":{"line":650,"column":64},"end":{"line":654,"column":1}},"line":650},"61":{"name":"(anonymous_61)","decl":{"start":{"line":656,"column":43},"end":{"line":656,"column":44}},"loc":{"start":{"line":656,"column":98},"end":{"line":686,"column":1}},"line":656},"62":{"name":"(anonymous_62)","decl":{"start":{"line":668,"column":74},"end":{"line":668,"column":75}},"loc":{"start":{"line":668,"column":92},"end":{"line":684,"column":9}},"line":668},"63":{"name":"(anonymous_63)","decl":{"start":{"line":674,"column":28},"end":{"line":674,"column":29}},"loc":{"start":{"line":674,"column":42},"end":{"line":683,"column":29}},"line":674},"64":{"name":"(anonymous_64)","decl":{"start":{"line":688,"column":38},"end":{"line":688,"column":39}},"loc":{"start":{"line":688,"column":61},"end":{"line":694,"column":1}},"line":688}},"branchMap":{"0":{"loc":{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":81,"column":5}},{"start":{},"end":{}}],"line":63},"1":{"loc":{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},"type":"if","locations":[{"start":{"line":64,"column":8},"end":{"line":80,"column":9}},{"start":{"line":78,"column":15},"end":{"line":80,"column":9}}],"line":64},"2":{"loc":{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},"type":"if","locations":[{"start":{"line":66,"column":12},"end":{"line":77,"column":13}},{"start":{},"end":{}}],"line":66},"3":{"loc":{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},"type":"if","locations":[{"start":{"line":71,"column":16},"end":{"line":75,"column":17}},{"start":{"line":73,"column":23},"end":{"line":75,"column":17}}],"line":71},"4":{"loc":{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":93,"column":5}},{"start":{},"end":{}}],"line":89},"5":{"loc":{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},"type":"if","locations":[{"start":{"line":95,"column":8},"end":{"line":98,"column":9}},{"start":{},"end":{}}],"line":95},"6":{"loc":{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},"type":"if","locations":[{"start":{"line":103,"column":12},"end":{"line":109,"column":13}},{"start":{},"end":{}}],"line":103},"7":{"loc":{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},"type":"if","locations":[{"start":{"line":104,"column":16},"end":{"line":108,"column":17}},{"start":{},"end":{}}],"line":104},"8":{"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":86}},"type":"cond-expr","locations":[{"start":{"line":116,"column":45},"end":{"line":116,"column":78}},{"start":{"line":116,"column":81},"end":{"line":116,"column":86}}],"line":116},"9":{"loc":{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},"type":"if","locations":[{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},{"start":{},"end":{}}],"line":161},"10":{"loc":{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":165,"column":4},"end":{"line":170,"column":5}},{"start":{},"end":{}}],"line":165},"11":{"loc":{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},"type":"if","locations":[{"start":{"line":166,"column":8},"end":{"line":168,"column":9}},{"start":{},"end":{}}],"line":166},"12":{"loc":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},{"start":{},"end":{}}],"line":208},"13":{"loc":{"start":{"line":210,"column":53},"end":{"line":210,"column":66}},"type":"binary-expr","locations":[{"start":{"line":210,"column":53},"end":{"line":210,"column":60}},{"start":{"line":210,"column":64},"end":{"line":210,"column":66}}],"line":210},"14":{"loc":{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},"type":"if","locations":[{"start":{"line":220,"column":4},"end":{"line":223,"column":5}},{"start":{},"end":{}}],"line":220},"15":{"loc":{"start":{"line":224,"column":4},"end":{"line":237,"column":5}},"type":"switch","locations":[{"start":{"line":225,"column":8},"end":{"line":227,"column":18}},{"start":{"line":228,"column":8},"end":{"line":230,"column":18}},{"start":{"line":231,"column":8},"end":{"line":233,"column":18}},{"start":{"line":234,"column":8},"end":{"line":236,"column":18}}],"line":224},"16":{"loc":{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},"type":"if","locations":[{"start":{"line":245,"column":4},"end":{"line":247,"column":5}},{"start":{},"end":{}}],"line":245},"17":{"loc":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"type":"if","locations":[{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},{"start":{},"end":{}}],"line":254},"18":{"loc":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"type":"if","locations":[{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},{"start":{},"end":{}}],"line":260},"19":{"loc":{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},"type":"if","locations":[{"start":{"line":269,"column":4},"end":{"line":272,"column":5}},{"start":{},"end":{}}],"line":269},"20":{"loc":{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},"type":"if","locations":[{"start":{"line":284,"column":16},"end":{"line":289,"column":17}},{"start":{"line":286,"column":23},"end":{"line":289,"column":17}}],"line":284},"21":{"loc":{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},"type":"if","locations":[{"start":{"line":290,"column":16},"end":{"line":292,"column":17}},{"start":{},"end":{}}],"line":290},"22":{"loc":{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},"type":"if","locations":[{"start":{"line":293,"column":16},"end":{"line":295,"column":17}},{"start":{},"end":{}}],"line":293},"23":{"loc":{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},"type":"if","locations":[{"start":{"line":303,"column":4},"end":{"line":307,"column":5}},{"start":{"line":305,"column":11},"end":{"line":307,"column":5}}],"line":303},"24":{"loc":{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},"type":"if","locations":[{"start":{"line":330,"column":16},"end":{"line":351,"column":17}},{"start":{"line":338,"column":23},"end":{"line":351,"column":17}}],"line":330},"25":{"loc":{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},"type":"if","locations":[{"start":{"line":334,"column":20},"end":{"line":336,"column":21}},{"start":{},"end":{}}],"line":334},"26":{"loc":{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},"type":"if","locations":[{"start":{"line":341,"column":20},"end":{"line":350,"column":21}},{"start":{},"end":{}}],"line":341},"27":{"loc":{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},"type":"if","locations":[{"start":{"line":344,"column":24},"end":{"line":346,"column":25}},{"start":{},"end":{}}],"line":344},"28":{"loc":{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},"type":"if","locations":[{"start":{"line":347,"column":24},"end":{"line":349,"column":25}},{"start":{},"end":{}}],"line":347},"29":{"loc":{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},"type":"if","locations":[{"start":{"line":357,"column":16},"end":{"line":359,"column":17}},{"start":{},"end":{}}],"line":357},"30":{"loc":{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},"type":"if","locations":[{"start":{"line":364,"column":4},"end":{"line":368,"column":5}},{"start":{"line":366,"column":11},"end":{"line":368,"column":5}}],"line":364},"31":{"loc":{"start":{"line":371,"column":94},"end":{"line":371,"column":110}},"type":"default-arg","locations":[{"start":{"line":371,"column":108},"end":{"line":371,"column":110}}],"line":371},"32":{"loc":{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},"type":"if","locations":[{"start":{"line":386,"column":12},"end":{"line":398,"column":13}},{"start":{"line":392,"column":19},"end":{"line":398,"column":13}}],"line":386},"33":{"loc":{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},"type":"if","locations":[{"start":{"line":389,"column":16},"end":{"line":391,"column":17}},{"start":{},"end":{}}],"line":389},"34":{"loc":{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},"type":"if","locations":[{"start":{"line":405,"column":4},"end":{"line":423,"column":5}},{"start":{"line":421,"column":11},"end":{"line":423,"column":5}}],"line":405},"35":{"loc":{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},"type":"if","locations":[{"start":{"line":410,"column":31},"end":{"line":415,"column":32}},{"start":{"line":412,"column":38},"end":{"line":415,"column":32}}],"line":410},"36":{"loc":{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},"type":"if","locations":[{"start":{"line":428,"column":4},"end":{"line":447,"column":5}},{"start":{"line":445,"column":11},"end":{"line":447,"column":5}}],"line":428},"37":{"loc":{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},"type":"if","locations":[{"start":{"line":451,"column":4},"end":{"line":459,"column":5}},{"start":{},"end":{}}],"line":451},"38":{"loc":{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},"type":"if","locations":[{"start":{"line":463,"column":4},"end":{"line":471,"column":5}},{"start":{},"end":{}}],"line":463},"39":{"loc":{"start":{"line":474,"column":99},"end":{"line":474,"column":118}},"type":"default-arg","locations":[{"start":{"line":474,"column":113},"end":{"line":474,"column":118}}],"line":474},"40":{"loc":{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},"type":"if","locations":[{"start":{"line":476,"column":4},"end":{"line":498,"column":5}},{"start":{"line":496,"column":11},"end":{"line":498,"column":5}}],"line":476},"41":{"loc":{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},"type":"if","locations":[{"start":{"line":482,"column":8},"end":{"line":484,"column":9}},{"start":{},"end":{}}],"line":482},"42":{"loc":{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},"type":"if","locations":[{"start":{"line":489,"column":38},"end":{"line":493,"column":39}},{"start":{"line":491,"column":45},"end":{"line":493,"column":39}}],"line":489},"43":{"loc":{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},"type":"if","locations":[{"start":{"line":503,"column":4},"end":{"line":517,"column":5}},{"start":{"line":515,"column":11},"end":{"line":517,"column":5}}],"line":503},"44":{"loc":{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},"type":"if","locations":[{"start":{"line":522,"column":4},"end":{"line":537,"column":5}},{"start":{"line":535,"column":11},"end":{"line":537,"column":5}}],"line":522},"45":{"loc":{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},"type":"if","locations":[{"start":{"line":541,"column":4},"end":{"line":544,"column":5}},{"start":{},"end":{}}],"line":541},"46":{"loc":{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},"type":"if","locations":[{"start":{"line":545,"column":4},"end":{"line":558,"column":5}},{"start":{"line":556,"column":11},"end":{"line":558,"column":5}}],"line":545},"47":{"loc":{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},"type":"if","locations":[{"start":{"line":562,"column":4},"end":{"line":565,"column":5}},{"start":{},"end":{}}],"line":562},"48":{"loc":{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},"type":"if","locations":[{"start":{"line":566,"column":4},"end":{"line":575,"column":5}},{"start":{"line":573,"column":11},"end":{"line":575,"column":5}}],"line":566},"49":{"loc":{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},"type":"if","locations":[{"start":{"line":579,"column":4},"end":{"line":582,"column":5}},{"start":{},"end":{}}],"line":579},"50":{"loc":{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},"type":"if","locations":[{"start":{"line":583,"column":4},"end":{"line":596,"column":5}},{"start":{},"end":{}}],"line":583},"51":{"loc":{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},"type":"if","locations":[{"start":{"line":587,"column":12},"end":{"line":589,"column":13}},{"start":{},"end":{}}],"line":587},"52":{"loc":{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},"type":"if","locations":[{"start":{"line":607,"column":4},"end":{"line":627,"column":5}},{"start":{"line":624,"column":11},"end":{"line":627,"column":5}}],"line":607},"53":{"loc":{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},"type":"if","locations":[{"start":{"line":613,"column":31},"end":{"line":618,"column":32}},{"start":{"line":615,"column":38},"end":{"line":618,"column":32}}],"line":613},"54":{"loc":{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},"type":"if","locations":[{"start":{"line":631,"column":4},"end":{"line":633,"column":5}},{"start":{},"end":{}}],"line":631},"55":{"loc":{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},"type":"if","locations":[{"start":{"line":635,"column":4},"end":{"line":638,"column":5}},{"start":{},"end":{}}],"line":635},"56":{"loc":{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},"type":"if","locations":[{"start":{"line":639,"column":4},"end":{"line":647,"column":5}},{"start":{"line":645,"column":11},"end":{"line":647,"column":5}}],"line":639},"57":{"loc":{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},"type":"if","locations":[{"start":{"line":651,"column":4},"end":{"line":653,"column":5}},{"start":{},"end":{}}],"line":651},"58":{"loc":{"start":{"line":651,"column":8},"end":{"line":651,"column":46}},"type":"binary-expr","locations":[{"start":{"line":651,"column":8},"end":{"line":651,"column":25}},{"start":{"line":651,"column":29},"end":{"line":651,"column":46}}],"line":651},"59":{"loc":{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},"type":"if","locations":[{"start":{"line":657,"column":4},"end":{"line":660,"column":5}},{"start":{},"end":{}}],"line":657},"60":{"loc":{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},"type":"if","locations":[{"start":{"line":662,"column":4},"end":{"line":685,"column":5}},{"start":{},"end":{}}],"line":662},"61":{"loc":{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},"type":"if","locations":[{"start":{"line":670,"column":12},"end":{"line":672,"column":13}},{"start":{},"end":{}}],"line":670},"62":{"loc":{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},"type":"if","locations":[{"start":{"line":675,"column":32},"end":{"line":679,"column":33}},{"start":{"line":677,"column":39},"end":{"line":679,"column":33}}],"line":675},"63":{"loc":{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},"type":"if","locations":[{"start":{"line":680,"column":32},"end":{"line":682,"column":33}},{"start":{},"end":{}}],"line":680},"64":{"loc":{"start":{"line":680,"column":36},"end":{"line":680,"column":74}},"type":"binary-expr","locations":[{"start":{"line":680,"column":36},"end":{"line":680,"column":51}},{"start":{"line":680,"column":55},"end":{"line":680,"column":62}},{"start":{"line":680,"column":66},"end":{"line":680,"column":74}}],"line":680}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":1,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":1,"43":0,"44":0,"45":0,"46":1,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":1,"58":0,"59":0,"60":0,"61":0,"62":1,"63":1,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":1,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":1,"83":0,"84":0,"85":0,"86":1,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":1,"101":0,"102":0,"103":0,"104":1,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":1,"115":0,"116":0,"117":0,"118":0,"119":0,"120":1,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":1,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":1,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":1,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":1,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":1,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":1,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":1,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":1,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":1,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":1,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":1,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":1,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":1,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":1,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":1,"338":0,"339":0,"340":1,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":1,"362":0,"363":0,"364":0,"365":0,"366":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6d379d24c4d4b581de45a90a3bdf297a4ea327f9"} -,"/home/runner/work/blockpy/blockpy/src/storage.js": {"path":"/home/runner/work/blockpy/blockpy/src/storage.js","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":15,"column":1}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":37}},"2":{"start":{"line":4,"column":14},"end":{"line":4,"column":41}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":40}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":38}},"5":{"start":{"line":8,"column":4},"end":{"line":14,"column":6}},"6":{"start":{"line":10,"column":42},"end":{"line":10,"column":78}},"7":{"start":{"line":11,"column":37},"end":{"line":11,"column":98}},"8":{"start":{"line":12,"column":37},"end":{"line":12,"column":66}},"9":{"start":{"line":13,"column":35},"end":{"line":13,"column":58}},"10":{"start":{"line":29,"column":4},"end":{"line":29,"column":31}},"11":{"start":{"line":38,"column":0},"end":{"line":41,"column":2}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":70}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":76}},"14":{"start":{"line":48,"column":0},"end":{"line":51,"column":2}},"15":{"start":{"line":49,"column":4},"end":{"line":49,"column":66}},"16":{"start":{"line":50,"column":4},"end":{"line":50,"column":70}},"17":{"start":{"line":58,"column":0},"end":{"line":60,"column":2}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":70}},"19":{"start":{"line":68,"column":0},"end":{"line":70,"column":2}},"20":{"start":{"line":69,"column":4},"end":{"line":69,"column":84}},"21":{"start":{"line":80,"column":0},"end":{"line":87,"column":2}},"22":{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},"23":{"start":{"line":82,"column":8},"end":{"line":82,"column":29}},"24":{"start":{"line":84,"column":8},"end":{"line":84,"column":36}},"25":{"start":{"line":85,"column":8},"end":{"line":85,"column":28}},"26":{"start":{"line":94,"column":0},"end":{"line":96,"column":2}},"27":{"start":{"line":95,"column":4},"end":{"line":95,"column":79}},"28":{"start":{"line":106,"column":0},"end":{"line":109,"column":2}},"29":{"start":{"line":107,"column":22},"end":{"line":107,"column":84}},"30":{"start":{"line":108,"column":4},"end":{"line":108,"column":45}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":22},"end":{"line":10,"column":23}},"loc":{"start":{"line":10,"column":40},"end":{"line":10,"column":80}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":22},"end":{"line":11,"column":23}},"loc":{"start":{"line":11,"column":35},"end":{"line":11,"column":100}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":22},"end":{"line":12,"column":23}},"loc":{"start":{"line":12,"column":35},"end":{"line":12,"column":68}},"line":12},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":22},"end":{"line":13,"column":23}},"loc":{"start":{"line":13,"column":33},"end":{"line":13,"column":60}},"line":13},"4":{"name":"LocalStorageWrapper","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":35}},"loc":{"start":{"line":28,"column":47},"end":{"line":30,"column":1}},"line":28},"5":{"name":"(anonymous_5)","decl":{"start":{"line":38,"column":37},"end":{"line":38,"column":38}},"loc":{"start":{"line":38,"column":58},"end":{"line":41,"column":1}},"line":38},"6":{"name":"(anonymous_6)","decl":{"start":{"line":48,"column":39},"end":{"line":48,"column":40}},"loc":{"start":{"line":48,"column":53},"end":{"line":51,"column":1}},"line":48},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":36},"end":{"line":58,"column":37}},"loc":{"start":{"line":58,"column":50},"end":{"line":60,"column":1}},"line":58},"8":{"name":"(anonymous_8)","decl":{"start":{"line":68,"column":40},"end":{"line":68,"column":41}},"loc":{"start":{"line":68,"column":54},"end":{"line":70,"column":1}},"line":68},"9":{"name":"(anonymous_9)","decl":{"start":{"line":80,"column":43},"end":{"line":80,"column":44}},"loc":{"start":{"line":80,"column":71},"end":{"line":87,"column":1}},"line":80},"10":{"name":"(anonymous_10)","decl":{"start":{"line":94,"column":36},"end":{"line":94,"column":37}},"loc":{"start":{"line":94,"column":50},"end":{"line":96,"column":1}},"line":94},"11":{"name":"(anonymous_11)","decl":{"start":{"line":106,"column":39},"end":{"line":106,"column":40}},"loc":{"start":{"line":106,"column":66},"end":{"line":109,"column":1}},"line":106}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":44},"end":{"line":11,"column":97}},"type":"cond-expr","locations":[{"start":{"line":11,"column":76},"end":{"line":11,"column":90}},{"start":{"line":11,"column":93},"end":{"line":11,"column":97}}],"line":11},"1":{"loc":{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":86,"column":5}},{"start":{"line":83,"column":11},"end":{"line":86,"column":5}}],"line":81}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":6,"11":3,"12":2,"13":2,"14":3,"15":1,"16":1,"17":3,"18":1,"19":3,"20":0,"21":3,"22":1,"23":0,"24":1,"25":1,"26":3,"27":2,"28":3,"29":0,"30":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":6,"5":2,"6":1,"7":1,"8":0,"9":1,"10":2,"11":0},"b":{"0":[0,0],"1":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e8e8e1decac7103f6bd06f4290c25df4182674f7"} -,"/home/runner/work/blockpy/blockpy/src/toolbar.js": {"path":"/home/runner/work/blockpy/blockpy/src/toolbar.js","statementMap":{"0":{"start":{"line":11,"column":4},"end":{"line":11,"column":21}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":19}},"2":{"start":{"line":15,"column":4},"end":{"line":15,"column":19}},"3":{"start":{"line":16,"column":4},"end":{"line":16,"column":70}},"4":{"start":{"line":17,"column":4},"end":{"line":17,"column":82}},"5":{"start":{"line":20,"column":4},"end":{"line":20,"column":27}},"6":{"start":{"line":30,"column":0},"end":{"line":164,"column":2}},"7":{"start":{"line":31,"column":15},"end":{"line":31,"column":24}},"8":{"start":{"line":32,"column":4},"end":{"line":46,"column":7}},"9":{"start":{"line":34,"column":21},"end":{"line":34,"column":25}},"10":{"start":{"line":35,"column":8},"end":{"line":35,"column":41}},"11":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"12":{"start":{"line":40,"column":8},"end":{"line":40,"column":40}},"13":{"start":{"line":41,"column":8},"end":{"line":44,"column":37}},"14":{"start":{"line":47,"column":4},"end":{"line":50,"column":7}},"15":{"start":{"line":48,"column":8},"end":{"line":48,"column":58}},"16":{"start":{"line":49,"column":8},"end":{"line":49,"column":43}},"17":{"start":{"line":51,"column":4},"end":{"line":58,"column":7}},"18":{"start":{"line":52,"column":8},"end":{"line":52,"column":80}},"19":{"start":{"line":54,"column":8},"end":{"line":54,"column":59}},"20":{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},"21":{"start":{"line":56,"column":12},"end":{"line":56,"column":53}},"22":{"start":{"line":59,"column":4},"end":{"line":67,"column":7}},"23":{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},"24":{"start":{"line":61,"column":12},"end":{"line":61,"column":64}},"25":{"start":{"line":62,"column":12},"end":{"line":62,"column":49}},"26":{"start":{"line":64,"column":12},"end":{"line":64,"column":35}},"27":{"start":{"line":65,"column":12},"end":{"line":65,"column":25}},"28":{"start":{"line":72,"column":4},"end":{"line":80,"column":7}},"29":{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},"30":{"start":{"line":74,"column":12},"end":{"line":74,"column":48}},"31":{"start":{"line":75,"column":12},"end":{"line":75,"column":63}},"32":{"start":{"line":77,"column":12},"end":{"line":77,"column":35}},"33":{"start":{"line":78,"column":12},"end":{"line":78,"column":25}},"34":{"start":{"line":81,"column":4},"end":{"line":84,"column":7}},"35":{"start":{"line":82,"column":8},"end":{"line":82,"column":44}},"36":{"start":{"line":83,"column":8},"end":{"line":83,"column":60}},"37":{"start":{"line":85,"column":4},"end":{"line":88,"column":7}},"38":{"start":{"line":86,"column":8},"end":{"line":86,"column":45}},"39":{"start":{"line":87,"column":8},"end":{"line":87,"column":61}},"40":{"start":{"line":89,"column":27},"end":{"line":89,"column":96}},"41":{"start":{"line":90,"column":4},"end":{"line":96,"column":7}},"42":{"start":{"line":91,"column":8},"end":{"line":91,"column":66}},"43":{"start":{"line":92,"column":8},"end":{"line":94,"column":11}},"44":{"start":{"line":95,"column":8},"end":{"line":95,"column":64}},"45":{"start":{"line":97,"column":4},"end":{"line":100,"column":7}},"46":{"start":{"line":98,"column":8},"end":{"line":98,"column":45}},"47":{"start":{"line":99,"column":8},"end":{"line":99,"column":61}},"48":{"start":{"line":161,"column":4},"end":{"line":163,"column":7}},"49":{"start":{"line":162,"column":8},"end":{"line":162,"column":63}}},"fnMap":{"0":{"name":"BlockPyToolbar","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":23}},"loc":{"start":{"line":10,"column":35},"end":{"line":21,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":43},"end":{"line":30,"column":44}},"loc":{"start":{"line":30,"column":54},"end":{"line":164,"column":1}},"line":30},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":40},"end":{"line":32,"column":41}},"loc":{"start":{"line":32,"column":52},"end":{"line":46,"column":5}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":47,"column":34},"end":{"line":47,"column":35}},"loc":{"start":{"line":47,"column":45},"end":{"line":50,"column":5}},"line":47},"4":{"name":"(anonymous_4)","decl":{"start":{"line":51,"column":50},"end":{"line":51,"column":51}},"loc":{"start":{"line":51,"column":61},"end":{"line":58,"column":5}},"line":51},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":52},"end":{"line":59,"column":53}},"loc":{"start":{"line":59,"column":68},"end":{"line":67,"column":5}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":51},"end":{"line":72,"column":52}},"loc":{"start":{"line":72,"column":67},"end":{"line":80,"column":5}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":81,"column":51},"end":{"line":81,"column":52}},"loc":{"start":{"line":81,"column":62},"end":{"line":84,"column":5}},"line":81},"8":{"name":"(anonymous_8)","decl":{"start":{"line":85,"column":52},"end":{"line":85,"column":53}},"loc":{"start":{"line":85,"column":63},"end":{"line":88,"column":5}},"line":85},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":55},"end":{"line":90,"column":56}},"loc":{"start":{"line":90,"column":66},"end":{"line":96,"column":5}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":97,"column":52},"end":{"line":97,"column":53}},"loc":{"start":{"line":97,"column":63},"end":{"line":100,"column":5}},"line":97},"11":{"name":"(anonymous_11)","decl":{"start":{"line":161,"column":66},"end":{"line":161,"column":67}},"loc":{"start":{"line":161,"column":77},"end":{"line":163,"column":5}},"line":161}},"branchMap":{"0":{"loc":{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":57,"column":9}},{"start":{},"end":{}}],"line":55},"1":{"loc":{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":66,"column":9}},{"start":{"line":63,"column":15},"end":{"line":66,"column":9}}],"line":60},"2":{"loc":{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":79,"column":9}},{"start":{"line":76,"column":15},"end":{"line":79,"column":9}}],"line":73}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}} -,"/home/runner/work/blockpy/blockpy/src/trace.js": {"path":"/home/runner/work/blockpy/blockpy/src/trace.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":71,"column":1}},"1":{"start":{"line":73,"column":32},"end":{"line":173,"column":1}},"2":{"start":{"line":178,"column":8},"end":{"line":178,"column":25}},"3":{"start":{"line":179,"column":8},"end":{"line":179,"column":23}},"4":{"start":{"line":181,"column":8},"end":{"line":182,"column":93}},"5":{"start":{"line":194,"column":21},"end":{"line":194,"column":23}},"6":{"start":{"line":195,"column":22},"end":{"line":195,"column":24}},"7":{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},"8":{"start":{"line":204,"column":12},"end":{"line":221,"column":13}},"9":{"start":{"line":205,"column":28},"end":{"line":205,"column":47}},"10":{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},"11":{"start":{"line":207,"column":20},"end":{"line":208,"column":46}},"12":{"start":{"line":210,"column":20},"end":{"line":214,"column":21}},"13":{"start":{"line":211,"column":24},"end":{"line":211,"column":74}},"14":{"start":{"line":213,"column":24},"end":{"line":213,"column":98}},"15":{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},"16":{"start":{"line":216,"column":24},"end":{"line":216,"column":44}},"17":{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},"18":{"start":{"line":218,"column":24},"end":{"line":218,"column":58}},"19":{"start":{"line":223,"column":8},"end":{"line":223,"column":58}},"20":{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},"21":{"start":{"line":234,"column":12},"end":{"line":237,"column":14}},"22":{"start":{"line":239,"column":8},"end":{"line":246,"column":9}},"23":{"start":{"line":241,"column":16},"end":{"line":245,"column":18}},"24":{"start":{"line":247,"column":8},"end":{"line":338,"column":9}},"25":{"start":{"line":249,"column":16},"end":{"line":255,"column":18}},"26":{"start":{"line":256,"column":36},"end":{"line":256,"column":48}},"27":{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},"28":{"start":{"line":259,"column":20},"end":{"line":262,"column":22}},"29":{"start":{"line":264,"column":20},"end":{"line":267,"column":22}},"30":{"start":{"line":270,"column":16},"end":{"line":273,"column":18}},"31":{"start":{"line":275,"column":16},"end":{"line":278,"column":18}},"32":{"start":{"line":280,"column":16},"end":{"line":283,"column":18}},"33":{"start":{"line":285,"column":16},"end":{"line":288,"column":18}},"34":{"start":{"line":290,"column":16},"end":{"line":293,"column":18}},"35":{"start":{"line":295,"column":16},"end":{"line":298,"column":18}},"36":{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},"37":{"start":{"line":301,"column":20},"end":{"line":305,"column":22}},"38":{"start":{"line":307,"column":20},"end":{"line":311,"column":22}},"39":{"start":{"line":314,"column":16},"end":{"line":317,"column":18}},"40":{"start":{"line":319,"column":16},"end":{"line":322,"column":18}},"41":{"start":{"line":324,"column":16},"end":{"line":327,"column":18}},"42":{"start":{"line":329,"column":16},"end":{"line":332,"column":18}},"43":{"start":{"line":334,"column":16},"end":{"line":337,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":27},"end":{"line":185,"column":5}},"line":177},"1":{"name":"(anonymous_1)","decl":{"start":{"line":193,"column":4},"end":{"line":193,"column":5}},"loc":{"start":{"line":193,"column":28},"end":{"line":224,"column":5}},"line":193},"2":{"name":"(anonymous_2)","decl":{"start":{"line":232,"column":4},"end":{"line":232,"column":5}},"loc":{"start":{"line":232,"column":51},"end":{"line":339,"column":5}},"line":232}},"branchMap":{"0":{"loc":{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},"type":"if","locations":[{"start":{"line":197,"column":8},"end":{"line":222,"column":9}},{"start":{},"end":{}}],"line":197},"1":{"loc":{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},"type":"if","locations":[{"start":{"line":206,"column":16},"end":{"line":220,"column":17}},{"start":{},"end":{}}],"line":206},"2":{"loc":{"start":{"line":206,"column":20},"end":{"line":206,"column":88}},"type":"binary-expr","locations":[{"start":{"line":206,"column":20},"end":{"line":206,"column":65}},{"start":{"line":206,"column":69},"end":{"line":206,"column":88}}],"line":206},"3":{"loc":{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},"type":"if","locations":[{"start":{"line":215,"column":20},"end":{"line":219,"column":21}},{"start":{"line":217,"column":27},"end":{"line":219,"column":21}}],"line":215},"4":{"loc":{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},"type":"if","locations":[{"start":{"line":217,"column":27},"end":{"line":219,"column":21}},{"start":{},"end":{}}],"line":217},"5":{"loc":{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},"type":"if","locations":[{"start":{"line":233,"column":8},"end":{"line":238,"column":9}},{"start":{},"end":{}}],"line":233},"6":{"loc":{"start":{"line":239,"column":8},"end":{"line":246,"column":9}},"type":"switch","locations":[{"start":{"line":240,"column":12},"end":{"line":245,"column":18}}],"line":239},"7":{"loc":{"start":{"line":247,"column":8},"end":{"line":338,"column":9}},"type":"switch","locations":[{"start":{"line":248,"column":12},"end":{"line":255,"column":18}},{"start":{"line":256,"column":12},"end":{"line":256,"column":48}},{"start":{"line":257,"column":12},"end":{"line":268,"column":17}},{"start":{"line":269,"column":12},"end":{"line":273,"column":18}},{"start":{"line":274,"column":12},"end":{"line":278,"column":18}},{"start":{"line":279,"column":12},"end":{"line":283,"column":18}},{"start":{"line":284,"column":12},"end":{"line":288,"column":18}},{"start":{"line":289,"column":12},"end":{"line":293,"column":18}},{"start":{"line":294,"column":12},"end":{"line":298,"column":18}},{"start":{"line":299,"column":12},"end":{"line":312,"column":17}},{"start":{"line":313,"column":12},"end":{"line":317,"column":18}},{"start":{"line":318,"column":12},"end":{"line":322,"column":18}},{"start":{"line":323,"column":12},"end":{"line":327,"column":18}},{"start":{"line":328,"column":12},"end":{"line":332,"column":18}},{"start":{"line":333,"column":12},"end":{"line":337,"column":18}}],"line":247},"8":{"loc":{"start":{"line":252,"column":25},"end":{"line":254,"column":44}},"type":"cond-expr","locations":[{"start":{"line":253,"column":28},"end":{"line":253,"column":82}},{"start":{"line":254,"column":28},"end":{"line":254,"column":44}}],"line":252},"9":{"loc":{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},"type":"if","locations":[{"start":{"line":258,"column":16},"end":{"line":268,"column":17}},{"start":{"line":263,"column":23},"end":{"line":268,"column":17}}],"line":258},"10":{"loc":{"start":{"line":258,"column":20},"end":{"line":258,"column":54}},"type":"binary-expr","locations":[{"start":{"line":258,"column":20},"end":{"line":258,"column":30}},{"start":{"line":258,"column":34},"end":{"line":258,"column":54}}],"line":258},"11":{"loc":{"start":{"line":281,"column":28},"end":{"line":281,"column":71}},"type":"cond-expr","locations":[{"start":{"line":281,"column":53},"end":{"line":281,"column":62}},{"start":{"line":281,"column":64},"end":{"line":281,"column":71}}],"line":281},"12":{"loc":{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},"type":"if","locations":[{"start":{"line":300,"column":16},"end":{"line":312,"column":17}},{"start":{"line":306,"column":23},"end":{"line":312,"column":17}}],"line":300},"13":{"loc":{"start":{"line":320,"column":28},"end":{"line":320,"column":65}},"type":"cond-expr","locations":[{"start":{"line":320,"column":46},"end":{"line":320,"column":55}},{"start":{"line":320,"column":58},"end":{"line":320,"column":65}}],"line":320},"14":{"loc":{"start":{"line":331,"column":30},"end":{"line":331,"column":53}},"type":"cond-expr","locations":[{"start":{"line":331,"column":38},"end":{"line":331,"column":44}},{"start":{"line":331,"column":46},"end":{"line":331,"column":53}}],"line":331},"15":{"loc":{"start":{"line":335,"column":28},"end":{"line":335,"column":79}},"type":"cond-expr","locations":[{"start":{"line":335,"column":58},"end":{"line":335,"column":63}},{"start":{"line":335,"column":66},"end":{"line":335,"column":79}}],"line":335},"16":{"loc":{"start":{"line":336,"column":29},"end":{"line":336,"column":74}},"type":"cond-expr","locations":[{"start":{"line":336,"column":54},"end":{"line":336,"column":59}},{"start":{"line":336,"column":62},"end":{"line":336,"column":74}}],"line":336}},"s":{"0":4,"1":4,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0],"7":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ca2c9681521c516133f345d3c4f5537733fb0704"} -,"/home/runner/work/blockpy/blockpy/src/utilities.js": {"path":"/home/runner/work/blockpy/blockpy/src/utilities.js","statementMap":{"0":{"start":{"line":12,"column":19},"end":{"line":12,"column":29}},"1":{"start":{"line":13,"column":23},"end":{"line":13,"column":36}},"2":{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},"3":{"start":{"line":16,"column":8},"end":{"line":16,"column":19}},"4":{"start":{"line":19,"column":4},"end":{"line":23,"column":11}},"5":{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},"6":{"start":{"line":20,"column":33},"end":{"line":20,"column":44}},"7":{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},"8":{"start":{"line":21,"column":33},"end":{"line":21,"column":118}},"9":{"start":{"line":22,"column":8},"end":{"line":22,"column":30}},"10":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"11":{"start":{"line":45,"column":12},"end":{"line":45,"column":26}},"12":{"start":{"line":46,"column":4},"end":{"line":50,"column":5}},"13":{"start":{"line":46,"column":14},"end":{"line":46,"column":15}},"14":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"15":{"start":{"line":47,"column":18},"end":{"line":47,"column":21}},"16":{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},"17":{"start":{"line":48,"column":31},"end":{"line":48,"column":48}},"18":{"start":{"line":52,"column":4},"end":{"line":52,"column":13}},"19":{"start":{"line":69,"column":20},"end":{"line":71,"column":6}},"20":{"start":{"line":70,"column":8},"end":{"line":70,"column":48}},"21":{"start":{"line":72,"column":4},"end":{"line":72,"column":51}},"22":{"start":{"line":82,"column":16},"end":{"line":82,"column":100}},"23":{"start":{"line":85,"column":16},"end":{"line":85,"column":31}},"24":{"start":{"line":86,"column":4},"end":{"line":89,"column":5}},"25":{"start":{"line":87,"column":8},"end":{"line":87,"column":44}},"26":{"start":{"line":88,"column":8},"end":{"line":88,"column":34}},"27":{"start":{"line":91,"column":4},"end":{"line":91,"column":17}},"28":{"start":{"line":101,"column":4},"end":{"line":101,"column":43}},"29":{"start":{"line":110,"column":4},"end":{"line":110,"column":49}},"30":{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},"31":{"start":{"line":120,"column":8},"end":{"line":120,"column":18}},"32":{"start":{"line":122,"column":4},"end":{"line":122,"column":50}},"33":{"start":{"line":133,"column":4},"end":{"line":133,"column":53}},"34":{"start":{"line":144,"column":4},"end":{"line":148,"column":33}},"35":{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},"36":{"start":{"line":155,"column":4},"end":{"line":175,"column":6}},"37":{"start":{"line":156,"column":22},"end":{"line":156,"column":39}},"38":{"start":{"line":157,"column":20},"end":{"line":157,"column":41}},"39":{"start":{"line":158,"column":21},"end":{"line":158,"column":39}},"40":{"start":{"line":159,"column":21},"end":{"line":159,"column":45}},"41":{"start":{"line":160,"column":16},"end":{"line":160,"column":17}},"42":{"start":{"line":160,"column":23},"end":{"line":160,"column":24}},"43":{"start":{"line":161,"column":31},"end":{"line":161,"column":51}},"44":{"start":{"line":162,"column":8},"end":{"line":174,"column":9}},"45":{"start":{"line":162,"column":21},"end":{"line":162,"column":22}},"46":{"start":{"line":164,"column":24},"end":{"line":164,"column":33}},"47":{"start":{"line":165,"column":29},"end":{"line":165,"column":59}},"48":{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},"49":{"start":{"line":167,"column":16},"end":{"line":167,"column":22}},"50":{"start":{"line":169,"column":16},"end":{"line":169,"column":59}},"51":{"start":{"line":171,"column":12},"end":{"line":172,"column":42}},"52":{"start":{"line":173,"column":12},"end":{"line":173,"column":55}},"53":{"start":{"line":183,"column":4},"end":{"line":190,"column":5}},"54":{"start":{"line":183,"column":17},"end":{"line":183,"column":18}},"55":{"start":{"line":184,"column":22},"end":{"line":184,"column":31}},"56":{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},"57":{"start":{"line":186,"column":12},"end":{"line":186,"column":32}},"58":{"start":{"line":187,"column":12},"end":{"line":187,"column":33}},"59":{"start":{"line":188,"column":12},"end":{"line":188,"column":16}},"60":{"start":{"line":195,"column":4},"end":{"line":199,"column":5}},"61":{"start":{"line":195,"column":17},"end":{"line":195,"column":18}},"62":{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},"63":{"start":{"line":197,"column":12},"end":{"line":197,"column":32}},"64":{"start":{"line":200,"column":4},"end":{"line":200,"column":21}},"65":{"start":{"line":214,"column":4},"end":{"line":221,"column":40}},"66":{"start":{"line":227,"column":4},"end":{"line":227,"column":54}},"67":{"start":{"line":230,"column":32},"end":{"line":230,"column":55}},"68":{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},"69":{"start":{"line":242,"column":8},"end":{"line":242,"column":20}},"70":{"start":{"line":244,"column":18},"end":{"line":244,"column":53}},"71":{"start":{"line":245,"column":4},"end":{"line":260,"column":5}},"72":{"start":{"line":245,"column":15},"end":{"line":245,"column":16}},"73":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"74":{"start":{"line":251,"column":23},"end":{"line":251,"column":33}},"75":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"76":{"start":{"line":253,"column":16},"end":{"line":253,"column":37}},"77":{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},"78":{"start":{"line":256,"column":16},"end":{"line":256,"column":41}},"79":{"start":{"line":258,"column":12},"end":{"line":258,"column":24}},"80":{"start":{"line":261,"column":4},"end":{"line":261,"column":16}},"81":{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},"82":{"start":{"line":279,"column":8},"end":{"line":279,"column":19}},"83":{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},"84":{"start":{"line":282,"column":8},"end":{"line":282,"column":17}},"85":{"start":{"line":283,"column":8},"end":{"line":291,"column":9}},"86":{"start":{"line":285,"column":25},"end":{"line":285,"column":31}},"87":{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},"88":{"start":{"line":287,"column":16},"end":{"line":287,"column":49}},"89":{"start":{"line":289,"column":16},"end":{"line":289,"column":33}},"90":{"start":{"line":292,"column":8},"end":{"line":292,"column":40}},"91":{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},"92":{"start":{"line":294,"column":8},"end":{"line":294,"column":37}},"93":{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},"94":{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},"95":{"start":{"line":298,"column":12},"end":{"line":298,"column":21}},"96":{"start":{"line":299,"column":12},"end":{"line":304,"column":13}},"97":{"start":{"line":301,"column":16},"end":{"line":301,"column":44}},"98":{"start":{"line":303,"column":16},"end":{"line":303,"column":49}},"99":{"start":{"line":306,"column":12},"end":{"line":306,"column":44}},"100":{"start":{"line":308,"column":12},"end":{"line":308,"column":23}},"101":{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},"102":{"start":{"line":311,"column":8},"end":{"line":311,"column":39}},"103":{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},"104":{"start":{"line":313,"column":8},"end":{"line":313,"column":37}},"105":{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},"106":{"start":{"line":315,"column":8},"end":{"line":315,"column":40}},"107":{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},"108":{"start":{"line":317,"column":8},"end":{"line":317,"column":44}},"109":{"start":{"line":323,"column":18},"end":{"line":323,"column":28}},"110":{"start":{"line":324,"column":12},"end":{"line":324,"column":43}},"111":{"start":{"line":325,"column":12},"end":{"line":325,"column":30}},"112":{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},"113":{"start":{"line":327,"column":17},"end":{"line":327,"column":29}},"114":{"start":{"line":329,"column":12},"end":{"line":329,"column":16}},"115":{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},"116":{"start":{"line":331,"column":8},"end":{"line":331,"column":17}},"117":{"start":{"line":333,"column":4},"end":{"line":333,"column":27}},"118":{"start":{"line":336,"column":21},"end":{"line":336,"column":36}},"119":{"start":{"line":337,"column":22},"end":{"line":337,"column":43}},"120":{"start":{"line":338,"column":21},"end":{"line":338,"column":35}},"121":{"start":{"line":339,"column":23},"end":{"line":339,"column":39}},"122":{"start":{"line":340,"column":31},"end":{"line":340,"column":64}},"123":{"start":{"line":342,"column":50},"end":{"line":342,"column":61}},"124":{"start":{"line":343,"column":66},"end":{"line":343,"column":74}},"125":{"start":{"line":344,"column":84},"end":{"line":344,"column":94}},"126":{"start":{"line":345,"column":40},"end":{"line":345,"column":46}},"127":{"start":{"line":346,"column":36},"end":{"line":346,"column":46}},"128":{"start":{"line":347,"column":30},"end":{"line":347,"column":35}}},"fnMap":{"0":{"name":"arrayMove","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":25}},"loc":{"start":{"line":11,"column":51},"end":{"line":24,"column":1}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":22},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":44},"end":{"line":23,"column":5}},"line":19},"2":{"name":"arrayContains","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":22}},"loc":{"start":{"line":32,"column":41},"end":{"line":34,"column":1}},"line":32},"3":{"name":"arrayUnique","decl":{"start":{"line":44,"column":9},"end":{"line":44,"column":20}},"loc":{"start":{"line":44,"column":28},"end":{"line":53,"column":1}},"line":44},"4":{"name":"expandArray","decl":{"start":{"line":68,"column":9},"end":{"line":68,"column":20}},"loc":{"start":{"line":68,"column":51},"end":{"line":73,"column":1}},"line":68},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":33},"end":{"line":69,"column":34}},"loc":{"start":{"line":69,"column":48},"end":{"line":71,"column":5}},"line":69},"6":{"name":"cloneNode","decl":{"start":{"line":80,"column":9},"end":{"line":80,"column":18}},"loc":{"start":{"line":80,"column":25},"end":{"line":92,"column":1}},"line":80},"7":{"name":"indent","decl":{"start":{"line":100,"column":16},"end":{"line":100,"column":22}},"loc":{"start":{"line":100,"column":28},"end":{"line":102,"column":1}},"line":100},"8":{"name":"slug","decl":{"start":{"line":109,"column":16},"end":{"line":109,"column":20}},"loc":{"start":{"line":109,"column":26},"end":{"line":111,"column":1}},"line":109},"9":{"name":"capitalize","decl":{"start":{"line":118,"column":16},"end":{"line":118,"column":26}},"loc":{"start":{"line":118,"column":30},"end":{"line":123,"column":1}},"line":118},"10":{"name":"randomInteger","decl":{"start":{"line":132,"column":9},"end":{"line":132,"column":22}},"loc":{"start":{"line":132,"column":32},"end":{"line":134,"column":1}},"line":132},"11":{"name":"encodeHTML","decl":{"start":{"line":143,"column":16},"end":{"line":143,"column":26}},"loc":{"start":{"line":143,"column":32},"end":{"line":149,"column":1}},"line":143},"12":{"name":"(anonymous_12)","decl":{"start":{"line":155,"column":45},"end":{"line":155,"column":46}},"loc":{"start":{"line":155,"column":56},"end":{"line":175,"column":5}},"line":155},"13":{"name":"moveElements","decl":{"start":{"line":182,"column":9},"end":{"line":182,"column":21}},"loc":{"start":{"line":182,"column":49},"end":{"line":191,"column":1}},"line":182},"14":{"name":"firstDefinedValue","decl":{"start":{"line":194,"column":16},"end":{"line":194,"column":33}},"loc":{"start":{"line":194,"column":36},"end":{"line":201,"column":1}},"line":194},"15":{"name":"isSkBuiltin","decl":{"start":{"line":213,"column":9},"end":{"line":213,"column":20}},"loc":{"start":{"line":213,"column":25},"end":{"line":224,"column":1}},"line":213},"16":{"name":"isAstNode","decl":{"start":{"line":226,"column":9},"end":{"line":226,"column":18}},"loc":{"start":{"line":226,"column":23},"end":{"line":228,"column":1}},"line":226},"17":{"name":"extractPart","decl":{"start":{"line":240,"column":16},"end":{"line":240,"column":27}},"loc":{"start":{"line":240,"column":42},"end":{"line":262,"column":1}},"line":240},"18":{"name":"mixedRemapToPy","decl":{"start":{"line":271,"column":9},"end":{"line":271,"column":23}},"loc":{"start":{"line":271,"column":28},"end":{"line":319,"column":1}},"line":271},"19":{"name":"getCurrentTime","decl":{"start":{"line":322,"column":16},"end":{"line":322,"column":30}},"loc":{"start":{"line":322,"column":33},"end":{"line":334,"column":1}},"line":322}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},"type":"if","locations":[{"start":{"line":15,"column":4},"end":{"line":17,"column":5}},{"start":{},"end":{}}],"line":15},"1":{"loc":{"start":{"line":15,"column":8},"end":{"line":15,"column":71}},"type":"binary-expr","locations":[{"start":{"line":15,"column":8},"end":{"line":15,"column":29}},{"start":{"line":15,"column":33},"end":{"line":15,"column":50}},{"start":{"line":15,"column":54},"end":{"line":15,"column":71}}],"line":15},"2":{"loc":{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},"type":"if","locations":[{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},{"start":{},"end":{}}],"line":20},"3":{"loc":{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},"type":"if","locations":[{"start":{"line":21,"column":8},"end":{"line":21,"column":119}},{"start":{},"end":{}}],"line":21},"4":{"loc":{"start":{"line":21,"column":40},"end":{"line":21,"column":117}},"type":"cond-expr","locations":[{"start":{"line":21,"column":62},"end":{"line":21,"column":88}},{"start":{"line":21,"column":91},"end":{"line":21,"column":117}}],"line":21},"5":{"loc":{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},"type":"if","locations":[{"start":{"line":48,"column":12},"end":{"line":48,"column":49}},{"start":{},"end":{}}],"line":48},"6":{"loc":{"start":{"line":82,"column":16},"end":{"line":82,"column":100}},"type":"cond-expr","locations":[{"start":{"line":82,"column":37},"end":{"line":82,"column":76}},{"start":{"line":82,"column":79},"end":{"line":82,"column":100}}],"line":82},"7":{"loc":{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":119,"column":4},"end":{"line":121,"column":5}},{"start":{},"end":{}}],"line":119},"8":{"loc":{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},"type":"if","locations":[{"start":{"line":154,"column":0},"end":{"line":176,"column":1}},{"start":{},"end":{}}],"line":154},"9":{"loc":{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},"type":"if","locations":[{"start":{"line":166,"column":12},"end":{"line":170,"column":13}},{"start":{"line":168,"column":19},"end":{"line":170,"column":13}}],"line":166},"10":{"loc":{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":189,"column":9}},{"start":{},"end":{}}],"line":185},"11":{"loc":{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},"type":"if","locations":[{"start":{"line":196,"column":8},"end":{"line":198,"column":9}},{"start":{},"end":{}}],"line":196},"12":{"loc":{"start":{"line":214,"column":11},"end":{"line":221,"column":39}},"type":"binary-expr","locations":[{"start":{"line":214,"column":12},"end":{"line":214,"column":42}},{"start":{"line":215,"column":9},"end":{"line":215,"column":39}},{"start":{"line":216,"column":9},"end":{"line":216,"column":40}},{"start":{"line":217,"column":9},"end":{"line":217,"column":39}},{"start":{"line":218,"column":9},"end":{"line":218,"column":39}},{"start":{"line":219,"column":9},"end":{"line":219,"column":41}},{"start":{"line":220,"column":9},"end":{"line":220,"column":38}},{"start":{"line":221,"column":9},"end":{"line":221,"column":38}}],"line":214},"13":{"loc":{"start":{"line":227,"column":11},"end":{"line":227,"column":53}},"type":"binary-expr","locations":[{"start":{"line":227,"column":11},"end":{"line":227,"column":32}},{"start":{"line":227,"column":36},"end":{"line":227,"column":53}}],"line":227},"14":{"loc":{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},"type":"if","locations":[{"start":{"line":241,"column":4},"end":{"line":243,"column":5}},{"start":{},"end":{}}],"line":241},"15":{"loc":{"start":{"line":241,"column":8},"end":{"line":241,"column":39}},"type":"binary-expr","locations":[{"start":{"line":241,"column":8},"end":{"line":241,"column":21}},{"start":{"line":241,"column":25},"end":{"line":241,"column":39}}],"line":241},"16":{"loc":{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},"type":"if","locations":[{"start":{"line":250,"column":8},"end":{"line":259,"column":9}},{"start":{},"end":{}}],"line":250},"17":{"loc":{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},"type":"if","locations":[{"start":{"line":252,"column":12},"end":{"line":254,"column":13}},{"start":{},"end":{}}],"line":252},"18":{"loc":{"start":{"line":252,"column":16},"end":{"line":252,"column":40}},"type":"binary-expr","locations":[{"start":{"line":252,"column":16},"end":{"line":252,"column":20}},{"start":{"line":252,"column":24},"end":{"line":252,"column":40}}],"line":252},"19":{"loc":{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},"type":"if","locations":[{"start":{"line":255,"column":12},"end":{"line":257,"column":13}},{"start":{},"end":{}}],"line":255},"20":{"loc":{"start":{"line":255,"column":16},"end":{"line":255,"column":73}},"type":"binary-expr","locations":[{"start":{"line":255,"column":16},"end":{"line":255,"column":38}},{"start":{"line":255,"column":42},"end":{"line":255,"column":46}},{"start":{"line":255,"column":50},"end":{"line":255,"column":73}}],"line":255},"21":{"loc":{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":277,"column":4},"end":{"line":318,"column":5}},{"start":{"line":280,"column":11},"end":{"line":318,"column":5}}],"line":277},"22":{"loc":{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":280,"column":11},"end":{"line":318,"column":5}},{"start":{"line":293,"column":11},"end":{"line":318,"column":5}}],"line":280},"23":{"loc":{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},"type":"if","locations":[{"start":{"line":286,"column":12},"end":{"line":290,"column":13}},{"start":{"line":288,"column":17},"end":{"line":290,"column":13}}],"line":286},"24":{"loc":{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":293,"column":11},"end":{"line":318,"column":5}},{"start":{"line":295,"column":11},"end":{"line":318,"column":5}}],"line":293},"25":{"loc":{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":295,"column":11},"end":{"line":318,"column":5}},{"start":{"line":310,"column":11},"end":{"line":318,"column":5}}],"line":295},"26":{"loc":{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},"type":"if","locations":[{"start":{"line":296,"column":8},"end":{"line":309,"column":9}},{"start":{"line":307,"column":13},"end":{"line":309,"column":9}}],"line":296},"27":{"loc":{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":310,"column":11},"end":{"line":318,"column":5}},{"start":{"line":312,"column":11},"end":{"line":318,"column":5}}],"line":310},"28":{"loc":{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":312,"column":11},"end":{"line":318,"column":5}},{"start":{"line":314,"column":11},"end":{"line":318,"column":5}}],"line":312},"29":{"loc":{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":314,"column":11},"end":{"line":318,"column":5}},{"start":{"line":316,"column":11},"end":{"line":318,"column":5}}],"line":314},"30":{"loc":{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},"type":"if","locations":[{"start":{"line":316,"column":11},"end":{"line":318,"column":5}},{"start":{},"end":{}}],"line":316},"31":{"loc":{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},"type":"if","locations":[{"start":{"line":327,"column":4},"end":{"line":327,"column":30}},{"start":{},"end":{}}],"line":327},"32":{"loc":{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},"type":"if","locations":[{"start":{"line":330,"column":4},"end":{"line":332,"column":5}},{"start":{},"end":{}}],"line":330}},"s":{"0":5,"1":5,"2":5,"3":2,"4":3,"5":11,"6":3,"7":8,"8":3,"9":5,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":6,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":6,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":6,"119":6,"120":6,"121":6,"122":6,"123":6,"124":6,"125":6,"126":6,"127":6,"128":6},"f":{"0":5,"1":11,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[2,3],"1":[5,4,4],"2":[3,8],"3":[3,5],"4":[2,1],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,6],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0,0,0,0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c501eb302de83cf53f9c8957623052461f5e5fbc"} -,"/home/runner/work/blockpy/blockpy/src/editor/abstract_editor.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/abstract_editor.js","statementMap":{"0":{"start":{"line":4,"column":21},"end":{"line":4,"column":37}},"1":{"start":{"line":5,"column":16},"end":{"line":5,"column":34}},"2":{"start":{"line":6,"column":4},"end":{"line":8,"column":6}},"3":{"start":{"line":7,"column":8},"end":{"line":7,"column":48}},"4":{"start":{"line":9,"column":4},"end":{"line":9,"column":40}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":36}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":28}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":58}},"8":{"start":{"line":19,"column":48},"end":{"line":19,"column":89}},"9":{"start":{"line":21,"column":4},"end":{"line":21,"column":26}},"10":{"start":{"line":22,"column":4},"end":{"line":22,"column":28}},"11":{"start":{"line":24,"column":15},"end":{"line":24,"column":53}},"12":{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},"13":{"start":{"line":26,"column":8},"end":{"line":26,"column":48}},"14":{"start":{"line":28,"column":36},"end":{"line":28,"column":70}},"15":{"start":{"line":29,"column":8},"end":{"line":29,"column":70}},"16":{"start":{"line":30,"column":8},"end":{"line":30,"column":46}},"17":{"start":{"line":31,"column":8},"end":{"line":31,"column":57}},"18":{"start":{"line":32,"column":8},"end":{"line":32,"column":38}},"19":{"start":{"line":33,"column":8},"end":{"line":33,"column":57}},"20":{"start":{"line":39,"column":8},"end":{"line":39,"column":25}},"21":{"start":{"line":40,"column":8},"end":{"line":40,"column":23}},"22":{"start":{"line":42,"column":8},"end":{"line":42,"column":53}},"23":{"start":{"line":43,"column":8},"end":{"line":43,"column":29}},"24":{"start":{"line":44,"column":8},"end":{"line":44,"column":25}},"25":{"start":{"line":48,"column":8},"end":{"line":48,"column":50}},"26":{"start":{"line":49,"column":8},"end":{"line":49,"column":54}},"27":{"start":{"line":50,"column":8},"end":{"line":50,"column":63}},"28":{"start":{"line":55,"column":8},"end":{"line":55,"column":54}},"29":{"start":{"line":56,"column":8},"end":{"line":56,"column":63}},"30":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"31":{"start":{"line":62,"column":12},"end":{"line":62,"column":69}},"32":{"start":{"line":69,"column":8},"end":{"line":72,"column":11}},"33":{"start":{"line":76,"column":8},"end":{"line":76,"column":36}},"34":{"start":{"line":77,"column":8},"end":{"line":77,"column":57}},"35":{"start":{"line":78,"column":8},"end":{"line":78,"column":32}},"36":{"start":{"line":88,"column":8},"end":{"line":88,"column":56}},"37":{"start":{"line":89,"column":8},"end":{"line":89,"column":25}},"38":{"start":{"line":90,"column":8},"end":{"line":90,"column":29}},"39":{"start":{"line":94,"column":23},"end":{"line":94,"column":44}},"40":{"start":{"line":95,"column":23},"end":{"line":95,"column":42}},"41":{"start":{"line":96,"column":8},"end":{"line":96,"column":35}},"42":{"start":{"line":100,"column":23},"end":{"line":100,"column":59}},"43":{"start":{"line":101,"column":8},"end":{"line":106,"column":10}}},"fnMap":{"0":{"name":"uploadFile","decl":{"start":{"line":3,"column":16},"end":{"line":3,"column":26}},"loc":{"start":{"line":3,"column":41},"end":{"line":12,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":25},"end":{"line":6,"column":26}},"loc":{"start":{"line":7,"column":8},"end":{"line":7,"column":48}},"line":7},"2":{"name":"sluggify","decl":{"start":{"line":14,"column":16},"end":{"line":14,"column":24}},"loc":{"start":{"line":14,"column":31},"end":{"line":16,"column":1}},"line":14},"3":{"name":"downloadFile","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"loc":{"start":{"line":18,"column":43},"end":{"line":35,"column":1}},"line":18},"4":{"name":"(anonymous_4)","decl":{"start":{"line":38,"column":4},"end":{"line":38,"column":5}},"loc":{"start":{"line":38,"column":27},"end":{"line":45,"column":5}},"line":38},"5":{"name":"(anonymous_5)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":5}},"loc":{"start":{"line":47,"column":17},"end":{"line":51,"column":5}},"line":47},"6":{"name":"(anonymous_6)","decl":{"start":{"line":53,"column":4},"end":{"line":53,"column":5}},"loc":{"start":{"line":53,"column":20},"end":{"line":57,"column":5}},"line":53},"7":{"name":"(anonymous_7)","decl":{"start":{"line":59,"column":4},"end":{"line":59,"column":5}},"loc":{"start":{"line":59,"column":24},"end":{"line":66,"column":5}},"line":59},"8":{"name":"(anonymous_8)","decl":{"start":{"line":68,"column":4},"end":{"line":68,"column":5}},"loc":{"start":{"line":68,"column":23},"end":{"line":73,"column":5}},"line":68},"9":{"name":"(anonymous_9)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":34},"end":{"line":79,"column":5}},"line":75},"10":{"name":"(anonymous_10)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":44},"end":{"line":91,"column":5}},"line":87},"11":{"name":"(anonymous_11)","decl":{"start":{"line":93,"column":4},"end":{"line":93,"column":5}},"loc":{"start":{"line":93,"column":22},"end":{"line":97,"column":5}},"line":93},"12":{"name":"(anonymous_12)","decl":{"start":{"line":99,"column":4},"end":{"line":99,"column":5}},"loc":{"start":{"line":99,"column":19},"end":{"line":107,"column":5}},"line":99}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":34,"column":5}},{"start":{"line":27,"column":10},"end":{"line":34,"column":5}}],"line":25},"1":{"loc":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},{"start":{},"end":{}}],"line":60}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,0],"1":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2bb34c18f0688dee371dddd7f94174e43348c527"} -,"/home/runner/work/blockpy/blockpy/src/editor/assignment_settings.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/assignment_settings.js","statementMap":{"0":{"start":{"line":4,"column":28},"end":{"line":43,"column":1}},"1":{"start":{"line":45,"column":27},"end":{"line":50,"column":1}},"2":{"start":{"line":53,"column":4},"end":{"line":57,"column":5}},"3":{"start":{"line":53,"column":15},"end":{"line":53,"column":16}},"4":{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},"5":{"start":{"line":55,"column":12},"end":{"line":55,"column":45}},"6":{"start":{"line":58,"column":4},"end":{"line":58,"column":47}},"7":{"start":{"line":62,"column":4},"end":{"line":67,"column":22}},"8":{"start":{"line":70,"column":52},"end":{"line":93,"column":19}},"9":{"start":{"line":72,"column":25},"end":{"line":72,"column":46}},"10":{"start":{"line":74,"column":25},"end":{"line":74,"column":112}},"11":{"start":{"line":74,"column":58},"end":{"line":74,"column":100}},"12":{"start":{"line":75,"column":8},"end":{"line":92,"column":10}},"13":{"start":{"line":95,"column":47},"end":{"line":306,"column":1}},"14":{"start":{"line":309,"column":19},"end":{"line":309,"column":21}},"15":{"start":{"line":310,"column":4},"end":{"line":317,"column":7}},"16":{"start":{"line":311,"column":25},"end":{"line":311,"column":35}},"17":{"start":{"line":311,"column":50},"end":{"line":311,"column":60}},"18":{"start":{"line":311,"column":77},"end":{"line":311,"column":87}},"19":{"start":{"line":312,"column":20},"end":{"line":312,"column":59}},"20":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"21":{"start":{"line":315,"column":12},"end":{"line":315,"column":41}},"22":{"start":{"line":318,"column":4},"end":{"line":318,"column":36}},"23":{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},"24":{"start":{"line":323,"column":8},"end":{"line":323,"column":40}},"25":{"start":{"line":324,"column":8},"end":{"line":331,"column":11}},"26":{"start":{"line":325,"column":29},"end":{"line":325,"column":39}},"27":{"start":{"line":325,"column":54},"end":{"line":325,"column":64}},"28":{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},"29":{"start":{"line":327,"column":16},"end":{"line":327,"column":76}},"30":{"start":{"line":329,"column":16},"end":{"line":329,"column":66}},"31":{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},"32":{"start":{"line":334,"column":12},"end":{"line":334,"column":58}},"33":{"start":{"line":340,"column":19},"end":{"line":340,"column":21}},"34":{"start":{"line":341,"column":4},"end":{"line":353,"column":7}},"35":{"start":{"line":342,"column":25},"end":{"line":342,"column":35}},"36":{"start":{"line":342,"column":50},"end":{"line":342,"column":60}},"37":{"start":{"line":342,"column":77},"end":{"line":342,"column":87}},"38":{"start":{"line":343,"column":24},"end":{"line":343,"column":34}},"39":{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},"40":{"start":{"line":345,"column":12},"end":{"line":345,"column":63}},"41":{"start":{"line":347,"column":30},"end":{"line":347,"column":78}},"42":{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},"43":{"start":{"line":349,"column":16},"end":{"line":349,"column":67}},"44":{"start":{"line":351,"column":12},"end":{"line":351,"column":62}},"45":{"start":{"line":355,"column":4},"end":{"line":355,"column":20}},"46":{"start":{"line":360,"column":8},"end":{"line":360,"column":25}},"47":{"start":{"line":361,"column":8},"end":{"line":361,"column":27}},"48":{"start":{"line":365,"column":8},"end":{"line":365,"column":44}},"49":{"start":{"line":366,"column":8},"end":{"line":366,"column":27}},"50":{"start":{"line":371,"column":8},"end":{"line":371,"column":60}},"51":{"start":{"line":377,"column":8},"end":{"line":377,"column":33}},"52":{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},"53":{"start":{"line":379,"column":12},"end":{"line":379,"column":30}},"54":{"start":{"line":382,"column":12},"end":{"line":382,"column":31}},"55":{"start":{"line":387,"column":8},"end":{"line":387,"column":33}},"56":{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},"57":{"start":{"line":389,"column":12},"end":{"line":389,"column":30}},"58":{"start":{"line":392,"column":12},"end":{"line":392,"column":31}},"59":{"start":{"line":401,"column":8},"end":{"line":401,"column":43}},"60":{"start":{"line":405,"column":34},"end":{"line":410,"column":1}}},"fnMap":{"0":{"name":"getDocumentation","decl":{"start":{"line":52,"column":9},"end":{"line":52,"column":25}},"loc":{"start":{"line":52,"column":32},"end":{"line":59,"column":1}},"line":52},"1":{"name":"makeStartViewTab","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":25}},"loc":{"start":{"line":61,"column":44},"end":{"line":68,"column":1}},"line":61},"2":{"name":"(anonymous_2)","decl":{"start":{"line":72,"column":12},"end":{"line":72,"column":13}},"loc":{"start":{"line":72,"column":25},"end":{"line":72,"column":46}},"line":72},"3":{"name":"(anonymous_3)","decl":{"start":{"line":73,"column":9},"end":{"line":73,"column":10}},"loc":{"start":{"line":73,"column":22},"end":{"line":93,"column":5}},"line":73},"4":{"name":"(anonymous_4)","decl":{"start":{"line":74,"column":51},"end":{"line":74,"column":52}},"loc":{"start":{"line":74,"column":58},"end":{"line":74,"column":100}},"line":74},"5":{"name":"saveAssignmentSettings","decl":{"start":{"line":308,"column":16},"end":{"line":308,"column":38}},"loc":{"start":{"line":308,"column":46},"end":{"line":319,"column":1}},"line":308},"6":{"name":"(anonymous_6)","decl":{"start":{"line":310,"column":32},"end":{"line":310,"column":33}},"loc":{"start":{"line":310,"column":43},"end":{"line":317,"column":5}},"line":310},"7":{"name":"loadAssignmentSettings","decl":{"start":{"line":321,"column":16},"end":{"line":321,"column":38}},"loc":{"start":{"line":321,"column":56},"end":{"line":337,"column":1}},"line":321},"8":{"name":"(anonymous_8)","decl":{"start":{"line":324,"column":36},"end":{"line":324,"column":37}},"loc":{"start":{"line":324,"column":47},"end":{"line":331,"column":9}},"line":324},"9":{"name":"makeAssignmentSettingsModel","decl":{"start":{"line":339,"column":16},"end":{"line":339,"column":43}},"loc":{"start":{"line":339,"column":59},"end":{"line":356,"column":1}},"line":339},"10":{"name":"(anonymous_10)","decl":{"start":{"line":341,"column":32},"end":{"line":341,"column":33}},"loc":{"start":{"line":341,"column":43},"end":{"line":353,"column":5}},"line":341},"11":{"name":"(anonymous_11)","decl":{"start":{"line":359,"column":4},"end":{"line":359,"column":5}},"loc":{"start":{"line":359,"column":27},"end":{"line":362,"column":5}},"line":359},"12":{"name":"(anonymous_12)","decl":{"start":{"line":364,"column":4},"end":{"line":364,"column":5}},"loc":{"start":{"line":364,"column":34},"end":{"line":374,"column":5}},"line":364},"13":{"name":"(anonymous_13)","decl":{"start":{"line":376,"column":4},"end":{"line":376,"column":5}},"loc":{"start":{"line":376,"column":30},"end":{"line":384,"column":5}},"line":376},"14":{"name":"(anonymous_14)","decl":{"start":{"line":386,"column":4},"end":{"line":386,"column":5}},"loc":{"start":{"line":386,"column":24},"end":{"line":394,"column":5}},"line":386},"15":{"name":"(anonymous_15)","decl":{"start":{"line":396,"column":4},"end":{"line":396,"column":5}},"loc":{"start":{"line":396,"column":44},"end":{"line":402,"column":5}},"line":396}},"branchMap":{"0":{"loc":{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":56,"column":9}},{"start":{},"end":{}}],"line":54},"1":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{},"end":{}}],"line":314},"2":{"loc":{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},"type":"if","locations":[{"start":{"line":322,"column":4},"end":{"line":336,"column":5}},{"start":{},"end":{}}],"line":322},"3":{"loc":{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},"type":"if","locations":[{"start":{"line":326,"column":12},"end":{"line":330,"column":13}},{"start":{"line":328,"column":19},"end":{"line":330,"column":13}}],"line":326},"4":{"loc":{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},"type":"if","locations":[{"start":{"line":333,"column":8},"end":{"line":335,"column":9}},{"start":{},"end":{}}],"line":333},"5":{"loc":{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},"type":"if","locations":[{"start":{"line":344,"column":8},"end":{"line":352,"column":9}},{"start":{"line":346,"column":15},"end":{"line":352,"column":9}}],"line":344},"6":{"loc":{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},"type":"if","locations":[{"start":{"line":348,"column":12},"end":{"line":350,"column":13}},{"start":{},"end":{}}],"line":348},"7":{"loc":{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},"type":"if","locations":[{"start":{"line":378,"column":8},"end":{"line":383,"column":9}},{"start":{},"end":{}}],"line":378},"8":{"loc":{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},"type":"if","locations":[{"start":{"line":388,"column":8},"end":{"line":393,"column":9}},{"start":{},"end":{}}],"line":388}},"s":{"0":4,"1":4,"2":28,"3":28,"4":228,"5":28,"6":0,"7":12,"8":4,"9":140,"10":112,"11":268,"12":112,"13":4,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":4},"f":{"0":28,"1":12,"2":140,"3":112,"4":268,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[28,200],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"23d28c661eb902d518b7d53edefcbdfbc1fab63b"} -,"/home/runner/work/blockpy/blockpy/src/editor/default_header.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/default_header.js","statementMap":{"0":{"start":{"line":3,"column":30},"end":{"line":36,"column":1}}},"fnMap":{},"branchMap":{},"s":{"0":4},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4245a8851290ef3f486cd931c67e8088c272e7f2"} -,"/home/runner/work/blockpy/blockpy/src/editor/images.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/images.js","statementMap":{"0":{"start":{"line":4,"column":33},"end":{"line":111,"column":1}},"1":{"start":{"line":115,"column":8},"end":{"line":115,"column":25}},"2":{"start":{"line":117,"column":8},"end":{"line":117,"column":87}},"3":{"start":{"line":118,"column":8},"end":{"line":118,"column":95}},"4":{"start":{"line":119,"column":8},"end":{"line":119,"column":89}},"5":{"start":{"line":121,"column":8},"end":{"line":123,"column":11}},"6":{"start":{"line":122,"column":12},"end":{"line":122,"column":67}},"7":{"start":{"line":127,"column":8},"end":{"line":127,"column":44}},"8":{"start":{"line":129,"column":28},"end":{"line":129,"column":67}},"9":{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},"10":{"start":{"line":131,"column":12},"end":{"line":131,"column":32}},"11":{"start":{"line":134,"column":8},"end":{"line":134,"column":92}},"12":{"start":{"line":175,"column":8},"end":{"line":192,"column":11}},"13":{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},"14":{"start":{"line":177,"column":16},"end":{"line":177,"column":70}},"15":{"start":{"line":178,"column":16},"end":{"line":178,"column":80}},"16":{"start":{"line":190,"column":16},"end":{"line":190,"column":91}},"17":{"start":{"line":209,"column":8},"end":{"line":220,"column":9}},"18":{"start":{"line":211,"column":16},"end":{"line":211,"column":55}},"19":{"start":{"line":213,"column":16},"end":{"line":213,"column":55}},"20":{"start":{"line":215,"column":16},"end":{"line":215,"column":51}},"21":{"start":{"line":217,"column":16},"end":{"line":217,"column":49}},"22":{"start":{"line":219,"column":16},"end":{"line":219,"column":28}},"23":{"start":{"line":224,"column":8},"end":{"line":236,"column":10}},"24":{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},"25":{"start":{"line":231,"column":20},"end":{"line":231,"column":40}},"26":{"start":{"line":233,"column":20},"end":{"line":233,"column":87}},"27":{"start":{"line":240,"column":32},"end":{"line":240,"column":40}},"28":{"start":{"line":241,"column":28},"end":{"line":241,"column":77}},"29":{"start":{"line":242,"column":8},"end":{"line":255,"column":10}},"30":{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},"31":{"start":{"line":249,"column":20},"end":{"line":249,"column":40}},"32":{"start":{"line":251,"column":20},"end":{"line":251,"column":86}},"33":{"start":{"line":258,"column":32},"end":{"line":258,"column":40}},"34":{"start":{"line":259,"column":28},"end":{"line":259,"column":77}},"35":{"start":{"line":260,"column":28},"end":{"line":260,"column":85}},"36":{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},"37":{"start":{"line":262,"column":12},"end":{"line":274,"column":14}},"38":{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},"39":{"start":{"line":269,"column":24},"end":{"line":269,"column":44}},"40":{"start":{"line":271,"column":24},"end":{"line":271,"column":90}},"41":{"start":{"line":280,"column":8},"end":{"line":280,"column":43}},"42":{"start":{"line":281,"column":8},"end":{"line":281,"column":43}},"43":{"start":{"line":288,"column":27},"end":{"line":293,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":27},"end":{"line":124,"column":5}},"line":114},"1":{"name":"(anonymous_1)","decl":{"start":{"line":121,"column":46},"end":{"line":121,"column":47}},"loc":{"start":{"line":121,"column":57},"end":{"line":123,"column":9}},"line":121},"2":{"name":"(anonymous_2)","decl":{"start":{"line":126,"column":4},"end":{"line":126,"column":5}},"loc":{"start":{"line":126,"column":34},"end":{"line":172,"column":5}},"line":126},"3":{"name":"(anonymous_3)","decl":{"start":{"line":174,"column":4},"end":{"line":174,"column":5}},"loc":{"start":{"line":174,"column":19},"end":{"line":193,"column":5}},"line":174},"4":{"name":"(anonymous_4)","decl":{"start":{"line":175,"column":54},"end":{"line":175,"column":55}},"loc":{"start":{"line":175,"column":68},"end":{"line":192,"column":9}},"line":175},"5":{"name":"(anonymous_5)","decl":{"start":{"line":195,"column":4},"end":{"line":195,"column":5}},"loc":{"start":{"line":195,"column":30},"end":{"line":197,"column":5}},"line":195},"6":{"name":"(anonymous_6)","decl":{"start":{"line":199,"column":4},"end":{"line":199,"column":5}},"loc":{"start":{"line":199,"column":24},"end":{"line":206,"column":5}},"line":199},"7":{"name":"(anonymous_7)","decl":{"start":{"line":208,"column":4},"end":{"line":208,"column":5}},"loc":{"start":{"line":208,"column":37},"end":{"line":221,"column":5}},"line":208},"8":{"name":"(anonymous_8)","decl":{"start":{"line":223,"column":4},"end":{"line":223,"column":5}},"loc":{"start":{"line":223,"column":22},"end":{"line":237,"column":5}},"line":223},"9":{"name":"(anonymous_9)","decl":{"start":{"line":229,"column":12},"end":{"line":229,"column":13}},"loc":{"start":{"line":229,"column":26},"end":{"line":235,"column":13}},"line":229},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":4},"end":{"line":239,"column":5}},"loc":{"start":{"line":239,"column":25},"end":{"line":256,"column":5}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":247,"column":12},"end":{"line":247,"column":13}},"loc":{"start":{"line":247,"column":26},"end":{"line":253,"column":13}},"line":247},"12":{"name":"(anonymous_12)","decl":{"start":{"line":257,"column":4},"end":{"line":257,"column":5}},"loc":{"start":{"line":257,"column":25},"end":{"line":276,"column":5}},"line":257},"13":{"name":"(anonymous_13)","decl":{"start":{"line":267,"column":16},"end":{"line":267,"column":17}},"loc":{"start":{"line":267,"column":30},"end":{"line":273,"column":17}},"line":267},"14":{"name":"(anonymous_14)","decl":{"start":{"line":278,"column":4},"end":{"line":278,"column":5}},"loc":{"start":{"line":278,"column":44},"end":{"line":285,"column":5}},"line":278}},"branchMap":{"0":{"loc":{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},"type":"if","locations":[{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},{"start":{},"end":{}}],"line":130},"1":{"loc":{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},"type":"if","locations":[{"start":{"line":176,"column":12},"end":{"line":191,"column":13}},{"start":{"line":189,"column":19},"end":{"line":191,"column":13}}],"line":176},"2":{"loc":{"start":{"line":209,"column":8},"end":{"line":220,"column":9}},"type":"switch","locations":[{"start":{"line":210,"column":12},"end":{"line":211,"column":55}},{"start":{"line":212,"column":12},"end":{"line":213,"column":55}},{"start":{"line":214,"column":12},"end":{"line":215,"column":51}},{"start":{"line":216,"column":12},"end":{"line":217,"column":49}},{"start":{"line":218,"column":12},"end":{"line":219,"column":28}}],"line":209},"3":{"loc":{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},"type":"if","locations":[{"start":{"line":230,"column":16},"end":{"line":234,"column":17}},{"start":{"line":232,"column":23},"end":{"line":234,"column":17}}],"line":230},"4":{"loc":{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},"type":"if","locations":[{"start":{"line":248,"column":16},"end":{"line":252,"column":17}},{"start":{"line":250,"column":23},"end":{"line":252,"column":17}}],"line":248},"5":{"loc":{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},"type":"if","locations":[{"start":{"line":261,"column":8},"end":{"line":275,"column":9}},{"start":{},"end":{}}],"line":261},"6":{"loc":{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},"type":"if","locations":[{"start":{"line":268,"column":20},"end":{"line":272,"column":21}},{"start":{"line":270,"column":27},"end":{"line":272,"column":21}}],"line":268}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0,0,0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"05e1b67c09dfdc317795f36231ba3b7c2fab9709"} -,"/home/runner/work/blockpy/blockpy/src/editor/json.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/json.js","statementMap":{"0":{"start":{"line":4,"column":32},"end":{"line":9,"column":1}},"1":{"start":{"line":13,"column":8},"end":{"line":13,"column":25}},"2":{"start":{"line":14,"column":8},"end":{"line":36,"column":11}},"3":{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},"4":{"start":{"line":27,"column":24},"end":{"line":27,"column":58}},"5":{"start":{"line":29,"column":24},"end":{"line":29,"column":48}},"6":{"start":{"line":33,"column":20},"end":{"line":33,"column":76}},"7":{"start":{"line":37,"column":8},"end":{"line":37,"column":27}},"8":{"start":{"line":41,"column":8},"end":{"line":41,"column":44}},"9":{"start":{"line":42,"column":8},"end":{"line":42,"column":27}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":46}},"11":{"start":{"line":45,"column":8},"end":{"line":45,"column":92}},"12":{"start":{"line":47,"column":8},"end":{"line":47,"column":60}},"13":{"start":{"line":48,"column":8},"end":{"line":48,"column":59}},"14":{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},"15":{"start":{"line":51,"column":12},"end":{"line":51,"column":73}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":116}},"17":{"start":{"line":59,"column":8},"end":{"line":59,"column":33}},"18":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"19":{"start":{"line":61,"column":12},"end":{"line":61,"column":30}},"20":{"start":{"line":62,"column":12},"end":{"line":62,"column":50}},"21":{"start":{"line":63,"column":12},"end":{"line":63,"column":38}},"22":{"start":{"line":64,"column":12},"end":{"line":64,"column":31}},"23":{"start":{"line":69,"column":8},"end":{"line":69,"column":33}},"24":{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},"25":{"start":{"line":71,"column":12},"end":{"line":71,"column":30}},"26":{"start":{"line":72,"column":12},"end":{"line":72,"column":57}},"27":{"start":{"line":73,"column":12},"end":{"line":73,"column":31}},"28":{"start":{"line":79,"column":8},"end":{"line":79,"column":43}},"29":{"start":{"line":80,"column":8},"end":{"line":80,"column":60}},"30":{"start":{"line":81,"column":8},"end":{"line":81,"column":53}},"31":{"start":{"line":82,"column":8},"end":{"line":82,"column":43}},"32":{"start":{"line":86,"column":26},"end":{"line":91,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":27},"end":{"line":38,"column":5}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":23},"end":{"line":25,"column":24}},"loc":{"start":{"line":25,"column":37},"end":{"line":31,"column":17}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":23},"end":{"line":32,"column":24}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":17}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":34},"end":{"line":56,"column":5}},"line":40},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":30},"end":{"line":66,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":68,"column":4},"end":{"line":68,"column":5}},"loc":{"start":{"line":68,"column":24},"end":{"line":75,"column":5}},"line":68},"6":{"name":"(anonymous_6)","decl":{"start":{"line":77,"column":4},"end":{"line":77,"column":5}},"loc":{"start":{"line":77,"column":44},"end":{"line":83,"column":5}},"line":77}},"branchMap":{"0":{"loc":{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},"type":"if","locations":[{"start":{"line":26,"column":20},"end":{"line":30,"column":21}},{"start":{"line":28,"column":27},"end":{"line":30,"column":21}}],"line":26},"1":{"loc":{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":52,"column":9}},{"start":{},"end":{}}],"line":49},"2":{"loc":{"start":{"line":54,"column":46},"end":{"line":54,"column":114}},"type":"binary-expr","locations":[{"start":{"line":54,"column":46},"end":{"line":54,"column":73}},{"start":{"line":54,"column":77},"end":{"line":54,"column":114}}],"line":54},"3":{"loc":{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":65,"column":9}},{"start":{},"end":{}}],"line":60},"4":{"loc":{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":74,"column":9}},{"start":{},"end":{}}],"line":70}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c4269f9e7b35fa5faa85be9786bb3095a8838fb8"} -,"/home/runner/work/blockpy/blockpy/src/editor/markdown.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/markdown.js","statementMap":{"0":{"start":{"line":4,"column":36},"end":{"line":7,"column":1}},"1":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"2":{"start":{"line":13,"column":8},"end":{"line":25,"column":11}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":27}},"4":{"start":{"line":30,"column":8},"end":{"line":30,"column":44}},"5":{"start":{"line":31,"column":8},"end":{"line":31,"column":27}},"6":{"start":{"line":32,"column":8},"end":{"line":32,"column":46}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":92}},"8":{"start":{"line":36,"column":8},"end":{"line":36,"column":60}},"9":{"start":{"line":37,"column":8},"end":{"line":37,"column":63}},"10":{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},"11":{"start":{"line":40,"column":12},"end":{"line":40,"column":81}},"12":{"start":{"line":45,"column":8},"end":{"line":45,"column":33}},"13":{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},"14":{"start":{"line":47,"column":12},"end":{"line":47,"column":30}},"15":{"start":{"line":48,"column":12},"end":{"line":48,"column":40}},"16":{"start":{"line":49,"column":12},"end":{"line":49,"column":42}},"17":{"start":{"line":50,"column":12},"end":{"line":50,"column":31}},"18":{"start":{"line":55,"column":8},"end":{"line":55,"column":33}},"19":{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},"20":{"start":{"line":57,"column":12},"end":{"line":57,"column":30}},"21":{"start":{"line":58,"column":12},"end":{"line":58,"column":47}},"22":{"start":{"line":59,"column":12},"end":{"line":59,"column":31}},"23":{"start":{"line":65,"column":8},"end":{"line":65,"column":43}},"24":{"start":{"line":66,"column":8},"end":{"line":66,"column":64}},"25":{"start":{"line":67,"column":8},"end":{"line":67,"column":43}},"26":{"start":{"line":71,"column":30},"end":{"line":76,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":27},"end":{"line":27,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":29,"column":4},"end":{"line":29,"column":5}},"loc":{"start":{"line":29,"column":34},"end":{"line":42,"column":5}},"line":29},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":30},"end":{"line":52,"column":5}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":54,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":54,"column":24},"end":{"line":61,"column":5}},"line":54},"4":{"name":"(anonymous_4)","decl":{"start":{"line":63,"column":4},"end":{"line":63,"column":5}},"loc":{"start":{"line":63,"column":44},"end":{"line":68,"column":5}},"line":63}},"branchMap":{"0":{"loc":{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":41,"column":9}},{"start":{},"end":{}}],"line":38},"1":{"loc":{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":51,"column":9}},{"start":{},"end":{}}],"line":46},"2":{"loc":{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":60,"column":9}},{"start":{},"end":{}}],"line":56}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9ff6db90e0dc988759c4c48aff38334d278f6e84"} -,"/home/runner/work/blockpy/blockpy/src/editor/python.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/python.js","statementMap":{"0":{"start":{"line":15,"column":26},"end":{"line":19,"column":1}},"1":{"start":{"line":22,"column":4},"end":{"line":27,"column":22}},"2":{"start":{"line":30,"column":34},"end":{"line":157,"column":1}},"3":{"start":{"line":162,"column":16},"end":{"line":162,"column":32}},"4":{"start":{"line":163,"column":19},"end":{"line":171,"column":5}},"5":{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},"6":{"start":{"line":165,"column":12},"end":{"line":166,"column":48}},"7":{"start":{"line":168,"column":12},"end":{"line":169,"column":41}},"8":{"start":{"line":172,"column":21},"end":{"line":179,"column":5}},"9":{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},"10":{"start":{"line":174,"column":12},"end":{"line":174,"column":42}},"11":{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},"12":{"start":{"line":177,"column":12},"end":{"line":177,"column":54}},"13":{"start":{"line":180,"column":4},"end":{"line":180,"column":67}},"14":{"start":{"line":185,"column":8},"end":{"line":185,"column":61}},"15":{"start":{"line":186,"column":8},"end":{"line":186,"column":74}},"16":{"start":{"line":187,"column":8},"end":{"line":214,"column":11}},"17":{"start":{"line":195,"column":16},"end":{"line":195,"column":30}},"18":{"start":{"line":199,"column":16},"end":{"line":207,"column":19}},"19":{"start":{"line":200,"column":41},"end":{"line":200,"column":67}},"20":{"start":{"line":201,"column":20},"end":{"line":204,"column":23}},"21":{"start":{"line":202,"column":24},"end":{"line":202,"column":67}},"22":{"start":{"line":211,"column":16},"end":{"line":211,"column":37}},"23":{"start":{"line":217,"column":8},"end":{"line":217,"column":27}},"24":{"start":{"line":218,"column":8},"end":{"line":218,"column":30}},"25":{"start":{"line":219,"column":8},"end":{"line":219,"column":33}},"26":{"start":{"line":220,"column":8},"end":{"line":220,"column":42}},"27":{"start":{"line":221,"column":8},"end":{"line":221,"column":46}},"28":{"start":{"line":222,"column":8},"end":{"line":222,"column":42}},"29":{"start":{"line":223,"column":8},"end":{"line":223,"column":66}},"30":{"start":{"line":225,"column":8},"end":{"line":225,"column":46}},"31":{"start":{"line":229,"column":8},"end":{"line":235,"column":10}},"32":{"start":{"line":230,"column":12},"end":{"line":234,"column":15}},"33":{"start":{"line":233,"column":32},"end":{"line":233,"column":77}},"34":{"start":{"line":239,"column":26},"end":{"line":239,"column":39}},"35":{"start":{"line":240,"column":8},"end":{"line":240,"column":44}},"36":{"start":{"line":241,"column":8},"end":{"line":241,"column":27}},"37":{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},"38":{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},"39":{"start":{"line":245,"column":16},"end":{"line":245,"column":74}},"40":{"start":{"line":247,"column":12},"end":{"line":247,"column":66}},"41":{"start":{"line":249,"column":12},"end":{"line":249,"column":67}},"42":{"start":{"line":252,"column":8},"end":{"line":252,"column":46}},"43":{"start":{"line":255,"column":8},"end":{"line":255,"column":92}},"44":{"start":{"line":258,"column":8},"end":{"line":258,"column":62}},"45":{"start":{"line":259,"column":8},"end":{"line":259,"column":58}},"46":{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},"47":{"start":{"line":262,"column":12},"end":{"line":262,"column":44}},"48":{"start":{"line":262,"column":38},"end":{"line":262,"column":43}},"49":{"start":{"line":264,"column":12},"end":{"line":264,"column":78}},"50":{"start":{"line":266,"column":12},"end":{"line":268,"column":15}},"51":{"start":{"line":267,"column":16},"end":{"line":267,"column":79}},"52":{"start":{"line":269,"column":12},"end":{"line":271,"column":14}},"53":{"start":{"line":270,"column":16},"end":{"line":270,"column":75}},"54":{"start":{"line":273,"column":12},"end":{"line":276,"column":15}},"55":{"start":{"line":274,"column":16},"end":{"line":274,"column":68}},"56":{"start":{"line":275,"column":16},"end":{"line":275,"column":73}},"57":{"start":{"line":284,"column":8},"end":{"line":284,"column":47}},"58":{"start":{"line":284,"column":25},"end":{"line":284,"column":42}},"59":{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},"60":{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},"61":{"start":{"line":290,"column":16},"end":{"line":290,"column":49}},"62":{"start":{"line":293,"column":16},"end":{"line":293,"column":33}},"63":{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},"64":{"start":{"line":297,"column":12},"end":{"line":297,"column":78}},"65":{"start":{"line":298,"column":12},"end":{"line":298,"column":19}},"66":{"start":{"line":300,"column":8},"end":{"line":300,"column":33}},"67":{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},"68":{"start":{"line":302,"column":12},"end":{"line":302,"column":30}},"69":{"start":{"line":303,"column":12},"end":{"line":303,"column":41}},"70":{"start":{"line":305,"column":12},"end":{"line":305,"column":31}},"71":{"start":{"line":310,"column":8},"end":{"line":310,"column":40}},"72":{"start":{"line":312,"column":8},"end":{"line":312,"column":33}},"73":{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},"74":{"start":{"line":314,"column":12},"end":{"line":314,"column":30}},"75":{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},"76":{"start":{"line":316,"column":16},"end":{"line":316,"column":52}},"77":{"start":{"line":318,"column":12},"end":{"line":318,"column":31}},"78":{"start":{"line":324,"column":8},"end":{"line":324,"column":27}},"79":{"start":{"line":325,"column":8},"end":{"line":325,"column":43}},"80":{"start":{"line":326,"column":8},"end":{"line":326,"column":61}},"81":{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},"82":{"start":{"line":328,"column":12},"end":{"line":328,"column":67}},"83":{"start":{"line":330,"column":8},"end":{"line":330,"column":38}},"84":{"start":{"line":331,"column":8},"end":{"line":331,"column":43}},"85":{"start":{"line":335,"column":8},"end":{"line":335,"column":40}},"86":{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},"87":{"start":{"line":337,"column":12},"end":{"line":337,"column":49}},"88":{"start":{"line":338,"column":12},"end":{"line":338,"column":46}},"89":{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},"90":{"start":{"line":341,"column":12},"end":{"line":341,"column":53}},"91":{"start":{"line":342,"column":12},"end":{"line":342,"column":50}},"92":{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},"93":{"start":{"line":345,"column":12},"end":{"line":345,"column":49}},"94":{"start":{"line":346,"column":12},"end":{"line":346,"column":46}},"95":{"start":{"line":351,"column":8},"end":{"line":351,"column":62}},"96":{"start":{"line":352,"column":8},"end":{"line":354,"column":11}},"97":{"start":{"line":353,"column":12},"end":{"line":353,"column":34}},"98":{"start":{"line":355,"column":8},"end":{"line":361,"column":11}},"99":{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},"100":{"start":{"line":357,"column":16},"end":{"line":357,"column":51}},"101":{"start":{"line":359,"column":16},"end":{"line":359,"column":70}},"102":{"start":{"line":362,"column":8},"end":{"line":362,"column":93}},"103":{"start":{"line":363,"column":8},"end":{"line":365,"column":11}},"104":{"start":{"line":364,"column":12},"end":{"line":364,"column":44}},"105":{"start":{"line":368,"column":8},"end":{"line":368,"column":30}},"106":{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},"107":{"start":{"line":370,"column":12},"end":{"line":370,"column":34}},"108":{"start":{"line":372,"column":8},"end":{"line":380,"column":11}},"109":{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},"110":{"start":{"line":374,"column":16},"end":{"line":374,"column":38}},"111":{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},"112":{"start":{"line":376,"column":16},"end":{"line":376,"column":62}},"113":{"start":{"line":377,"column":16},"end":{"line":377,"column":56}},"114":{"start":{"line":378,"column":16},"end":{"line":378,"column":38}},"115":{"start":{"line":384,"column":8},"end":{"line":384,"column":64}},"116":{"start":{"line":385,"column":8},"end":{"line":385,"column":54}},"117":{"start":{"line":386,"column":8},"end":{"line":386,"column":43}},"118":{"start":{"line":387,"column":8},"end":{"line":387,"column":48}},"119":{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},"120":{"start":{"line":392,"column":32},"end":{"line":392,"column":91}},"121":{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},"122":{"start":{"line":394,"column":16},"end":{"line":394,"column":34}},"123":{"start":{"line":396,"column":16},"end":{"line":401,"column":17}},"124":{"start":{"line":397,"column":20},"end":{"line":397,"column":65}},"125":{"start":{"line":399,"column":20},"end":{"line":399,"column":37}},"126":{"start":{"line":400,"column":20},"end":{"line":400,"column":40}},"127":{"start":{"line":404,"column":8},"end":{"line":404,"column":48}},"128":{"start":{"line":406,"column":8},"end":{"line":412,"column":9}},"129":{"start":{"line":407,"column":12},"end":{"line":407,"column":48}},"130":{"start":{"line":409,"column":12},"end":{"line":409,"column":29}},"131":{"start":{"line":410,"column":12},"end":{"line":410,"column":52}},"132":{"start":{"line":411,"column":12},"end":{"line":411,"column":48}},"133":{"start":{"line":416,"column":8},"end":{"line":418,"column":11}},"134":{"start":{"line":417,"column":12},"end":{"line":417,"column":57}},"135":{"start":{"line":419,"column":8},"end":{"line":421,"column":11}},"136":{"start":{"line":420,"column":12},"end":{"line":420,"column":57}},"137":{"start":{"line":422,"column":8},"end":{"line":424,"column":11}},"138":{"start":{"line":428,"column":20},"end":{"line":428,"column":35}},"139":{"start":{"line":429,"column":8},"end":{"line":431,"column":10}},"140":{"start":{"line":435,"column":8},"end":{"line":435,"column":35}},"141":{"start":{"line":436,"column":8},"end":{"line":436,"column":40}},"142":{"start":{"line":440,"column":23},"end":{"line":440,"column":44}},"143":{"start":{"line":441,"column":19},"end":{"line":441,"column":38}},"144":{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},"145":{"start":{"line":443,"column":12},"end":{"line":443,"column":46}},"146":{"start":{"line":445,"column":8},"end":{"line":445,"column":91}},"147":{"start":{"line":446,"column":8},"end":{"line":446,"column":31}},"148":{"start":{"line":447,"column":8},"end":{"line":447,"column":42}},"149":{"start":{"line":452,"column":21},"end":{"line":452,"column":41}},"150":{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},"151":{"start":{"line":454,"column":12},"end":{"line":454,"column":70}},"152":{"start":{"line":456,"column":8},"end":{"line":456,"column":42}},"153":{"start":{"line":457,"column":8},"end":{"line":457,"column":89}},"154":{"start":{"line":458,"column":8},"end":{"line":458,"column":22}},"155":{"start":{"line":463,"column":28},"end":{"line":468,"column":1}}},"fnMap":{"0":{"name":"makeTab","decl":{"start":{"line":21,"column":9},"end":{"line":21,"column":16}},"loc":{"start":{"line":21,"column":35},"end":{"line":28,"column":1}},"line":21},"1":{"name":"convertIpynbToPython","decl":{"start":{"line":161,"column":9},"end":{"line":161,"column":29}},"loc":{"start":{"line":161,"column":36},"end":{"line":181,"column":1}},"line":161},"2":{"name":"(anonymous_2)","decl":{"start":{"line":163,"column":19},"end":{"line":163,"column":20}},"loc":{"start":{"line":163,"column":34},"end":{"line":171,"column":5}},"line":163},"3":{"name":"(anonymous_3)","decl":{"start":{"line":172,"column":21},"end":{"line":172,"column":22}},"loc":{"start":{"line":172,"column":36},"end":{"line":179,"column":5}},"line":172},"4":{"name":"(anonymous_4)","decl":{"start":{"line":184,"column":4},"end":{"line":184,"column":5}},"loc":{"start":{"line":184,"column":27},"end":{"line":226,"column":5}},"line":184},"5":{"name":"(anonymous_5)","decl":{"start":{"line":194,"column":31},"end":{"line":194,"column":32}},"loc":{"start":{"line":194,"column":43},"end":{"line":196,"column":13}},"line":194},"6":{"name":"(anonymous_6)","decl":{"start":{"line":197,"column":29},"end":{"line":197,"column":30}},"loc":{"start":{"line":197,"column":39},"end":{"line":208,"column":13}},"line":197},"7":{"name":"(anonymous_7)","decl":{"start":{"line":199,"column":35},"end":{"line":199,"column":36}},"loc":{"start":{"line":199,"column":56},"end":{"line":207,"column":17}},"line":199},"8":{"name":"(anonymous_8)","decl":{"start":{"line":201,"column":99},"end":{"line":201,"column":100}},"loc":{"start":{"line":201,"column":113},"end":{"line":204,"column":21}},"line":201},"9":{"name":"(anonymous_9)","decl":{"start":{"line":209,"column":30},"end":{"line":209,"column":31}},"loc":{"start":{"line":209,"column":42},"end":{"line":212,"column":13}},"line":209},"10":{"name":"(anonymous_10)","decl":{"start":{"line":228,"column":4},"end":{"line":228,"column":5}},"loc":{"start":{"line":228,"column":28},"end":{"line":236,"column":5}},"line":228},"11":{"name":"(anonymous_11)","decl":{"start":{"line":229,"column":61},"end":{"line":229,"column":62}},"loc":{"start":{"line":229,"column":74},"end":{"line":235,"column":9}},"line":229},"12":{"name":"(anonymous_12)","decl":{"start":{"line":233,"column":26},"end":{"line":233,"column":27}},"loc":{"start":{"line":233,"column":32},"end":{"line":233,"column":77}},"line":233},"13":{"name":"(anonymous_13)","decl":{"start":{"line":238,"column":4},"end":{"line":238,"column":5}},"loc":{"start":{"line":238,"column":34},"end":{"line":285,"column":5}},"line":238},"14":{"name":"(anonymous_14)","decl":{"start":{"line":262,"column":32},"end":{"line":262,"column":33}},"loc":{"start":{"line":262,"column":38},"end":{"line":262,"column":43}},"line":262},"15":{"name":"(anonymous_15)","decl":{"start":{"line":266,"column":97},"end":{"line":266,"column":98}},"loc":{"start":{"line":266,"column":107},"end":{"line":268,"column":13}},"line":266},"16":{"name":"(anonymous_16)","decl":{"start":{"line":269,"column":105},"end":{"line":269,"column":106}},"loc":{"start":{"line":270,"column":16},"end":{"line":270,"column":75}},"line":270},"17":{"name":"(anonymous_17)","decl":{"start":{"line":273,"column":92},"end":{"line":273,"column":93}},"loc":{"start":{"line":273,"column":103},"end":{"line":276,"column":13}},"line":273},"18":{"name":"(anonymous_18)","decl":{"start":{"line":284,"column":19},"end":{"line":284,"column":20}},"loc":{"start":{"line":284,"column":25},"end":{"line":284,"column":42}},"line":284},"19":{"name":"(anonymous_19)","decl":{"start":{"line":287,"column":4},"end":{"line":287,"column":5}},"loc":{"start":{"line":287,"column":30},"end":{"line":307,"column":5}},"line":287},"20":{"name":"(anonymous_20)","decl":{"start":{"line":309,"column":4},"end":{"line":309,"column":5}},"loc":{"start":{"line":309,"column":24},"end":{"line":320,"column":5}},"line":309},"21":{"name":"(anonymous_21)","decl":{"start":{"line":322,"column":4},"end":{"line":322,"column":5}},"loc":{"start":{"line":322,"column":44},"end":{"line":332,"column":5}},"line":322},"22":{"name":"(anonymous_22)","decl":{"start":{"line":334,"column":4},"end":{"line":334,"column":5}},"loc":{"start":{"line":334,"column":29},"end":{"line":348,"column":5}},"line":334},"23":{"name":"(anonymous_23)","decl":{"start":{"line":350,"column":4},"end":{"line":350,"column":5}},"loc":{"start":{"line":350,"column":24},"end":{"line":381,"column":5}},"line":350},"24":{"name":"(anonymous_24)","decl":{"start":{"line":352,"column":53},"end":{"line":352,"column":54}},"loc":{"start":{"line":352,"column":61},"end":{"line":354,"column":9}},"line":352},"25":{"name":"(anonymous_25)","decl":{"start":{"line":355,"column":67},"end":{"line":355,"column":68}},"loc":{"start":{"line":355,"column":78},"end":{"line":361,"column":9}},"line":355},"26":{"name":"(anonymous_26)","decl":{"start":{"line":363,"column":67},"end":{"line":363,"column":68}},"loc":{"start":{"line":363,"column":80},"end":{"line":365,"column":9}},"line":363},"27":{"name":"(anonymous_27)","decl":{"start":{"line":372,"column":49},"end":{"line":372,"column":50}},"loc":{"start":{"line":372,"column":67},"end":{"line":380,"column":9}},"line":372},"28":{"name":"(anonymous_28)","decl":{"start":{"line":383,"column":4},"end":{"line":383,"column":5}},"loc":{"start":{"line":383,"column":21},"end":{"line":388,"column":5}},"line":383},"29":{"name":"(anonymous_29)","decl":{"start":{"line":390,"column":4},"end":{"line":390,"column":5}},"loc":{"start":{"line":390,"column":27},"end":{"line":413,"column":5}},"line":390},"30":{"name":"(anonymous_30)","decl":{"start":{"line":415,"column":4},"end":{"line":415,"column":5}},"loc":{"start":{"line":415,"column":37},"end":{"line":425,"column":5}},"line":415},"31":{"name":"(anonymous_31)","decl":{"start":{"line":416,"column":53},"end":{"line":416,"column":54}},"loc":{"start":{"line":416,"column":66},"end":{"line":418,"column":9}},"line":416},"32":{"name":"(anonymous_32)","decl":{"start":{"line":419,"column":66},"end":{"line":419,"column":67}},"loc":{"start":{"line":419,"column":79},"end":{"line":421,"column":9}},"line":419},"33":{"name":"(anonymous_33)","decl":{"start":{"line":422,"column":55},"end":{"line":422,"column":56}},"loc":{"start":{"line":422,"column":68},"end":{"line":424,"column":9}},"line":422},"34":{"name":"(anonymous_34)","decl":{"start":{"line":427,"column":4},"end":{"line":427,"column":5}},"loc":{"start":{"line":427,"column":26},"end":{"line":432,"column":5}},"line":427},"35":{"name":"(anonymous_35)","decl":{"start":{"line":434,"column":4},"end":{"line":434,"column":5}},"loc":{"start":{"line":434,"column":28},"end":{"line":437,"column":5}},"line":434},"36":{"name":"(anonymous_36)","decl":{"start":{"line":439,"column":4},"end":{"line":439,"column":5}},"loc":{"start":{"line":439,"column":22},"end":{"line":449,"column":5}},"line":439},"37":{"name":"(anonymous_37)","decl":{"start":{"line":451,"column":4},"end":{"line":451,"column":5}},"loc":{"start":{"line":451,"column":19},"end":{"line":459,"column":5}},"line":451}},"branchMap":{"0":{"loc":{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":170,"column":9}},{"start":{"line":167,"column":15},"end":{"line":170,"column":9}}],"line":164},"1":{"loc":{"start":{"line":165,"column":19},"end":{"line":166,"column":47}},"type":"binary-expr","locations":[{"start":{"line":165,"column":19},"end":{"line":165,"column":41}},{"start":{"line":166,"column":16},"end":{"line":166,"column":47}}],"line":165},"2":{"loc":{"start":{"line":168,"column":19},"end":{"line":169,"column":40}},"type":"binary-expr","locations":[{"start":{"line":168,"column":19},"end":{"line":168,"column":48}},{"start":{"line":169,"column":16},"end":{"line":169,"column":40}}],"line":168},"3":{"loc":{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":173,"column":8},"end":{"line":178,"column":9}},{"start":{"line":175,"column":15},"end":{"line":178,"column":9}}],"line":173},"4":{"loc":{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":175,"column":15},"end":{"line":178,"column":9}},{"start":{},"end":{}}],"line":175},"5":{"loc":{"start":{"line":175,"column":19},"end":{"line":176,"column":36}},"type":"binary-expr","locations":[{"start":{"line":175,"column":19},"end":{"line":175,"column":48}},{"start":{"line":176,"column":12},"end":{"line":176,"column":36}}],"line":175},"6":{"loc":{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},"type":"if","locations":[{"start":{"line":243,"column":8},"end":{"line":250,"column":9}},{"start":{"line":248,"column":15},"end":{"line":250,"column":9}}],"line":243},"7":{"loc":{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},"type":"if","locations":[{"start":{"line":244,"column":12},"end":{"line":246,"column":13}},{"start":{},"end":{}}],"line":244},"8":{"loc":{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},"type":"if","locations":[{"start":{"line":261,"column":8},"end":{"line":277,"column":9}},{"start":{"line":263,"column":15},"end":{"line":277,"column":9}}],"line":261},"9":{"loc":{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},"type":"if","locations":[{"start":{"line":288,"column":8},"end":{"line":299,"column":9}},{"start":{"line":295,"column":15},"end":{"line":299,"column":9}}],"line":288},"10":{"loc":{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},"type":"if","locations":[{"start":{"line":289,"column":12},"end":{"line":294,"column":13}},{"start":{"line":291,"column":19},"end":{"line":294,"column":13}}],"line":289},"11":{"loc":{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},"type":"if","locations":[{"start":{"line":295,"column":15},"end":{"line":299,"column":9}},{"start":{},"end":{}}],"line":295},"12":{"loc":{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},"type":"if","locations":[{"start":{"line":301,"column":8},"end":{"line":306,"column":9}},{"start":{},"end":{}}],"line":301},"13":{"loc":{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},"type":"if","locations":[{"start":{"line":313,"column":8},"end":{"line":319,"column":9}},{"start":{},"end":{}}],"line":313},"14":{"loc":{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},"type":"if","locations":[{"start":{"line":315,"column":12},"end":{"line":317,"column":13}},{"start":{},"end":{}}],"line":315},"15":{"loc":{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},"type":"if","locations":[{"start":{"line":327,"column":8},"end":{"line":329,"column":9}},{"start":{},"end":{}}],"line":327},"16":{"loc":{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},"type":"if","locations":[{"start":{"line":336,"column":8},"end":{"line":339,"column":9}},{"start":{},"end":{}}],"line":336},"17":{"loc":{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},"type":"if","locations":[{"start":{"line":340,"column":8},"end":{"line":343,"column":9}},{"start":{},"end":{}}],"line":340},"18":{"loc":{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},"type":"if","locations":[{"start":{"line":344,"column":8},"end":{"line":347,"column":9}},{"start":{},"end":{}}],"line":344},"19":{"loc":{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},"type":"if","locations":[{"start":{"line":356,"column":12},"end":{"line":360,"column":13}},{"start":{"line":358,"column":19},"end":{"line":360,"column":13}}],"line":356},"20":{"loc":{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},"type":"if","locations":[{"start":{"line":369,"column":8},"end":{"line":371,"column":9}},{"start":{},"end":{}}],"line":369},"21":{"loc":{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},"type":"if","locations":[{"start":{"line":373,"column":12},"end":{"line":379,"column":13}},{"start":{"line":375,"column":19},"end":{"line":379,"column":13}}],"line":373},"22":{"loc":{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},"type":"if","locations":[{"start":{"line":375,"column":19},"end":{"line":379,"column":13}},{"start":{},"end":{}}],"line":375},"23":{"loc":{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},"type":"if","locations":[{"start":{"line":391,"column":8},"end":{"line":403,"column":9}},{"start":{},"end":{}}],"line":391},"24":{"loc":{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},"type":"if","locations":[{"start":{"line":393,"column":12},"end":{"line":402,"column":13}},{"start":{"line":395,"column":19},"end":{"line":402,"column":13}}],"line":393},"25":{"loc":{"start":{"line":429,"column":15},"end":{"line":431,"column":9}},"type":"binary-expr","locations":[{"start":{"line":429,"column":15},"end":{"line":429,"column":42}},{"start":{"line":430,"column":12},"end":{"line":430,"column":51}},{"start":{"line":430,"column":55},"end":{"line":430,"column":82}}],"line":429},"26":{"loc":{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},"type":"if","locations":[{"start":{"line":442,"column":8},"end":{"line":444,"column":9}},{"start":{},"end":{}}],"line":442},"27":{"loc":{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},"type":"if","locations":[{"start":{"line":453,"column":8},"end":{"line":455,"column":9}},{"start":{},"end":{}}],"line":453},"28":{"loc":{"start":{"line":453,"column":12},"end":{"line":453,"column":66}},"type":"binary-expr","locations":[{"start":{"line":453,"column":12},"end":{"line":453,"column":36}},{"start":{"line":453,"column":40},"end":{"line":453,"column":66}}],"line":453}},"s":{"0":4,"1":12,"2":4,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":4},"f":{"0":12,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"26514c5d948bdd4cb0adf987870d8182ca8018d4"} -,"/home/runner/work/blockpy/blockpy/src/editor/quiz.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/quiz.js","statementMap":{"0":{"start":{"line":3,"column":32},"end":{"line":7,"column":1}},"1":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}},"2":{"start":{"line":12,"column":8},"end":{"line":33,"column":11}},"3":{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},"4":{"start":{"line":24,"column":24},"end":{"line":24,"column":58}},"5":{"start":{"line":26,"column":24},"end":{"line":26,"column":48}},"6":{"start":{"line":30,"column":20},"end":{"line":30,"column":76}},"7":{"start":{"line":34,"column":8},"end":{"line":34,"column":27}},"8":{"start":{"line":38,"column":8},"end":{"line":38,"column":44}},"9":{"start":{"line":39,"column":8},"end":{"line":39,"column":27}},"10":{"start":{"line":40,"column":8},"end":{"line":40,"column":46}},"11":{"start":{"line":42,"column":8},"end":{"line":42,"column":92}},"12":{"start":{"line":44,"column":8},"end":{"line":44,"column":60}},"13":{"start":{"line":45,"column":8},"end":{"line":45,"column":59}},"14":{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},"15":{"start":{"line":48,"column":12},"end":{"line":48,"column":73}},"16":{"start":{"line":51,"column":8},"end":{"line":51,"column":116}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":33}},"18":{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},"19":{"start":{"line":57,"column":12},"end":{"line":57,"column":30}},"20":{"start":{"line":58,"column":12},"end":{"line":58,"column":50}},"21":{"start":{"line":59,"column":12},"end":{"line":59,"column":38}},"22":{"start":{"line":60,"column":12},"end":{"line":60,"column":31}},"23":{"start":{"line":65,"column":8},"end":{"line":65,"column":33}},"24":{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},"25":{"start":{"line":67,"column":12},"end":{"line":67,"column":30}},"26":{"start":{"line":68,"column":12},"end":{"line":68,"column":57}},"27":{"start":{"line":69,"column":12},"end":{"line":69,"column":31}},"28":{"start":{"line":75,"column":8},"end":{"line":75,"column":43}},"29":{"start":{"line":76,"column":8},"end":{"line":76,"column":60}},"30":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"31":{"start":{"line":78,"column":8},"end":{"line":78,"column":43}},"32":{"start":{"line":82,"column":26},"end":{"line":87,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":5}},"loc":{"start":{"line":10,"column":27},"end":{"line":35,"column":5}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":23},"end":{"line":22,"column":24}},"loc":{"start":{"line":22,"column":37},"end":{"line":28,"column":17}},"line":22},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":23},"end":{"line":29,"column":24}},"loc":{"start":{"line":29,"column":37},"end":{"line":31,"column":17}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":4},"end":{"line":37,"column":5}},"loc":{"start":{"line":37,"column":34},"end":{"line":52,"column":5}},"line":37},"4":{"name":"(anonymous_4)","decl":{"start":{"line":54,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":54,"column":30},"end":{"line":62,"column":5}},"line":54},"5":{"name":"(anonymous_5)","decl":{"start":{"line":64,"column":4},"end":{"line":64,"column":5}},"loc":{"start":{"line":64,"column":24},"end":{"line":71,"column":5}},"line":64},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":73,"column":44},"end":{"line":79,"column":5}},"line":73}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},"type":"if","locations":[{"start":{"line":23,"column":20},"end":{"line":27,"column":21}},{"start":{"line":25,"column":27},"end":{"line":27,"column":21}}],"line":23},"1":{"loc":{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":49,"column":9}},{"start":{},"end":{}}],"line":46},"2":{"loc":{"start":{"line":51,"column":46},"end":{"line":51,"column":114}},"type":"binary-expr","locations":[{"start":{"line":51,"column":46},"end":{"line":51,"column":73}},{"start":{"line":51,"column":77},"end":{"line":51,"column":114}}],"line":51},"3":{"loc":{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":61,"column":9}},{"start":{},"end":{}}],"line":56},"4":{"loc":{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":70,"column":9}},{"start":{},"end":{}}],"line":66}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"28dda06bdedf727286c4beccb0f007b030f27155"} -,"/home/runner/work/blockpy/blockpy/src/editor/sample_submissions.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/sample_submissions.js","statementMap":{"0":{"start":{"line":8,"column":34},"end":{"line":14,"column":1}},"1":{"start":{"line":18,"column":8},"end":{"line":18,"column":25}},"2":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}},"3":{"start":{"line":20,"column":8},"end":{"line":20,"column":25}},"4":{"start":{"line":24,"column":8},"end":{"line":25,"column":71}},"5":{"start":{"line":29,"column":8},"end":{"line":29,"column":71}},"6":{"start":{"line":33,"column":8},"end":{"line":37,"column":10}},"7":{"start":{"line":41,"column":39},"end":{"line":55,"column":1}},"8":{"start":{"line":57,"column":0},"end":{"line":93,"column":2}},"9":{"start":{"line":61,"column":8},"end":{"line":61,"column":28}},"10":{"start":{"line":62,"column":17},"end":{"line":83,"column":10}},"11":{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},"12":{"start":{"line":74,"column":24},"end":{"line":74,"column":58}},"13":{"start":{"line":76,"column":24},"end":{"line":76,"column":48}},"14":{"start":{"line":80,"column":20},"end":{"line":80,"column":76}},"15":{"start":{"line":84,"column":8},"end":{"line":84,"column":36}},"16":{"start":{"line":85,"column":8},"end":{"line":85,"column":18}},"17":{"start":{"line":91,"column":8},"end":{"line":91,"column":30}},"18":{"start":{"line":97,"column":8},"end":{"line":97,"column":25}},"19":{"start":{"line":98,"column":8},"end":{"line":98,"column":23}},"20":{"start":{"line":99,"column":8},"end":{"line":99,"column":30}},"21":{"start":{"line":100,"column":8},"end":{"line":100,"column":27}},"22":{"start":{"line":108,"column":8},"end":{"line":108,"column":42}},"23":{"start":{"line":112,"column":8},"end":{"line":112,"column":44}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":27}},"25":{"start":{"line":114,"column":8},"end":{"line":114,"column":46}},"26":{"start":{"line":116,"column":8},"end":{"line":116,"column":92}},"27":{"start":{"line":118,"column":8},"end":{"line":118,"column":60}},"28":{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},"29":{"start":{"line":122,"column":12},"end":{"line":122,"column":34}},"30":{"start":{"line":123,"column":12},"end":{"line":123,"column":54}},"31":{"start":{"line":124,"column":12},"end":{"line":124,"column":103}},"32":{"start":{"line":124,"column":67},"end":{"line":124,"column":100}},"33":{"start":{"line":125,"column":12},"end":{"line":125,"column":81}},"34":{"start":{"line":125,"column":56},"end":{"line":125,"column":79}},"35":{"start":{"line":126,"column":12},"end":{"line":126,"column":35}},"36":{"start":{"line":128,"column":12},"end":{"line":128,"column":102}},"37":{"start":{"line":128,"column":29},"end":{"line":128,"column":97}},"38":{"start":{"line":128,"column":73},"end":{"line":128,"column":96}},"39":{"start":{"line":135,"column":8},"end":{"line":135,"column":33}},"40":{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},"41":{"start":{"line":137,"column":12},"end":{"line":137,"column":30}},"42":{"start":{"line":138,"column":12},"end":{"line":138,"column":42}},"43":{"start":{"line":141,"column":12},"end":{"line":141,"column":31}},"44":{"start":{"line":146,"column":8},"end":{"line":146,"column":33}},"45":{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},"46":{"start":{"line":148,"column":12},"end":{"line":148,"column":30}},"47":{"start":{"line":149,"column":12},"end":{"line":149,"column":72}},"48":{"start":{"line":149,"column":56},"end":{"line":149,"column":69}},"49":{"start":{"line":150,"column":12},"end":{"line":150,"column":31}},"50":{"start":{"line":156,"column":8},"end":{"line":156,"column":43}},"51":{"start":{"line":157,"column":8},"end":{"line":157,"column":30}},"52":{"start":{"line":160,"column":8},"end":{"line":160,"column":43}},"53":{"start":{"line":164,"column":33},"end":{"line":169,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":36},"end":{"line":21,"column":5}},"line":17},"1":{"name":"(anonymous_1)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":24},"end":{"line":26,"column":5}},"line":23},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":29},"end":{"line":30,"column":5}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":4},"end":{"line":32,"column":5}},"loc":{"start":{"line":32,"column":16},"end":{"line":38,"column":5}},"line":32},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":10},"end":{"line":58,"column":11}},"loc":{"start":{"line":58,"column":83},"end":{"line":86,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":72,"column":23},"end":{"line":72,"column":24}},"loc":{"start":{"line":72,"column":37},"end":{"line":78,"column":17}},"line":72},"6":{"name":"(anonymous_6)","decl":{"start":{"line":79,"column":23},"end":{"line":79,"column":24}},"loc":{"start":{"line":79,"column":37},"end":{"line":81,"column":17}},"line":79},"7":{"name":"(anonymous_7)","decl":{"start":{"line":87,"column":12},"end":{"line":87,"column":13}},"loc":{"start":{"line":87,"column":85},"end":{"line":92,"column":5}},"line":87},"8":{"name":"(anonymous_8)","decl":{"start":{"line":96,"column":4},"end":{"line":96,"column":5}},"loc":{"start":{"line":96,"column":27},"end":{"line":101,"column":5}},"line":96},"9":{"name":"(anonymous_9)","decl":{"start":{"line":103,"column":4},"end":{"line":103,"column":5}},"loc":{"start":{"line":103,"column":43},"end":{"line":105,"column":5}},"line":103},"10":{"name":"(anonymous_10)","decl":{"start":{"line":107,"column":4},"end":{"line":107,"column":5}},"loc":{"start":{"line":107,"column":21},"end":{"line":109,"column":5}},"line":107},"11":{"name":"(anonymous_11)","decl":{"start":{"line":111,"column":4},"end":{"line":111,"column":5}},"loc":{"start":{"line":111,"column":34},"end":{"line":132,"column":5}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":124,"column":57},"end":{"line":124,"column":58}},"loc":{"start":{"line":124,"column":67},"end":{"line":124,"column":100}},"line":124},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":45},"end":{"line":125,"column":46}},"loc":{"start":{"line":125,"column":56},"end":{"line":125,"column":79}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":128,"column":23},"end":{"line":128,"column":24}},"loc":{"start":{"line":128,"column":29},"end":{"line":128,"column":97}},"line":128},"15":{"name":"(anonymous_15)","decl":{"start":{"line":128,"column":62},"end":{"line":128,"column":63}},"loc":{"start":{"line":128,"column":73},"end":{"line":128,"column":96}},"line":128},"16":{"name":"(anonymous_16)","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":5}},"loc":{"start":{"line":134,"column":30},"end":{"line":143,"column":5}},"line":134},"17":{"name":"(anonymous_17)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":24},"end":{"line":152,"column":5}},"line":145},"18":{"name":"(anonymous_18)","decl":{"start":{"line":149,"column":50},"end":{"line":149,"column":51}},"loc":{"start":{"line":149,"column":56},"end":{"line":149,"column":69}},"line":149},"19":{"name":"(anonymous_19)","decl":{"start":{"line":154,"column":4},"end":{"line":154,"column":5}},"loc":{"start":{"line":154,"column":44},"end":{"line":161,"column":5}},"line":154}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":48},"end":{"line":24,"column":58}},"type":"binary-expr","locations":[{"start":{"line":24,"column":48},"end":{"line":24,"column":53}},{"start":{"line":24,"column":57},"end":{"line":24,"column":58}}],"line":24},"1":{"loc":{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},"type":"if","locations":[{"start":{"line":73,"column":20},"end":{"line":77,"column":21}},{"start":{"line":75,"column":27},"end":{"line":77,"column":21}}],"line":73},"2":{"loc":{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},"type":"if","locations":[{"start":{"line":121,"column":8},"end":{"line":129,"column":9}},{"start":{},"end":{}}],"line":121},"3":{"loc":{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},"type":"if","locations":[{"start":{"line":136,"column":8},"end":{"line":142,"column":9}},{"start":{},"end":{}}],"line":136},"4":{"loc":{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":151,"column":9}},{"start":{},"end":{}}],"line":147}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":4,"8":4,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a3752f04a092b528f1eaeb040295bb74cd381027"} -,"/home/runner/work/blockpy/blockpy/src/editor/tags.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/tags.js","statementMap":{"0":{"start":{"line":3,"column":32},"end":{"line":19,"column":1}},"1":{"start":{"line":23,"column":8},"end":{"line":23,"column":54}},"2":{"start":{"line":27,"column":26},"end":{"line":32,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":22,"column":4},"end":{"line":22,"column":5}},"loc":{"start":{"line":22,"column":27},"end":{"line":24,"column":5}},"line":22}},"branchMap":{},"s":{"0":4,"1":0,"2":4},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c5fe0eba4267e26b9a6f784531d84cdf80cf6544"} -,"/home/runner/work/blockpy/blockpy/src/editor/text.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/text.js","statementMap":{"0":{"start":{"line":4,"column":32},"end":{"line":9,"column":1}},"1":{"start":{"line":13,"column":8},"end":{"line":13,"column":25}},"2":{"start":{"line":14,"column":8},"end":{"line":35,"column":11}},"3":{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},"4":{"start":{"line":26,"column":24},"end":{"line":26,"column":58}},"5":{"start":{"line":28,"column":24},"end":{"line":28,"column":48}},"6":{"start":{"line":32,"column":20},"end":{"line":32,"column":76}},"7":{"start":{"line":36,"column":8},"end":{"line":36,"column":27}},"8":{"start":{"line":40,"column":8},"end":{"line":40,"column":44}},"9":{"start":{"line":41,"column":8},"end":{"line":41,"column":27}},"10":{"start":{"line":42,"column":8},"end":{"line":42,"column":46}},"11":{"start":{"line":44,"column":8},"end":{"line":44,"column":92}},"12":{"start":{"line":46,"column":8},"end":{"line":46,"column":60}},"13":{"start":{"line":47,"column":8},"end":{"line":47,"column":59}},"14":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"15":{"start":{"line":50,"column":12},"end":{"line":50,"column":73}},"16":{"start":{"line":53,"column":8},"end":{"line":53,"column":116}},"17":{"start":{"line":57,"column":8},"end":{"line":57,"column":33}},"18":{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},"19":{"start":{"line":59,"column":12},"end":{"line":59,"column":30}},"20":{"start":{"line":60,"column":12},"end":{"line":60,"column":50}},"21":{"start":{"line":61,"column":12},"end":{"line":61,"column":38}},"22":{"start":{"line":62,"column":12},"end":{"line":62,"column":31}},"23":{"start":{"line":67,"column":8},"end":{"line":67,"column":33}},"24":{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},"25":{"start":{"line":69,"column":12},"end":{"line":69,"column":30}},"26":{"start":{"line":70,"column":12},"end":{"line":70,"column":57}},"27":{"start":{"line":71,"column":12},"end":{"line":71,"column":31}},"28":{"start":{"line":77,"column":8},"end":{"line":77,"column":43}},"29":{"start":{"line":78,"column":8},"end":{"line":78,"column":60}},"30":{"start":{"line":79,"column":8},"end":{"line":79,"column":53}},"31":{"start":{"line":80,"column":8},"end":{"line":80,"column":43}},"32":{"start":{"line":84,"column":26},"end":{"line":89,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"loc":{"start":{"line":12,"column":27},"end":{"line":37,"column":5}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":23},"end":{"line":24,"column":24}},"loc":{"start":{"line":24,"column":37},"end":{"line":30,"column":17}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":23},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":37},"end":{"line":33,"column":17}},"line":31},"3":{"name":"(anonymous_3)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":34},"end":{"line":54,"column":5}},"line":39},"4":{"name":"(anonymous_4)","decl":{"start":{"line":56,"column":4},"end":{"line":56,"column":5}},"loc":{"start":{"line":56,"column":30},"end":{"line":64,"column":5}},"line":56},"5":{"name":"(anonymous_5)","decl":{"start":{"line":66,"column":4},"end":{"line":66,"column":5}},"loc":{"start":{"line":66,"column":24},"end":{"line":73,"column":5}},"line":66},"6":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":44},"end":{"line":81,"column":5}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},"type":"if","locations":[{"start":{"line":25,"column":20},"end":{"line":29,"column":21}},{"start":{"line":27,"column":27},"end":{"line":29,"column":21}}],"line":25},"1":{"loc":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},{"start":{},"end":{}}],"line":48},"2":{"loc":{"start":{"line":53,"column":46},"end":{"line":53,"column":114}},"type":"binary-expr","locations":[{"start":{"line":53,"column":46},"end":{"line":53,"column":73}},{"start":{"line":53,"column":77},"end":{"line":53,"column":114}}],"line":53},"3":{"loc":{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":63,"column":9}},{"start":{},"end":{}}],"line":58},"4":{"loc":{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":72,"column":9}},{"start":{},"end":{}}],"line":68}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4c2cc8aff905d09aa5b1402de94f39d90a279230"} -,"/home/runner/work/blockpy/blockpy/src/editor/toolbox.js": {"path":"/home/runner/work/blockpy/blockpy/src/editor/toolbox.js","statementMap":{"0":{"start":{"line":3,"column":35},"end":{"line":15,"column":1}},"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":25}},"2":{"start":{"line":20,"column":8},"end":{"line":42,"column":11}},"3":{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},"4":{"start":{"line":33,"column":24},"end":{"line":33,"column":58}},"5":{"start":{"line":35,"column":24},"end":{"line":35,"column":48}},"6":{"start":{"line":39,"column":20},"end":{"line":39,"column":76}},"7":{"start":{"line":43,"column":8},"end":{"line":43,"column":27}},"8":{"start":{"line":47,"column":8},"end":{"line":47,"column":44}},"9":{"start":{"line":48,"column":8},"end":{"line":48,"column":27}},"10":{"start":{"line":49,"column":8},"end":{"line":49,"column":46}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":92}},"12":{"start":{"line":53,"column":8},"end":{"line":53,"column":60}},"13":{"start":{"line":54,"column":8},"end":{"line":54,"column":81}},"14":{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},"15":{"start":{"line":58,"column":12},"end":{"line":58,"column":73}},"16":{"start":{"line":61,"column":8},"end":{"line":61,"column":116}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":33}},"18":{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},"19":{"start":{"line":68,"column":12},"end":{"line":68,"column":30}},"20":{"start":{"line":69,"column":12},"end":{"line":69,"column":50}},"21":{"start":{"line":70,"column":12},"end":{"line":70,"column":38}},"22":{"start":{"line":71,"column":12},"end":{"line":71,"column":31}},"23":{"start":{"line":76,"column":8},"end":{"line":76,"column":33}},"24":{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},"25":{"start":{"line":78,"column":12},"end":{"line":78,"column":30}},"26":{"start":{"line":79,"column":12},"end":{"line":79,"column":57}},"27":{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},"28":{"start":{"line":81,"column":16},"end":{"line":81,"column":74}},"29":{"start":{"line":83,"column":12},"end":{"line":83,"column":31}},"30":{"start":{"line":89,"column":8},"end":{"line":89,"column":43}},"31":{"start":{"line":90,"column":8},"end":{"line":90,"column":85}},"32":{"start":{"line":92,"column":8},"end":{"line":92,"column":53}},"33":{"start":{"line":93,"column":8},"end":{"line":93,"column":43}},"34":{"start":{"line":97,"column":29},"end":{"line":102,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":18,"column":4},"end":{"line":18,"column":5}},"loc":{"start":{"line":18,"column":27},"end":{"line":44,"column":5}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":23},"end":{"line":31,"column":24}},"loc":{"start":{"line":31,"column":37},"end":{"line":37,"column":17}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":38,"column":23},"end":{"line":38,"column":24}},"loc":{"start":{"line":38,"column":37},"end":{"line":40,"column":17}},"line":38},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":4},"end":{"line":46,"column":5}},"loc":{"start":{"line":46,"column":34},"end":{"line":63,"column":5}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":5}},"loc":{"start":{"line":65,"column":30},"end":{"line":73,"column":5}},"line":65},"5":{"name":"(anonymous_5)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":24},"end":{"line":85,"column":5}},"line":75},"6":{"name":"(anonymous_6)","decl":{"start":{"line":87,"column":4},"end":{"line":87,"column":5}},"loc":{"start":{"line":87,"column":44},"end":{"line":94,"column":5}},"line":87}},"branchMap":{"0":{"loc":{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},"type":"if","locations":[{"start":{"line":32,"column":20},"end":{"line":36,"column":21}},{"start":{"line":34,"column":27},"end":{"line":36,"column":21}}],"line":32},"1":{"loc":{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":56,"column":8},"end":{"line":59,"column":9}},{"start":{},"end":{}}],"line":56},"2":{"loc":{"start":{"line":61,"column":46},"end":{"line":61,"column":114}},"type":"binary-expr","locations":[{"start":{"line":61,"column":46},"end":{"line":61,"column":73}},{"start":{"line":61,"column":77},"end":{"line":61,"column":114}}],"line":61},"3":{"loc":{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":67,"column":8},"end":{"line":72,"column":9}},{"start":{},"end":{}}],"line":67},"4":{"loc":{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},"type":"if","locations":[{"start":{"line":77,"column":8},"end":{"line":84,"column":9}},{"start":{},"end":{}}],"line":77},"5":{"loc":{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},"type":"if","locations":[{"start":{"line":80,"column":12},"end":{"line":82,"column":13}},{"start":{},"end":{}}],"line":80}},"s":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":4},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d445728d2888c4a7298df697d6131daa766bc6f5"} -,"/home/runner/work/blockpy/blockpy/src/engine/configurations.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/configurations.js","statementMap":{"0":{"start":{"line":1,"column":28},"end":{"line":1,"column":79}},"1":{"start":{"line":10,"column":8},"end":{"line":10,"column":25}},"2":{"start":{"line":11,"column":8},"end":{"line":11,"column":29}},"3":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"4":{"start":{"line":13,"column":8},"end":{"line":13,"column":36}},"5":{"start":{"line":18,"column":8},"end":{"line":18,"column":29}},"6":{"start":{"line":19,"column":8},"end":{"line":19,"column":64}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":50}},"8":{"start":{"line":21,"column":8},"end":{"line":21,"column":28}},"9":{"start":{"line":22,"column":8},"end":{"line":22,"column":46}},"10":{"start":{"line":24,"column":8},"end":{"line":24,"column":48}},"11":{"start":{"line":26,"column":8},"end":{"line":26,"column":58}},"12":{"start":{"line":28,"column":8},"end":{"line":28,"column":82}},"13":{"start":{"line":28,"column":49},"end":{"line":28,"column":81}},"14":{"start":{"line":30,"column":8},"end":{"line":43,"column":10}},"15":{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},"16":{"start":{"line":32,"column":16},"end":{"line":32,"column":28}},"17":{"start":{"line":34,"column":32},"end":{"line":34,"column":75}},"18":{"start":{"line":35,"column":24},"end":{"line":35,"column":64}},"19":{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},"20":{"start":{"line":37,"column":16},"end":{"line":37,"column":66}},"21":{"start":{"line":38,"column":16},"end":{"line":38,"column":37}},"22":{"start":{"line":39,"column":16},"end":{"line":40,"column":92}},"23":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"24":{"start":{"line":42,"column":12},"end":{"line":42,"column":25}},"25":{"start":{"line":45,"column":8},"end":{"line":45,"column":51}},"26":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"27":{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},"28":{"start":{"line":51,"column":12},"end":{"line":51,"column":181}},"29":{"start":{"line":53,"column":12},"end":{"line":53,"column":105}},"30":{"start":{"line":58,"column":8},"end":{"line":77,"column":10}},"31":{"start":{"line":74,"column":34},"end":{"line":74,"column":101}},"32":{"start":{"line":81,"column":22},"end":{"line":81,"column":75}},"33":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"34":{"start":{"line":83,"column":12},"end":{"line":83,"column":72}},"35":{"start":{"line":85,"column":8},"end":{"line":85,"column":21}},"36":{"start":{"line":97,"column":8},"end":{"line":97,"column":46}},"37":{"start":{"line":103,"column":26},"end":{"line":103,"column":87}},"38":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"39":{"start":{"line":105,"column":12},"end":{"line":105,"column":117}},"40":{"start":{"line":107,"column":8},"end":{"line":107,"column":55}},"41":{"start":{"line":108,"column":8},"end":{"line":117,"column":9}},"42":{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},"43":{"start":{"line":110,"column":16},"end":{"line":115,"column":17}},"44":{"start":{"line":110,"column":27},"end":{"line":110,"column":28}},"45":{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},"46":{"start":{"line":112,"column":39},"end":{"line":112,"column":89}},"47":{"start":{"line":113,"column":24},"end":{"line":113,"column":42}},"48":{"start":{"line":119,"column":8},"end":{"line":119,"column":112}},"49":{"start":{"line":124,"column":8},"end":{"line":124,"column":46}},"50":{"start":{"line":129,"column":8},"end":{"line":129,"column":46}},"51":{"start":{"line":134,"column":8},"end":{"line":134,"column":50}},"52":{"start":{"line":138,"column":8},"end":{"line":138,"column":46}},"53":{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},"54":{"start":{"line":144,"column":12},"end":{"line":144,"column":48}},"55":{"start":{"line":146,"column":8},"end":{"line":146,"column":48}},"56":{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},"57":{"start":{"line":151,"column":12},"end":{"line":151,"column":40}},"58":{"start":{"line":153,"column":12},"end":{"line":153,"column":22}},"59":{"start":{"line":159,"column":8},"end":{"line":159,"column":19}},"60":{"start":{"line":171,"column":8},"end":{"line":171,"column":21}},"61":{"start":{"line":175,"column":8},"end":{"line":175,"column":54}},"62":{"start":{"line":179,"column":8},"end":{"line":179,"column":54}},"63":{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},"64":{"start":{"line":185,"column":12},"end":{"line":185,"column":62}},"65":{"start":{"line":186,"column":12},"end":{"line":186,"column":59}},"66":{"start":{"line":197,"column":27},"end":{"line":197,"column":68}},"67":{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},"68":{"start":{"line":199,"column":12},"end":{"line":199,"column":36}},"69":{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},"70":{"start":{"line":202,"column":12},"end":{"line":202,"column":50}},"71":{"start":{"line":204,"column":19},"end":{"line":204,"column":21}},"72":{"start":{"line":206,"column":8},"end":{"line":208,"column":9}},"73":{"start":{"line":206,"column":19},"end":{"line":206,"column":20}},"74":{"start":{"line":207,"column":12},"end":{"line":207,"column":41}},"75":{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},"76":{"start":{"line":210,"column":12},"end":{"line":210,"column":39}},"77":{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},"78":{"start":{"line":213,"column":12},"end":{"line":213,"column":41}},"79":{"start":{"line":216,"column":8},"end":{"line":216,"column":52}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":22},"end":{"line":14,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":4},"end":{"line":16,"column":5}},"loc":{"start":{"line":16,"column":16},"end":{"line":47,"column":5}},"line":16},"2":{"name":"(anonymous_2)","decl":{"start":{"line":28,"column":25},"end":{"line":28,"column":26}},"loc":{"start":{"line":28,"column":49},"end":{"line":28,"column":81}},"line":28},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":28},"end":{"line":30,"column":29}},"loc":{"start":{"line":30,"column":55},"end":{"line":43,"column":9}},"line":30},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":39},"end":{"line":39,"column":40}},"loc":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"line":40},"5":{"name":"(anonymous_5)","decl":{"start":{"line":49,"column":4},"end":{"line":49,"column":5}},"loc":{"start":{"line":49,"column":34},"end":{"line":55,"column":5}},"line":49},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":23},"end":{"line":78,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":74,"column":24},"end":{"line":74,"column":25}},"loc":{"start":{"line":74,"column":34},"end":{"line":74,"column":101}},"line":74},"8":{"name":"(anonymous_8)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":33},"end":{"line":86,"column":5}},"line":80},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":4},"end":{"line":96,"column":5}},"loc":{"start":{"line":96,"column":25},"end":{"line":99,"column":5}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":32},"end":{"line":121,"column":5}},"line":101},"11":{"name":"(anonymous_11)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":15},"end":{"line":126,"column":5}},"line":123},"12":{"name":"(anonymous_12)","decl":{"start":{"line":128,"column":4},"end":{"line":128,"column":5}},"loc":{"start":{"line":128,"column":16},"end":{"line":131,"column":5}},"line":128},"13":{"name":"(anonymous_13)","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":5}},"loc":{"start":{"line":133,"column":17},"end":{"line":135,"column":5}},"line":133},"14":{"name":"(anonymous_14)","decl":{"start":{"line":137,"column":4},"end":{"line":137,"column":5}},"loc":{"start":{"line":137,"column":12},"end":{"line":140,"column":5}},"line":137},"15":{"name":"(anonymous_15)","decl":{"start":{"line":142,"column":4},"end":{"line":142,"column":5}},"loc":{"start":{"line":142,"column":17},"end":{"line":147,"column":5}},"line":142},"16":{"name":"(anonymous_16)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":5}},"loc":{"start":{"line":149,"column":31},"end":{"line":155,"column":5}},"line":149},"17":{"name":"(anonymous_17)","decl":{"start":{"line":157,"column":4},"end":{"line":157,"column":5}},"loc":{"start":{"line":157,"column":23},"end":{"line":160,"column":5}},"line":157},"18":{"name":"(anonymous_18)","decl":{"start":{"line":162,"column":4},"end":{"line":162,"column":5}},"loc":{"start":{"line":162,"column":11},"end":{"line":164,"column":5}},"line":162},"19":{"name":"(anonymous_19)","decl":{"start":{"line":166,"column":4},"end":{"line":166,"column":5}},"loc":{"start":{"line":166,"column":15},"end":{"line":168,"column":5}},"line":166},"20":{"name":"(anonymous_20)","decl":{"start":{"line":170,"column":4},"end":{"line":170,"column":5}},"loc":{"start":{"line":170,"column":26},"end":{"line":172,"column":5}},"line":170},"21":{"name":"(anonymous_21)","decl":{"start":{"line":174,"column":4},"end":{"line":174,"column":5}},"loc":{"start":{"line":174,"column":20},"end":{"line":176,"column":5}},"line":174},"22":{"name":"(anonymous_22)","decl":{"start":{"line":178,"column":4},"end":{"line":178,"column":5}},"loc":{"start":{"line":178,"column":19},"end":{"line":180,"column":5}},"line":178},"23":{"name":"(anonymous_23)","decl":{"start":{"line":182,"column":4},"end":{"line":182,"column":5}},"loc":{"start":{"line":182,"column":20},"end":{"line":188,"column":5}},"line":182},"24":{"name":"(anonymous_24)","decl":{"start":{"line":190,"column":4},"end":{"line":190,"column":5}},"loc":{"start":{"line":190,"column":22},"end":{"line":192,"column":5}},"line":190},"25":{"name":"(anonymous_25)","decl":{"start":{"line":194,"column":4},"end":{"line":194,"column":5}},"loc":{"start":{"line":194,"column":46},"end":{"line":217,"column":5}},"line":194}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},"type":"if","locations":[{"start":{"line":31,"column":12},"end":{"line":33,"column":13}},{"start":{},"end":{}}],"line":31},"1":{"loc":{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},"type":"if","locations":[{"start":{"line":36,"column":12},"end":{"line":41,"column":13}},{"start":{},"end":{}}],"line":36},"2":{"loc":{"start":{"line":36,"column":16},"end":{"line":36,"column":42}},"type":"binary-expr","locations":[{"start":{"line":36,"column":16},"end":{"line":36,"column":30}},{"start":{"line":36,"column":34},"end":{"line":36,"column":42}}],"line":36},"3":{"loc":{"start":{"line":40,"column":20},"end":{"line":40,"column":91}},"type":"cond-expr","locations":[{"start":{"line":40,"column":75},"end":{"line":40,"column":83}},{"start":{"line":40,"column":86},"end":{"line":40,"column":91}}],"line":40},"4":{"loc":{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":54,"column":9}},{"start":{"line":52,"column":15},"end":{"line":54,"column":9}}],"line":50},"5":{"loc":{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},"type":"if","locations":[{"start":{"line":82,"column":8},"end":{"line":84,"column":9}},{"start":{},"end":{}}],"line":82},"6":{"loc":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},{"start":{},"end":{}}],"line":104},"7":{"loc":{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":116,"column":13}},{"start":{},"end":{}}],"line":109},"8":{"loc":{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},"type":"if","locations":[{"start":{"line":111,"column":20},"end":{"line":114,"column":21}},{"start":{},"end":{}}],"line":111},"9":{"loc":{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},"type":"if","locations":[{"start":{"line":143,"column":8},"end":{"line":145,"column":9}},{"start":{},"end":{}}],"line":143},"10":{"loc":{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},"type":"if","locations":[{"start":{"line":150,"column":8},"end":{"line":154,"column":9}},{"start":{"line":152,"column":15},"end":{"line":154,"column":9}}],"line":150},"11":{"loc":{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},"type":"if","locations":[{"start":{"line":184,"column":8},"end":{"line":187,"column":9}},{"start":{},"end":{}}],"line":184},"12":{"loc":{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},"type":"if","locations":[{"start":{"line":198,"column":8},"end":{"line":200,"column":9}},{"start":{},"end":{}}],"line":198},"13":{"loc":{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},"type":"if","locations":[{"start":{"line":201,"column":8},"end":{"line":203,"column":9}},{"start":{},"end":{}}],"line":201},"14":{"loc":{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},"type":"if","locations":[{"start":{"line":209,"column":8},"end":{"line":211,"column":9}},{"start":{},"end":{}}],"line":209},"15":{"loc":{"start":{"line":209,"column":12},"end":{"line":209,"column":39}},"type":"binary-expr","locations":[{"start":{"line":209,"column":12},"end":{"line":209,"column":18}},{"start":{"line":209,"column":22},"end":{"line":209,"column":39}}],"line":209},"16":{"loc":{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},"type":"if","locations":[{"start":{"line":212,"column":8},"end":{"line":214,"column":9}},{"start":{},"end":{}}],"line":212},"17":{"loc":{"start":{"line":212,"column":12},"end":{"line":212,"column":39}},"type":"binary-expr","locations":[{"start":{"line":212,"column":12},"end":{"line":212,"column":18}},{"start":{"line":212,"column":22},"end":{"line":212,"column":39}}],"line":212}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"0c7873dff107bbf054533d5b71c35e18891ecc38"} -,"/home/runner/work/blockpy/blockpy/src/engine/eval.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/eval.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":65}},"1":{"start":{"line":9,"column":8},"end":{"line":9,"column":33}},"2":{"start":{"line":10,"column":8},"end":{"line":10,"column":34}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":39}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":29}},"5":{"start":{"line":14,"column":8},"end":{"line":14,"column":26}},"6":{"start":{"line":16,"column":8},"end":{"line":16,"column":32}},"7":{"start":{"line":17,"column":8},"end":{"line":17,"column":65}},"8":{"start":{"line":19,"column":8},"end":{"line":19,"column":88}},"9":{"start":{"line":20,"column":8},"end":{"line":20,"column":90}},"10":{"start":{"line":22,"column":8},"end":{"line":22,"column":20}},"11":{"start":{"line":26,"column":8},"end":{"line":26,"column":36}},"12":{"start":{"line":27,"column":8},"end":{"line":27,"column":94}},"13":{"start":{"line":28,"column":8},"end":{"line":28,"column":62}},"14":{"start":{"line":29,"column":8},"end":{"line":29,"column":62}},"15":{"start":{"line":30,"column":8},"end":{"line":30,"column":24}},"16":{"start":{"line":31,"column":21},"end":{"line":31,"column":54}},"17":{"start":{"line":32,"column":23},"end":{"line":32,"column":36}},"18":{"start":{"line":33,"column":8},"end":{"line":33,"column":59}},"19":{"start":{"line":34,"column":8},"end":{"line":34,"column":84}},"20":{"start":{"line":35,"column":8},"end":{"line":50,"column":11}},"21":{"start":{"line":37,"column":12},"end":{"line":37,"column":28}},"22":{"start":{"line":38,"column":12},"end":{"line":48,"column":14}},"23":{"start":{"line":41,"column":68},"end":{"line":41,"column":74}},"24":{"start":{"line":42,"column":75},"end":{"line":42,"column":89}},"25":{"start":{"line":42,"column":100},"end":{"line":42,"column":106}},"26":{"start":{"line":49,"column":12},"end":{"line":49,"column":22}},"27":{"start":{"line":54,"column":8},"end":{"line":54,"column":43}},"28":{"start":{"line":55,"column":8},"end":{"line":55,"column":63}},"29":{"start":{"line":56,"column":21},"end":{"line":56,"column":54}},"30":{"start":{"line":57,"column":8},"end":{"line":57,"column":103}},"31":{"start":{"line":58,"column":8},"end":{"line":66,"column":11}},"32":{"start":{"line":59,"column":12},"end":{"line":64,"column":14}},"33":{"start":{"line":65,"column":12},"end":{"line":65,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":4},"end":{"line":6,"column":5}},"loc":{"start":{"line":6,"column":22},"end":{"line":23,"column":5}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":4},"end":{"line":25,"column":5}},"loc":{"start":{"line":25,"column":20},"end":{"line":51,"column":5}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":27},"end":{"line":35,"column":28}},"loc":{"start":{"line":35,"column":48},"end":{"line":50,"column":9}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":41,"column":63},"end":{"line":41,"column":64}},"loc":{"start":{"line":41,"column":68},"end":{"line":41,"column":74}},"line":41},"4":{"name":"(anonymous_4)","decl":{"start":{"line":42,"column":70},"end":{"line":42,"column":71}},"loc":{"start":{"line":42,"column":75},"end":{"line":42,"column":89}},"line":42},"5":{"name":"(anonymous_5)","decl":{"start":{"line":42,"column":95},"end":{"line":42,"column":96}},"loc":{"start":{"line":42,"column":100},"end":{"line":42,"column":106}},"line":42},"6":{"name":"(anonymous_6)","decl":{"start":{"line":53,"column":4},"end":{"line":53,"column":5}},"loc":{"start":{"line":53,"column":19},"end":{"line":67,"column":5}},"line":53},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":27},"end":{"line":58,"column":28}},"loc":{"start":{"line":58,"column":48},"end":{"line":66,"column":9}},"line":58}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e6fd53185f8ac43a88fed6a28f06dc7799d2174f"} -,"/home/runner/work/blockpy/blockpy/src/engine/instructor.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/instructor.js","statementMap":{"0":{"start":{"line":7,"column":28},"end":{"line":7,"column":83}},"1":{"start":{"line":8,"column":29},"end":{"line":8,"column":45}},"2":{"start":{"line":12,"column":8},"end":{"line":12,"column":26}},"3":{"start":{"line":14,"column":8},"end":{"line":15,"column":83}},"4":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"5":{"start":{"line":16,"column":8},"end":{"line":16,"column":46}},"6":{"start":{"line":18,"column":8},"end":{"line":18,"column":39}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":50}},"8":{"start":{"line":22,"column":8},"end":{"line":22,"column":28}},"9":{"start":{"line":26,"column":8},"end":{"line":26,"column":44}},"10":{"start":{"line":27,"column":8},"end":{"line":27,"column":29}},"11":{"start":{"line":29,"column":8},"end":{"line":29,"column":83}},"12":{"start":{"line":30,"column":8},"end":{"line":30,"column":76}},"13":{"start":{"line":33,"column":8},"end":{"line":33,"column":81}},"14":{"start":{"line":34,"column":8},"end":{"line":34,"column":72}},"15":{"start":{"line":36,"column":8},"end":{"line":36,"column":74}},"16":{"start":{"line":38,"column":8},"end":{"line":38,"column":61}},"17":{"start":{"line":40,"column":8},"end":{"line":40,"column":74}},"18":{"start":{"line":41,"column":8},"end":{"line":41,"column":20}},"19":{"start":{"line":45,"column":8},"end":{"line":45,"column":27}},"20":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"21":{"start":{"line":50,"column":25},"end":{"line":50,"column":72}},"22":{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},"23":{"start":{"line":53,"column":12},"end":{"line":59,"column":13}},"24":{"start":{"line":54,"column":33},"end":{"line":54,"column":61}},"25":{"start":{"line":58,"column":16},"end":{"line":58,"column":48}},"26":{"start":{"line":61,"column":8},"end":{"line":61,"column":26}},"27":{"start":{"line":65,"column":22},"end":{"line":67,"column":9}},"28":{"start":{"line":69,"column":8},"end":{"line":73,"column":11}},"29":{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},"30":{"start":{"line":71,"column":16},"end":{"line":71,"column":75}},"31":{"start":{"line":75,"column":8},"end":{"line":77,"column":11}},"32":{"start":{"line":76,"column":12},"end":{"line":76,"column":53}},"33":{"start":{"line":78,"column":8},"end":{"line":78,"column":21}},"34":{"start":{"line":83,"column":12},"end":{"line":83,"column":50}},"35":{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},"36":{"start":{"line":85,"column":16},"end":{"line":85,"column":49}},"37":{"start":{"line":87,"column":12},"end":{"line":87,"column":28}},"38":{"start":{"line":89,"column":8},"end":{"line":94,"column":10}},"39":{"start":{"line":92,"column":77},"end":{"line":92,"column":116}},"40":{"start":{"line":93,"column":67},"end":{"line":93,"column":89}},"41":{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},"42":{"start":{"line":99,"column":12},"end":{"line":99,"column":234}},"43":{"start":{"line":101,"column":12},"end":{"line":101,"column":171}},"44":{"start":{"line":106,"column":20},"end":{"line":106,"column":82}},"45":{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},"46":{"start":{"line":108,"column":12},"end":{"line":108,"column":70}},"47":{"start":{"line":110,"column":12},"end":{"line":110,"column":36}},"48":{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},"49":{"start":{"line":117,"column":12},"end":{"line":117,"column":70}},"50":{"start":{"line":119,"column":12},"end":{"line":119,"column":53}},"51":{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},"52":{"start":{"line":125,"column":12},"end":{"line":125,"column":53}},"53":{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},"54":{"start":{"line":127,"column":12},"end":{"line":127,"column":54}},"55":{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},"56":{"start":{"line":129,"column":12},"end":{"line":129,"column":61}},"57":{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},"58":{"start":{"line":131,"column":12},"end":{"line":131,"column":32}},"59":{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},"60":{"start":{"line":133,"column":12},"end":{"line":133,"column":77}},"61":{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},"62":{"start":{"line":135,"column":12},"end":{"line":135,"column":54}},"63":{"start":{"line":137,"column":24},"end":{"line":137,"column":86}},"64":{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},"65":{"start":{"line":139,"column":16},"end":{"line":139,"column":81}},"66":{"start":{"line":141,"column":16},"end":{"line":141,"column":40}},"67":{"start":{"line":148,"column":8},"end":{"line":148,"column":102}},"68":{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},"69":{"start":{"line":150,"column":29},"end":{"line":150,"column":67}},"70":{"start":{"line":151,"column":28},"end":{"line":151,"column":73}},"71":{"start":{"line":152,"column":12},"end":{"line":152,"column":63}},"72":{"start":{"line":153,"column":12},"end":{"line":153,"column":29}},"73":{"start":{"line":155,"column":12},"end":{"line":155,"column":30}},"74":{"start":{"line":163,"column":27},"end":{"line":163,"column":68}},"75":{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},"76":{"start":{"line":166,"column":12},"end":{"line":166,"column":60}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":16},"end":{"line":42,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":31},"end":{"line":14,"column":32}},"loc":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":17},"end":{"line":47,"column":5}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":49,"column":4},"end":{"line":49,"column":5}},"loc":{"start":{"line":49,"column":34},"end":{"line":62,"column":5}},"line":49},"4":{"name":"(anonymous_4)","decl":{"start":{"line":64,"column":4},"end":{"line":64,"column":5}},"loc":{"start":{"line":64,"column":25},"end":{"line":79,"column":5}},"line":64},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":66},"end":{"line":69,"column":67}},"loc":{"start":{"line":69,"column":74},"end":{"line":73,"column":9}},"line":69},"6":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":56},"end":{"line":75,"column":57}},"loc":{"start":{"line":75,"column":64},"end":{"line":77,"column":9}},"line":75},"7":{"name":"(anonymous_7)","decl":{"start":{"line":81,"column":4},"end":{"line":81,"column":5}},"loc":{"start":{"line":81,"column":22},"end":{"line":95,"column":5}},"line":81},"8":{"name":"clean","decl":{"start":{"line":82,"column":17},"end":{"line":82,"column":22}},"loc":{"start":{"line":82,"column":33},"end":{"line":88,"column":9}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":92,"column":69},"end":{"line":92,"column":70}},"loc":{"start":{"line":92,"column":77},"end":{"line":92,"column":116}},"line":92},"10":{"name":"(anonymous_10)","decl":{"start":{"line":93,"column":59},"end":{"line":93,"column":60}},"loc":{"start":{"line":93,"column":67},"end":{"line":93,"column":89}},"line":93},"11":{"name":"(anonymous_11)","decl":{"start":{"line":97,"column":4},"end":{"line":97,"column":5}},"loc":{"start":{"line":97,"column":34},"end":{"line":103,"column":5}},"line":97},"12":{"name":"(anonymous_12)","decl":{"start":{"line":105,"column":4},"end":{"line":105,"column":5}},"loc":{"start":{"line":105,"column":23},"end":{"line":112,"column":5}},"line":105},"13":{"name":"(anonymous_13)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":32},"end":{"line":121,"column":5}},"line":114},"14":{"name":"(anonymous_14)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":25},"end":{"line":144,"column":5}},"line":123},"15":{"name":"(anonymous_15)","decl":{"start":{"line":146,"column":4},"end":{"line":146,"column":5}},"loc":{"start":{"line":146,"column":25},"end":{"line":160,"column":5}},"line":146},"16":{"name":"(anonymous_16)","decl":{"start":{"line":162,"column":4},"end":{"line":162,"column":5}},"loc":{"start":{"line":162,"column":46},"end":{"line":168,"column":5}},"line":162}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":12},"end":{"line":15,"column":82}},"type":"cond-expr","locations":[{"start":{"line":15,"column":67},"end":{"line":15,"column":75}},{"start":{"line":15,"column":78},"end":{"line":15,"column":82}}],"line":15},"1":{"loc":{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":60,"column":9}},{"start":{},"end":{}}],"line":52},"2":{"loc":{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":72,"column":13}},{"start":{},"end":{}}],"line":70},"3":{"loc":{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},"type":"if","locations":[{"start":{"line":84,"column":12},"end":{"line":86,"column":13}},{"start":{},"end":{}}],"line":84},"4":{"loc":{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},"type":"if","locations":[{"start":{"line":98,"column":8},"end":{"line":102,"column":9}},{"start":{"line":100,"column":15},"end":{"line":102,"column":9}}],"line":98},"5":{"loc":{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},"type":"if","locations":[{"start":{"line":107,"column":8},"end":{"line":111,"column":9}},{"start":{"line":109,"column":15},"end":{"line":111,"column":9}}],"line":107},"6":{"loc":{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":120,"column":9}},{"start":{"line":118,"column":15},"end":{"line":120,"column":9}}],"line":116},"7":{"loc":{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":124,"column":8},"end":{"line":143,"column":9}},{"start":{"line":126,"column":15},"end":{"line":143,"column":9}}],"line":124},"8":{"loc":{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":126,"column":15},"end":{"line":143,"column":9}},{"start":{"line":128,"column":15},"end":{"line":143,"column":9}}],"line":126},"9":{"loc":{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":128,"column":15},"end":{"line":143,"column":9}},{"start":{"line":130,"column":15},"end":{"line":143,"column":9}}],"line":128},"10":{"loc":{"start":{"line":129,"column":19},"end":{"line":129,"column":60}},"type":"binary-expr","locations":[{"start":{"line":129,"column":19},"end":{"line":129,"column":54}},{"start":{"line":129,"column":58},"end":{"line":129,"column":60}}],"line":129},"11":{"loc":{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":130,"column":15},"end":{"line":143,"column":9}},{"start":{"line":132,"column":15},"end":{"line":143,"column":9}}],"line":130},"12":{"loc":{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":132,"column":15},"end":{"line":143,"column":9}},{"start":{"line":134,"column":15},"end":{"line":143,"column":9}}],"line":132},"13":{"loc":{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},"type":"if","locations":[{"start":{"line":134,"column":15},"end":{"line":143,"column":9}},{"start":{"line":136,"column":15},"end":{"line":143,"column":9}}],"line":134},"14":{"loc":{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},"type":"if","locations":[{"start":{"line":138,"column":12},"end":{"line":142,"column":13}},{"start":{"line":140,"column":19},"end":{"line":142,"column":13}}],"line":138},"15":{"loc":{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},"type":"if","locations":[{"start":{"line":149,"column":8},"end":{"line":156,"column":9}},{"start":{"line":154,"column":15},"end":{"line":156,"column":9}}],"line":149},"16":{"loc":{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},"type":"if","locations":[{"start":{"line":165,"column":8},"end":{"line":167,"column":9}},{"start":{},"end":{}}],"line":165},"17":{"loc":{"start":{"line":165,"column":12},"end":{"line":165,"column":63}},"type":"binary-expr","locations":[{"start":{"line":165,"column":12},"end":{"line":165,"column":32}},{"start":{"line":165,"column":36},"end":{"line":165,"column":63}}],"line":165}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"19e580ee86d867ce64c5f82114902fc2b15f0ceb"} -,"/home/runner/work/blockpy/blockpy/src/engine/on_change.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_change.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":6,"column":8},"end":{"line":6,"column":39}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":58}},"3":{"start":{"line":9,"column":8},"end":{"line":9,"column":62}},"4":{"start":{"line":11,"column":8},"end":{"line":11,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":12,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"640bef0a889f1fcbad3697fdc54695f9e61749cd"} -,"/home/runner/work/blockpy/blockpy/src/engine/on_eval.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_eval.js","statementMap":{"0":{"start":{"line":9,"column":36},"end":{"line":76,"column":1}},"1":{"start":{"line":10,"column":19},"end":{"line":10,"column":46}},"2":{"start":{"line":12,"column":4},"end":{"line":75,"column":2}},"3":{"start":{"line":80,"column":8},"end":{"line":80,"column":26}},"4":{"start":{"line":81,"column":8},"end":{"line":81,"column":46}},"5":{"start":{"line":82,"column":8},"end":{"line":82,"column":62}},"6":{"start":{"line":84,"column":26},"end":{"line":84,"column":75}},"7":{"start":{"line":86,"column":21},"end":{"line":86,"column":54}},"8":{"start":{"line":88,"column":27},"end":{"line":88,"column":52}},"9":{"start":{"line":89,"column":8},"end":{"line":89,"column":100}},"10":{"start":{"line":90,"column":8},"end":{"line":90,"column":31}},"11":{"start":{"line":91,"column":29},"end":{"line":91,"column":38}},"12":{"start":{"line":92,"column":21},"end":{"line":92,"column":74}},"13":{"start":{"line":93,"column":8},"end":{"line":93,"column":97}},"14":{"start":{"line":94,"column":8},"end":{"line":94,"column":43}},"15":{"start":{"line":95,"column":25},"end":{"line":95,"column":67}},"16":{"start":{"line":96,"column":8},"end":{"line":102,"column":10}},"17":{"start":{"line":103,"column":8},"end":{"line":103,"column":35}},"18":{"start":{"line":105,"column":8},"end":{"line":105,"column":26}},"19":{"start":{"line":108,"column":8},"end":{"line":108,"column":66}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":20}},"21":{"start":{"line":114,"column":8},"end":{"line":114,"column":38}},"22":{"start":{"line":116,"column":8},"end":{"line":116,"column":66}},"23":{"start":{"line":117,"column":8},"end":{"line":117,"column":72}},"24":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"25":{"start":{"line":119,"column":22},"end":{"line":119,"column":42}},"26":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"27":{"start":{"line":121,"column":8},"end":{"line":121,"column":63}},"28":{"start":{"line":122,"column":8},"end":{"line":122,"column":74}},"29":{"start":{"line":123,"column":22},"end":{"line":123,"column":55}},"30":{"start":{"line":124,"column":8},"end":{"line":124,"column":92}},"31":{"start":{"line":126,"column":20},"end":{"line":126,"column":51}},"32":{"start":{"line":127,"column":8},"end":{"line":127,"column":52}},"33":{"start":{"line":128,"column":23},"end":{"line":128,"column":57}},"34":{"start":{"line":129,"column":8},"end":{"line":129,"column":68}},"35":{"start":{"line":131,"column":19},"end":{"line":131,"column":49}},"36":{"start":{"line":133,"column":8},"end":{"line":133,"column":82}},"37":{"start":{"line":134,"column":8},"end":{"line":134,"column":62}},"38":{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},"39":{"start":{"line":142,"column":12},"end":{"line":145,"column":13}},"40":{"start":{"line":143,"column":16},"end":{"line":143,"column":62}},"41":{"start":{"line":150,"column":8},"end":{"line":150,"column":45}},"42":{"start":{"line":151,"column":21},"end":{"line":151,"column":54}},"43":{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},"44":{"start":{"line":153,"column":12},"end":{"line":153,"column":51}},"45":{"start":{"line":154,"column":12},"end":{"line":154,"column":66}},"46":{"start":{"line":156,"column":12},"end":{"line":156,"column":67}},"47":{"start":{"line":158,"column":12},"end":{"line":158,"column":85}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":36},"end":{"line":9,"column":37}},"loc":{"start":{"line":9,"column":90},"end":{"line":76,"column":1}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":79,"column":4},"end":{"line":79,"column":5}},"loc":{"start":{"line":79,"column":16},"end":{"line":111,"column":5}},"line":79},"2":{"name":"(anonymous_2)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":5}},"loc":{"start":{"line":113,"column":20},"end":{"line":147,"column":5}},"line":113},"3":{"name":"(anonymous_3)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":5}},"loc":{"start":{"line":149,"column":19},"end":{"line":164,"column":5}},"line":149}},"branchMap":{"0":{"loc":{"start":{"line":82,"column":20},"end":{"line":82,"column":61}},"type":"binary-expr","locations":[{"start":{"line":82,"column":20},"end":{"line":82,"column":55}},{"start":{"line":82,"column":59},"end":{"line":82,"column":61}}],"line":82},"1":{"loc":{"start":{"line":89,"column":37},"end":{"line":89,"column":99}},"type":"binary-expr","locations":[{"start":{"line":89,"column":37},"end":{"line":89,"column":89}},{"start":{"line":89,"column":93},"end":{"line":89,"column":99}}],"line":89},"2":{"loc":{"start":{"line":92,"column":21},"end":{"line":92,"column":74}},"type":"binary-expr","locations":[{"start":{"line":92,"column":21},"end":{"line":92,"column":44}},{"start":{"line":92,"column":48},"end":{"line":92,"column":74}}],"line":92},"3":{"loc":{"start":{"line":124,"column":43},"end":{"line":124,"column":90}},"type":"binary-expr","locations":[{"start":{"line":124,"column":43},"end":{"line":124,"column":50}},{"start":{"line":124,"column":54},"end":{"line":124,"column":90}}],"line":124},"4":{"loc":{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},"type":"if","locations":[{"start":{"line":141,"column":8},"end":{"line":146,"column":9}},{"start":{},"end":{}}],"line":141},"5":{"loc":{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":162,"column":9}},{"start":{"line":155,"column":15},"end":{"line":162,"column":9}}],"line":152}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"d1077028bcc00b4ae50b03ce5971eeb7324d4a6a"} -,"/home/runner/work/blockpy/blockpy/src/engine/on_run.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_run.js","statementMap":{"0":{"start":{"line":6,"column":18},"end":{"line":6,"column":59}},"1":{"start":{"line":7,"column":19},"end":{"line":7,"column":49}},"2":{"start":{"line":8,"column":18},"end":{"line":8,"column":46}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":40}},"4":{"start":{"line":12,"column":33},"end":{"line":12,"column":71}},"5":{"start":{"line":13,"column":30},"end":{"line":13,"column":35}},"6":{"start":{"line":17,"column":36},"end":{"line":98,"column":1}},"7":{"start":{"line":18,"column":19},"end":{"line":18,"column":47}},"8":{"start":{"line":19,"column":20},"end":{"line":19,"column":43}},"9":{"start":{"line":23,"column":4},"end":{"line":97,"column":2}},"10":{"start":{"line":102,"column":8},"end":{"line":102,"column":26}},"11":{"start":{"line":103,"column":8},"end":{"line":103,"column":45}},"12":{"start":{"line":104,"column":8},"end":{"line":104,"column":55}},"13":{"start":{"line":106,"column":26},"end":{"line":106,"column":75}},"14":{"start":{"line":108,"column":8},"end":{"line":108,"column":48}},"15":{"start":{"line":110,"column":21},"end":{"line":110,"column":54}},"16":{"start":{"line":112,"column":27},"end":{"line":112,"column":52}},"17":{"start":{"line":113,"column":8},"end":{"line":113,"column":31}},"18":{"start":{"line":114,"column":29},"end":{"line":114,"column":38}},"19":{"start":{"line":115,"column":21},"end":{"line":115,"column":74}},"20":{"start":{"line":116,"column":8},"end":{"line":116,"column":97}},"21":{"start":{"line":117,"column":25},"end":{"line":117,"column":67}},"22":{"start":{"line":119,"column":8},"end":{"line":125,"column":10}},"23":{"start":{"line":134,"column":8},"end":{"line":134,"column":35}},"24":{"start":{"line":136,"column":8},"end":{"line":136,"column":33}},"25":{"start":{"line":138,"column":8},"end":{"line":138,"column":20}},"26":{"start":{"line":145,"column":8},"end":{"line":145,"column":66}},"27":{"start":{"line":146,"column":8},"end":{"line":146,"column":72}},"28":{"start":{"line":147,"column":8},"end":{"line":147,"column":24}},"29":{"start":{"line":148,"column":22},"end":{"line":148,"column":41}},"30":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"31":{"start":{"line":150,"column":8},"end":{"line":150,"column":74}},"32":{"start":{"line":151,"column":22},"end":{"line":151,"column":55}},"33":{"start":{"line":152,"column":8},"end":{"line":152,"column":92}},"34":{"start":{"line":154,"column":20},"end":{"line":154,"column":51}},"35":{"start":{"line":155,"column":8},"end":{"line":155,"column":48}},"36":{"start":{"line":156,"column":23},"end":{"line":156,"column":57}},"37":{"start":{"line":157,"column":8},"end":{"line":157,"column":42}},"38":{"start":{"line":158,"column":8},"end":{"line":158,"column":48}},"39":{"start":{"line":160,"column":19},"end":{"line":160,"column":49}},"40":{"start":{"line":162,"column":8},"end":{"line":162,"column":82}},"41":{"start":{"line":163,"column":8},"end":{"line":163,"column":62}},"42":{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},"43":{"start":{"line":171,"column":12},"end":{"line":174,"column":13}},"44":{"start":{"line":172,"column":16},"end":{"line":172,"column":62}},"45":{"start":{"line":179,"column":8},"end":{"line":179,"column":46}},"46":{"start":{"line":180,"column":21},"end":{"line":180,"column":54}},"47":{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},"48":{"start":{"line":182,"column":12},"end":{"line":182,"column":51}},"49":{"start":{"line":183,"column":12},"end":{"line":183,"column":66}},"50":{"start":{"line":185,"column":12},"end":{"line":185,"column":67}},"51":{"start":{"line":187,"column":12},"end":{"line":187,"column":85}}},"fnMap":{"0":{"name":"findActualInstructorOffset","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":42}},"loc":{"start":{"line":5,"column":59},"end":{"line":10,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":36},"end":{"line":17,"column":37}},"loc":{"start":{"line":17,"column":91},"end":{"line":98,"column":1}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":16},"end":{"line":139,"column":5}},"line":101},"3":{"name":"(anonymous_3)","decl":{"start":{"line":141,"column":4},"end":{"line":141,"column":5}},"loc":{"start":{"line":141,"column":20},"end":{"line":176,"column":5}},"line":141},"4":{"name":"(anonymous_4)","decl":{"start":{"line":178,"column":4},"end":{"line":178,"column":5}},"loc":{"start":{"line":178,"column":19},"end":{"line":193,"column":5}},"line":178}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":11},"end":{"line":9,"column":39}},"type":"cond-expr","locations":[{"start":{"line":9,"column":20},"end":{"line":9,"column":34}},{"start":{"line":9,"column":38},"end":{"line":9,"column":39}}],"line":9},"1":{"loc":{"start":{"line":19,"column":20},"end":{"line":19,"column":43}},"type":"cond-expr","locations":[{"start":{"line":19,"column":28},"end":{"line":19,"column":34}},{"start":{"line":19,"column":36},"end":{"line":19,"column":43}}],"line":19},"2":{"loc":{"start":{"line":115,"column":21},"end":{"line":115,"column":74}},"type":"binary-expr","locations":[{"start":{"line":115,"column":21},"end":{"line":115,"column":44}},{"start":{"line":115,"column":48},"end":{"line":115,"column":74}}],"line":115},"3":{"loc":{"start":{"line":152,"column":43},"end":{"line":152,"column":90}},"type":"binary-expr","locations":[{"start":{"line":152,"column":43},"end":{"line":152,"column":50}},{"start":{"line":152,"column":54},"end":{"line":152,"column":90}}],"line":152},"4":{"loc":{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},"type":"if","locations":[{"start":{"line":170,"column":8},"end":{"line":175,"column":9}},{"start":{},"end":{}}],"line":170},"5":{"loc":{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},"type":"if","locations":[{"start":{"line":181,"column":8},"end":{"line":191,"column":9}},{"start":{"line":184,"column":15},"end":{"line":191,"column":9}}],"line":181}},"s":{"0":0,"1":0,"2":0,"3":0,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"97a454929d49cc8293ce9f587ea3503372792ea3"} -,"/home/runner/work/blockpy/blockpy/src/engine/on_sample.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/on_sample.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":6,"column":8},"end":{"line":6,"column":36}},"2":{"start":{"line":7,"column":8},"end":{"line":7,"column":55}},"3":{"start":{"line":9,"column":8},"end":{"line":9,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":10,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"0d68c232ad5d23f4558f8762cebf004d92aa5207"} -,"/home/runner/work/blockpy/blockpy/src/engine/run.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/run.js","statementMap":{"0":{"start":{"line":6,"column":8},"end":{"line":6,"column":65}},"1":{"start":{"line":7,"column":8},"end":{"line":7,"column":33}},"2":{"start":{"line":8,"column":8},"end":{"line":8,"column":62}},"3":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"4":{"start":{"line":10,"column":12},"end":{"line":10,"column":27}},"5":{"start":{"line":13,"column":8},"end":{"line":13,"column":99}},"6":{"start":{"line":14,"column":8},"end":{"line":14,"column":81}},"7":{"start":{"line":16,"column":8},"end":{"line":16,"column":26}},"8":{"start":{"line":18,"column":8},"end":{"line":18,"column":23}},"9":{"start":{"line":19,"column":8},"end":{"line":19,"column":27}},"10":{"start":{"line":21,"column":8},"end":{"line":24,"column":10}},"11":{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},"12":{"start":{"line":27,"column":12},"end":{"line":27,"column":47}},"13":{"start":{"line":29,"column":27},"end":{"line":29,"column":66}},"14":{"start":{"line":30,"column":20},"end":{"line":30,"column":41}},"15":{"start":{"line":31,"column":21},"end":{"line":31,"column":58}},"16":{"start":{"line":32,"column":8},"end":{"line":32,"column":113}},"17":{"start":{"line":33,"column":8},"end":{"line":33,"column":115}},"18":{"start":{"line":35,"column":8},"end":{"line":35,"column":33}},"19":{"start":{"line":37,"column":8},"end":{"line":37,"column":26}},"20":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"21":{"start":{"line":43,"column":8},"end":{"line":43,"column":35}},"22":{"start":{"line":44,"column":22},"end":{"line":47,"column":9}},"23":{"start":{"line":46,"column":70},"end":{"line":46,"column":82}},"24":{"start":{"line":48,"column":8},"end":{"line":48,"column":106}},"25":{"start":{"line":49,"column":8},"end":{"line":49,"column":55}},"26":{"start":{"line":50,"column":8},"end":{"line":50,"column":53}},"27":{"start":{"line":51,"column":8},"end":{"line":51,"column":62}},"28":{"start":{"line":52,"column":8},"end":{"line":52,"column":62}},"29":{"start":{"line":53,"column":8},"end":{"line":53,"column":24}},"30":{"start":{"line":54,"column":21},"end":{"line":54,"column":54}},"31":{"start":{"line":55,"column":23},"end":{"line":55,"column":36}},"32":{"start":{"line":56,"column":8},"end":{"line":56,"column":59}},"33":{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},"34":{"start":{"line":58,"column":12},"end":{"line":58,"column":53}},"35":{"start":{"line":60,"column":8},"end":{"line":75,"column":11}},"36":{"start":{"line":61,"column":12},"end":{"line":61,"column":68}},"37":{"start":{"line":62,"column":12},"end":{"line":62,"column":28}},"38":{"start":{"line":63,"column":12},"end":{"line":73,"column":14}},"39":{"start":{"line":66,"column":68},"end":{"line":66,"column":74}},"40":{"start":{"line":67,"column":75},"end":{"line":67,"column":89}},"41":{"start":{"line":67,"column":100},"end":{"line":67,"column":106}},"42":{"start":{"line":74,"column":12},"end":{"line":74,"column":22}},"43":{"start":{"line":79,"column":8},"end":{"line":79,"column":44}},"44":{"start":{"line":80,"column":8},"end":{"line":80,"column":63}},"45":{"start":{"line":81,"column":21},"end":{"line":81,"column":54}},"46":{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},"47":{"start":{"line":83,"column":12},"end":{"line":83,"column":105}},"48":{"start":{"line":85,"column":12},"end":{"line":85,"column":121}},"49":{"start":{"line":87,"column":8},"end":{"line":87,"column":24}},"50":{"start":{"line":88,"column":8},"end":{"line":100,"column":11}},"51":{"start":{"line":89,"column":12},"end":{"line":98,"column":14}},"52":{"start":{"line":93,"column":68},"end":{"line":93,"column":74}},"53":{"start":{"line":94,"column":75},"end":{"line":94,"column":89}},"54":{"start":{"line":94,"column":100},"end":{"line":94,"column":106}},"55":{"start":{"line":99,"column":12},"end":{"line":99,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":4},"end":{"line":5,"column":5}},"loc":{"start":{"line":5,"column":16},"end":{"line":40,"column":5}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":42,"column":20},"end":{"line":76,"column":5}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":46,"column":62},"end":{"line":46,"column":63}},"loc":{"start":{"line":46,"column":70},"end":{"line":46,"column":82}},"line":46},"3":{"name":"(anonymous_3)","decl":{"start":{"line":60,"column":27},"end":{"line":60,"column":28}},"loc":{"start":{"line":60,"column":48},"end":{"line":75,"column":9}},"line":60},"4":{"name":"(anonymous_4)","decl":{"start":{"line":66,"column":63},"end":{"line":66,"column":64}},"loc":{"start":{"line":66,"column":68},"end":{"line":66,"column":74}},"line":66},"5":{"name":"(anonymous_5)","decl":{"start":{"line":67,"column":70},"end":{"line":67,"column":71}},"loc":{"start":{"line":67,"column":75},"end":{"line":67,"column":89}},"line":67},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":95},"end":{"line":67,"column":96}},"loc":{"start":{"line":67,"column":100},"end":{"line":67,"column":106}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":78,"column":4},"end":{"line":78,"column":5}},"loc":{"start":{"line":78,"column":19},"end":{"line":101,"column":5}},"line":78},"8":{"name":"(anonymous_8)","decl":{"start":{"line":88,"column":27},"end":{"line":88,"column":28}},"loc":{"start":{"line":88,"column":48},"end":{"line":100,"column":9}},"line":88},"9":{"name":"(anonymous_9)","decl":{"start":{"line":93,"column":63},"end":{"line":93,"column":64}},"loc":{"start":{"line":93,"column":68},"end":{"line":93,"column":74}},"line":93},"10":{"name":"(anonymous_10)","decl":{"start":{"line":94,"column":70},"end":{"line":94,"column":71}},"loc":{"start":{"line":94,"column":75},"end":{"line":94,"column":89}},"line":94},"11":{"name":"(anonymous_11)","decl":{"start":{"line":94,"column":95},"end":{"line":94,"column":96}},"loc":{"start":{"line":94,"column":100},"end":{"line":94,"column":106}},"line":94}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},"type":"if","locations":[{"start":{"line":9,"column":8},"end":{"line":11,"column":9}},{"start":{},"end":{}}],"line":9},"1":{"loc":{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},"type":"if","locations":[{"start":{"line":26,"column":8},"end":{"line":28,"column":9}},{"start":{},"end":{}}],"line":26},"2":{"loc":{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":59,"column":9}},{"start":{},"end":{}}],"line":57},"3":{"loc":{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},"type":"if","locations":[{"start":{"line":82,"column":8},"end":{"line":86,"column":9}},{"start":{"line":84,"column":15},"end":{"line":86,"column":9}}],"line":82},"4":{"loc":{"start":{"line":82,"column":12},"end":{"line":82,"column":60}},"type":"binary-expr","locations":[{"start":{"line":82,"column":12},"end":{"line":82,"column":33}},{"start":{"line":82,"column":37},"end":{"line":82,"column":60}}],"line":82}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"79f1f56e277c95e083c7132a080d19afeebf1d78"} -,"/home/runner/work/blockpy/blockpy/src/engine/sample.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/sample.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":8},"end":{"line":7,"column":36}},"2":{"start":{"line":8,"column":8},"end":{"line":8,"column":46}},"3":{"start":{"line":10,"column":8},"end":{"line":10,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":11,"column":5}},"line":4}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{"0":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2626dbbd5292f2decbe5e13df3db62cfb62098e2"} -,"/home/runner/work/blockpy/blockpy/src/engine/student.js": {"path":"/home/runner/work/blockpy/blockpy/src/engine/student.js","statementMap":{"0":{"start":{"line":5,"column":8},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":23},"end":{"line":7,"column":47}},"2":{"start":{"line":8,"column":8},"end":{"line":9,"column":83}},"3":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"4":{"start":{"line":10,"column":8},"end":{"line":10,"column":46}},"5":{"start":{"line":12,"column":8},"end":{"line":12,"column":55}},"6":{"start":{"line":15,"column":8},"end":{"line":15,"column":51}},"7":{"start":{"line":20,"column":8},"end":{"line":20,"column":76}},"8":{"start":{"line":22,"column":8},"end":{"line":22,"column":20}},"9":{"start":{"line":26,"column":20},"end":{"line":26,"column":81}},"10":{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},"11":{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},"12":{"start":{"line":30,"column":16},"end":{"line":30,"column":58}},"13":{"start":{"line":32,"column":16},"end":{"line":32,"column":76}},"14":{"start":{"line":35,"column":12},"end":{"line":35,"column":36}},"15":{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},"16":{"start":{"line":41,"column":12},"end":{"line":41,"column":60}},"17":{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},"18":{"start":{"line":43,"column":12},"end":{"line":43,"column":53}},"19":{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},"20":{"start":{"line":45,"column":12},"end":{"line":45,"column":77}},"21":{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},"22":{"start":{"line":47,"column":12},"end":{"line":47,"column":54}},"23":{"start":{"line":49,"column":24},"end":{"line":49,"column":85}},"24":{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},"25":{"start":{"line":51,"column":16},"end":{"line":51,"column":81}},"26":{"start":{"line":53,"column":16},"end":{"line":53,"column":40}},"27":{"start":{"line":59,"column":8},"end":{"line":59,"column":65}},"28":{"start":{"line":63,"column":8},"end":{"line":65,"column":50}},"29":{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},"30":{"start":{"line":85,"column":30},"end":{"line":85,"column":62}},"31":{"start":{"line":86,"column":12},"end":{"line":86,"column":87}},"32":{"start":{"line":90,"column":12},"end":{"line":100,"column":15}},"33":{"start":{"line":101,"column":12},"end":{"line":101,"column":63}},"34":{"start":{"line":102,"column":12},"end":{"line":102,"column":58}},"35":{"start":{"line":113,"column":24},"end":{"line":113,"column":49}},"36":{"start":{"line":114,"column":8},"end":{"line":114,"column":78}},"37":{"start":{"line":115,"column":8},"end":{"line":115,"column":72}},"38":{"start":{"line":116,"column":8},"end":{"line":116,"column":69}},"39":{"start":{"line":117,"column":8},"end":{"line":117,"column":72}},"40":{"start":{"line":118,"column":8},"end":{"line":118,"column":69}},"41":{"start":{"line":119,"column":8},"end":{"line":119,"column":77}},"42":{"start":{"line":123,"column":27},"end":{"line":123,"column":36}},"43":{"start":{"line":124,"column":24},"end":{"line":137,"column":9}},"44":{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},"45":{"start":{"line":126,"column":16},"end":{"line":126,"column":46}},"46":{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},"47":{"start":{"line":129,"column":16},"end":{"line":129,"column":71}},"48":{"start":{"line":129,"column":49},"end":{"line":129,"column":69}},"49":{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},"50":{"start":{"line":132,"column":16},"end":{"line":132,"column":73}},"51":{"start":{"line":132,"column":51},"end":{"line":132,"column":71}},"52":{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},"53":{"start":{"line":135,"column":16},"end":{"line":135,"column":76}},"54":{"start":{"line":135,"column":54},"end":{"line":135,"column":74}},"55":{"start":{"line":138,"column":8},"end":{"line":138,"column":23}},"56":{"start":{"line":139,"column":8},"end":{"line":139,"column":40}},"57":{"start":{"line":146,"column":21},"end":{"line":146,"column":54}},"58":{"start":{"line":148,"column":20},"end":{"line":148,"column":22}},"59":{"start":{"line":151,"column":8},"end":{"line":166,"column":9}},"60":{"start":{"line":152,"column":24},"end":{"line":152,"column":58}},"61":{"start":{"line":153,"column":12},"end":{"line":153,"column":73}},"62":{"start":{"line":154,"column":12},"end":{"line":154,"column":39}},"63":{"start":{"line":157,"column":12},"end":{"line":162,"column":14}},"64":{"start":{"line":163,"column":12},"end":{"line":163,"column":33}},"65":{"start":{"line":164,"column":12},"end":{"line":164,"column":50}},"66":{"start":{"line":165,"column":12},"end":{"line":165,"column":25}},"67":{"start":{"line":168,"column":8},"end":{"line":173,"column":10}},"68":{"start":{"line":174,"column":8},"end":{"line":174,"column":20}},"69":{"start":{"line":178,"column":21},"end":{"line":178,"column":54}},"70":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"71":{"start":{"line":180,"column":12},"end":{"line":180,"column":92}},"72":{"start":{"line":182,"column":12},"end":{"line":182,"column":80}},"73":{"start":{"line":187,"column":21},"end":{"line":187,"column":54}},"74":{"start":{"line":188,"column":23},"end":{"line":188,"column":52}},"75":{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},"76":{"start":{"line":190,"column":30},"end":{"line":190,"column":100}},"77":{"start":{"line":191,"column":26},"end":{"line":191,"column":78}},"78":{"start":{"line":192,"column":12},"end":{"line":192,"column":69}},"79":{"start":{"line":193,"column":12},"end":{"line":193,"column":114}},"80":{"start":{"line":194,"column":12},"end":{"line":194,"column":99}},"81":{"start":{"line":194,"column":36},"end":{"line":194,"column":97}},"82":{"start":{"line":195,"column":12},"end":{"line":195,"column":31}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},"loc":{"start":{"line":4,"column":16},"end":{"line":23,"column":5}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":8,"column":31},"end":{"line":8,"column":32}},"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"line":9},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":4},"end":{"line":25,"column":5}},"loc":{"start":{"line":25,"column":23},"end":{"line":37,"column":5}},"line":25},"3":{"name":"(anonymous_3)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":25},"end":{"line":56,"column":5}},"line":39},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":25},"end":{"line":60,"column":5}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":4},"end":{"line":62,"column":5}},"loc":{"start":{"line":62,"column":26},"end":{"line":66,"column":5}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":80,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":80,"column":84},"end":{"line":104,"column":5}},"line":80},"7":{"name":"(anonymous_7)","decl":{"start":{"line":112,"column":4},"end":{"line":112,"column":5}},"loc":{"start":{"line":112,"column":15},"end":{"line":120,"column":5}},"line":112},"8":{"name":"(anonymous_8)","decl":{"start":{"line":122,"column":4},"end":{"line":122,"column":5}},"loc":{"start":{"line":122,"column":18},"end":{"line":140,"column":5}},"line":122},"9":{"name":"(anonymous_9)","decl":{"start":{"line":124,"column":24},"end":{"line":124,"column":25}},"loc":{"start":{"line":124,"column":34},"end":{"line":137,"column":9}},"line":124},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":34},"end":{"line":129,"column":35}},"loc":{"start":{"line":129,"column":49},"end":{"line":129,"column":69}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":132,"column":36},"end":{"line":132,"column":37}},"loc":{"start":{"line":132,"column":51},"end":{"line":132,"column":71}},"line":132},"12":{"name":"(anonymous_12)","decl":{"start":{"line":135,"column":39},"end":{"line":135,"column":40}},"loc":{"start":{"line":135,"column":54},"end":{"line":135,"column":74}},"line":135},"13":{"name":"(anonymous_13)","decl":{"start":{"line":145,"column":4},"end":{"line":145,"column":5}},"loc":{"start":{"line":145,"column":18},"end":{"line":175,"column":5}},"line":145},"14":{"name":"(anonymous_14)","decl":{"start":{"line":177,"column":4},"end":{"line":177,"column":5}},"loc":{"start":{"line":177,"column":17},"end":{"line":184,"column":5}},"line":177},"15":{"name":"(anonymous_15)","decl":{"start":{"line":186,"column":4},"end":{"line":186,"column":5}},"loc":{"start":{"line":186,"column":25},"end":{"line":197,"column":5}},"line":186},"16":{"name":"(anonymous_16)","decl":{"start":{"line":194,"column":30},"end":{"line":194,"column":31}},"loc":{"start":{"line":194,"column":36},"end":{"line":194,"column":97}},"line":194}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":82}},"type":"cond-expr","locations":[{"start":{"line":9,"column":67},"end":{"line":9,"column":75}},{"start":{"line":9,"column":78},"end":{"line":9,"column":82}}],"line":9},"1":{"loc":{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":36,"column":9}},{"start":{"line":34,"column":15},"end":{"line":36,"column":9}}],"line":28},"2":{"loc":{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},"type":"if","locations":[{"start":{"line":29,"column":12},"end":{"line":33,"column":13}},{"start":{"line":31,"column":19},"end":{"line":33,"column":13}}],"line":29},"3":{"loc":{"start":{"line":29,"column":16},"end":{"line":29,"column":83}},"type":"binary-expr","locations":[{"start":{"line":29,"column":16},"end":{"line":29,"column":31}},{"start":{"line":29,"column":35},"end":{"line":29,"column":83}}],"line":29},"4":{"loc":{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":40,"column":8},"end":{"line":55,"column":9}},{"start":{"line":42,"column":15},"end":{"line":55,"column":9}}],"line":40},"5":{"loc":{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":42,"column":15},"end":{"line":55,"column":9}},{"start":{"line":44,"column":15},"end":{"line":55,"column":9}}],"line":42},"6":{"loc":{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":15},"end":{"line":55,"column":9}},{"start":{"line":46,"column":15},"end":{"line":55,"column":9}}],"line":44},"7":{"loc":{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":15},"end":{"line":55,"column":9}},{"start":{"line":48,"column":15},"end":{"line":55,"column":9}}],"line":46},"8":{"loc":{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},"type":"if","locations":[{"start":{"line":50,"column":12},"end":{"line":54,"column":13}},{"start":{"line":52,"column":19},"end":{"line":54,"column":13}}],"line":50},"9":{"loc":{"start":{"line":63,"column":15},"end":{"line":65,"column":49}},"type":"binary-expr","locations":[{"start":{"line":63,"column":15},"end":{"line":63,"column":54}},{"start":{"line":64,"column":12},"end":{"line":64,"column":49}},{"start":{"line":65,"column":12},"end":{"line":65,"column":49}}],"line":63},"10":{"loc":{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":103,"column":9}},{"start":{},"end":{}}],"line":81},"11":{"loc":{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},"type":"if","locations":[{"start":{"line":125,"column":12},"end":{"line":127,"column":13}},{"start":{},"end":{}}],"line":125},"12":{"loc":{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},"type":"if","locations":[{"start":{"line":128,"column":12},"end":{"line":130,"column":13}},{"start":{},"end":{}}],"line":128},"13":{"loc":{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},"type":"if","locations":[{"start":{"line":131,"column":12},"end":{"line":133,"column":13}},{"start":{},"end":{}}],"line":131},"14":{"loc":{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},"type":"if","locations":[{"start":{"line":134,"column":12},"end":{"line":136,"column":13}},{"start":{},"end":{}}],"line":134},"15":{"loc":{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},"type":"if","locations":[{"start":{"line":179,"column":8},"end":{"line":183,"column":9}},{"start":{"line":181,"column":15},"end":{"line":183,"column":9}}],"line":179},"16":{"loc":{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":189,"column":8},"end":{"line":196,"column":9}},{"start":{},"end":{}}],"line":189}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"c681a712b4588cb5a41c3d6475d9460936319f75"} -} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css deleted file mode 100644 index f418035b4..000000000 --- a/coverage/lcov-report/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js deleted file mode 100644 index 530d1ed2b..000000000 --- a/coverage/lcov-report/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 6.91% - Statements - 212/3065 -
- - -
- 1.58% - Branches - 20/1258 -
- - -
- 3.37% - Functions - 24/711 -
- - -
- 6.84% - Lines - 206/3008 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
src -
-
8%168/20981.87%18/9613.72%18/4837.94%164/2065
src/editor -
-
7.06%37/5241.28%2/1564.41%6/1366.86%35/510
src/engine -
-
1.58%7/4430%0/1410%0/921.61%7/433
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7cda..000000000 --- a/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js deleted file mode 100644 index b3225238f..000000000 --- a/coverage/lcov-report/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js deleted file mode 100644 index 4ed70ae5a..000000000 --- a/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/lcov-report/src/blockpy.js.html b/coverage/lcov-report/src/blockpy.js.html deleted file mode 100644 index aa72a373b..000000000 --- a/coverage/lcov-report/src/blockpy.js.html +++ /dev/null @@ -1,3931 +0,0 @@ - - - - - - Code coverage report for src/blockpy.js - - - - - - - - - -
-
-

All files / src blockpy.js

-
- -
- 0.23% - Statements - 1/433 -
- - -
- 0% - Branches - 0/301 -
- - -
- 0% - Functions - 0/134 -
- - -
- 0.23% - Lines - 1/432 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * @fileoverview Starting point of the BlockPy application, containing the main
- * BlockPy class.
- */
-import "./css/blockpy.css";
-import "./css/bootstrap_retheme.css";
-import $ from "jquery";
-import {$builtinmodule as imageModule} from "skulpt_modules/image";
-import {$builtinmodule as weakrefModule} from "skulpt_modules/weakref";
-//import {$builtinmodule as matplotlibModule} from "skulpt_modules/matplotlib2";
-import {LocalStorageWrapper} from "storage.js";
-import {EditorsEnum} from "editors.js";
-import {DisplayModes} from "editor/python.js";
-import {StatusState} from "server.js";
-import {makeInterface, makeExtraInterfaceSubscriptions, SecondRowSecondPanelOptions} from "interface.js";
-import {Editors} from "editors.js";
-import {
-    BlockPyFileSystem,
-    loadConcatenatedFile,
-    makeModelFile,
-    observeConcatenatedFile,
-    UNDELETABLE_FILES,
-    UNRENAMABLE_FILES
-} from "./files";
-import {uploadFile, downloadFile} from "./editor/abstract_editor";
-import {BlockPyEngine} from "engine.js";
-import {AST_DESCRIPTIONS, BlockPyTrace} from "./trace";
-import {BlockPyConsole} from "./console";
-import {BlockPyFeedback} from "feedback.js";
-import {BlockPyServer} from "./server";
-import {BlockPyDialog} from "./dialog";
-import {AssigmentType, loadAssignmentSettings, makeAssignmentSettingsModel} from "./editor/assignment_settings";
-import {BlockPyCorgis, _IMPORTED_COMPLETE_DATASETS, _IMPORTED_DATASETS} from "./corgis";
-import {BlockPyHistory} from "./history";
-import {capitalize, extractPart, getCurrentTime} from "./utilities";
-import {SampleSubmission, SubmissionStatuses} from "./editor/sample_submissions";
- 
-export {_IMPORTED_COMPLETE_DATASETS, _IMPORTED_DATASETS};
- 
-const EDITOR_VERSION = "5.1.2";
- 
-/**
- * Major entry point for creating a BlockPy instance.
- * Two most important fields are `model` and `components`.
- * The `model` holds all the data about the interface.
- * The `components` are references to the disparate parts of BlockPy.
- *
- * Most of this classes definition is just initializing the model and updating
- * it on an assignment switch.
- */
-export class BlockPy {
-    /**
-     * @param {Object} configuration - User level settings (e.g., what editor mode, whether to mute semantic errors, etc.)
-     * @param {Object} assignment - Assignment level settings (data about the loaded assignment, user, submission, etc.)
-     * @param {Object} submission - Includes the source code of any programs to be loaded
-     */
-    constructor(configuration, assignment, submission) {
-        this.initModel(configuration);
-        if (assignment !== undefined) {
-            this.setAssignment(configuration, assignment, submission);
-        }
-        this.initMain();
-    }
- 
-    /**
-     * Initializes the BlockPy object by initializing its interface,
-     * model, and components.
-     *
-     */
-    initMain() {
-        this.initUtilities();
-        this.initModelMethods();
-        this.turnOnHacks();
-        this.initInterface();
-        this.applyModel();
-        this.initComponents();
-        this.makeExtraSubscriptions();
-        this.start();
-    };
- 
-    /**
-     * Retrieves a default value or
-     * @param {string} key - the key to look up a value for
-     * @param {Object} defaultValue - if the key is not found anywhere, use this value
-     */
-    getSetting(key, defaultValue) {
-        if (key in this.initialConfiguration_) {
-            return this.initialConfiguration_[key];
-        } else if (this.localSettings_.has(key)) {
-            return this.localSettings_.get(key);
-        } else {
-            return defaultValue;
-        }
-    }
- 
-    /**
-     * Initializes the model to its defaults.
-     *
-     * Categories:
-     *   * user: values for the current user (stored to server)
-     *   * assignment: values for the current assignment (stored to server)
-     *   * submission: values for the current submission (stored to server)
-     *   * display: flags related to current visibility (stored to localSettings)
-     *   * status: messages related to current status (not stored)
-     *   * execution: values related to last run (not stored)
-     *   * configuration: constant values related to setup (not stored)
-     */
-    initModel(configuration) {
-        // Connect to local storage
-        this.localSettings_ = new LocalStorageWrapper("localSettings");
-        this.initialConfiguration_ = configuration;
-        //console.log(configuration, configuration["submission.code"], configuration["partId"], extractPart(configuration["submission.code"] || "", configuration["partId"]));
- 
-        this.model = {
-            user: {
-                id: ko.observable(configuration["user.id"]),
-                name: ko.observable(configuration["user.name"]),
-                /**
-                 * Whether you are an Owner (can modify the assignment), Grader (can view
-                 * the assignments' information) or Student (can not see any instructor stuff).
-                 * @type {bool}
-                 */
-                role: ko.observable(this.getSetting("user.role", "owner")),
-                /**
-                 * Current course for this user
-                 */
-                courseId: ko.observable(configuration["user.course_id"]),
-                /**
-                 * Current assignment group that this user is inside
-                 */
-                groupId: ko.observable(configuration["user.group_id"])
-            },
-            assignment: {
-                id: ko.observable(null),
-                name: ko.observable("Scratch Canvas"),
-                instructions: ko.observable("Welcome to BlockPy. Try editing and running the code below."),
-                /**
-                 * The human-friendly URL to use as a shortcut for this assignment
-                 */
-                url: ko.observable(""),
-                // TODO: warning message if maze
-                type: ko.observable(AssigmentType.BLOCKPY),
-                points: ko.observable(null),
-                startingCode: ko.observable(configuration["assignment.starting_code"] || ""),
-                onRun: ko.observable(configuration["assignment.on_run"] || ""),
-                onChange: ko.observable(configuration["assignment.on_change"] || null),
-                onEval: ko.observable(configuration["assignment.on_eval"] || null),
-                extraInstructorFiles: ko.observableArray(loadConcatenatedFile(configuration["assignment.extra_instructor_files"]) || []),
-                extraStartingFiles: ko.observableArray([]),
-                forkedId: ko.observable(null),
-                forkedVersion: ko.observable(null),
-                ownerId: ko.observable(null),
-                courseId: ko.observable(null),
-                version: ko.observable(null),
-                tags: ko.observableArray([]),
-                sampleSubmissions: ko.observableArray([]),
-                reviewed: ko.observable(configuration["assignment.reviewed"]),
-                public: ko.observable(configuration["assignment.public"]),
-                hidden: ko.observable(configuration["assignment.hidden"]),
-                ipRanges: ko.observable(configuration["assignment.ip_ranges"]),
-                settings: makeAssignmentSettingsModel(configuration)
-            },
-            submission: {
-                id: ko.observable(null),
-                code: ko.observable(extractPart(configuration["submission.code"] || "", configuration["partId"]) || ""),
-                extraFiles: ko.observableArray([]),
-                url: ko.observable(""),
-                endpoint: ko.observable(""),
-                score: ko.observable(0),
-                correct: ko.observable(false),
-                // assignmentId inferred from assignment.id
-                // courseId inferred from user.courseId
-                // userId inferred from user.id
-                // assignmentVersion inferred from assignment.version
-                version: ko.observable(0),
-                submissionStatus: ko.observable("Started"),
-                gradingStatus: ko.observable("NotReady"),
-                ownerId: ko.observable(null)
-            },
-            display: {
-                /**
-                 * Currently visible File, if applicable
-                 * @type {String}
-                 */
-                filename: ko.observable(null),
-                /**
-                 * Whether or not to be presented with the instructor settings and files
-                 * @type {bool}
-                 */
-                instructor: ko.observable(""+this.getSetting("display.instructor", "false")==="true"),
-                /**
-                 * Whether or not to prevent the printer from showing things
-                 */
-                mutePrinter: ko.observable(false),
-                /**
-                 * (Python Views) The current editor mode.
-                 * @type {DisplayModes}
-                 */
-                pythonMode: ko.observable(this.getSetting("display.python.mode", DisplayModes.TEXT)),
-                /**
-                 * Whether or not History mode is engaged.
-                 * @type {bool}
-                 */
-                historyMode: ko.observable(false),
-                /**
-                 * Whether or not to be auto-saving changes in Python editor
-                 * If an integer, specifies the delay that should be used (microseconds).
-                 * This is never on in non-Python editors.
-                 * @type {bool|int}
-                 */
-                autoSave: ko.observable(true),
-                /**
-                 * Whether or not the console is full width and feedback is hidden
-                 */
-                bigConsole: ko.observable(false),
-                /**
-                 * The height to use for the console.
-                 *    If null, then let the height remain unchanged
-                 *    If a number, then the
-                 */
-                previousConsoleHeight: ko.observable(null),
-                currentConsoleHeight: ko.observable(null),
-                /**
-                 * Which panel to show in the second row's second column
-                 * @type {SecondRowSecondPanelOptions}
-                 */
-                secondRowSecondPanel: ko.observable(SecondRowSecondPanelOptions.FEEDBACK),
-                previousSecondRowSecondPanel: ko.observable(null),
-                /**
-                 * Whether or not to be tracing the code right now
-                 */
-                traceExecution: ko.observable(false),
-                /**
-                 * The list of promises to still resolve while loading datasets
-                 * @type {Array<Promise>}
-                 */
-                loadingDatasets: ko.observableArray([]),
-                /**
-                 * The temporary changed value of the instructions have been changed from what is in the assignment
-                 */
-                changedInstructions: ko.observable(null),
-                /**
-                 * A holder for the timer to trigger on-changes
-                 */
-                triggerOnChange: null,
-                /**
-                 * Whether the current feedback and output corresponds to the current submission.
-                 * This would be false if there is no feedback/output (i.e., code has not been run),
-                 * or if the user has modified the submission after the last run (e.g., by editing
-                 * the text).
-                 */
-                dirtySubmission: ko.observable(true),
-                /**
-                 *  Whether or not to make the BlockPy element in FULL SCREEN mode. Sadly, not fullscreen
-                 *  within the window, but FULL SCREEN. Very aggressive.
-                 */
-                fullscreen: ko.observable(false),
-                /**
-                 * User-supplied passcode to compare on the server against the current passcode.
-                 */
-                passcode: ko.observable(""),
-                /**
-                 * Whether or not to clear out inputs after a run/on_run cycle
-                 */
-                clearInputs: ko.observable(true),
-                /**
-                 * Whether or not images should be rendered (true), or just stay as text code (false).
-                 */
-                renderImages: ko.observable(true),
-                editorVersion: EDITOR_VERSION,
-                readOnly: ko.observable(this.getSetting("display.read_only", "false").toString()==="true"),
-                /**
-                 * Uploaded files are ones that have been listed by the remote
-                 */
-                uploadedFiles: ko.observable(null),
-                /**
-                 * Backup copy of the latest known full code for the Submission. This is relevant if there was a
-                 * PartID specified, in which case the submission.code in the model is only showing what we know
-                 * locally.
-                 */
-                backupSubmissionCode: ko.observable(configuration["submission.code"] || ""),
-                /**
-                 * Controls the rating system
-                 */
-                showRating: ko.observable(this.getSetting("display.showRating", "true").toString()==="true"),
-                /**
-                 * Whether the student has rated this current feedback
-                 */
-                hasRated: ko.observable(false),
-            },
-            status: {
-                // @type {ServerStatus}
-                loadAssignment: ko.observable(StatusState.READY),
-                loadAssignmentMessage: ko.observable(""),
-                // @type {ServerStatus}
-                loadHistory: ko.observable(StatusState.READY),
-                loadHistoryMessage: ko.observable(""),
-                // @type {ServerStatus}
-                loadFile: ko.observable(StatusState.READY),
-                loadFileMessage: ko.observable(""),
-                // @type {ServerStatus}
-                loadDataset: ko.observable(StatusState.READY),
-                loadDatasetMessage: ko.observable(""),
-                // @type {ServerStatus}
-                logEvent: ko.observable(StatusState.READY),
-                logEventMessage: ko.observable(""),
-                // @type {ServerStatus}
-                saveImage: ko.observable(StatusState.READY),
-                saveImageMessage: ko.observable(""),
-                // @type {ServerStatus}
-                saveFile: ko.observable(StatusState.READY),
-                saveFileMessage: ko.observable(""),
-                // @type {ServerStatus}
-                saveAssignment: ko.observable(StatusState.READY),
-                saveAssignmentMessage: ko.observable(""),
-                // @type {ServerStatus}
-                updateSubmission: ko.observable(StatusState.READY),
-                updateSubmissionMessage: ko.observable(""),
-                // @type {ServerStatus}
-                updateSubmissionStatus: ko.observable(StatusState.READY),
-                updateSubmissionStatusMessage: ko.observable(""),
-                // @type {ServerStatus}
-                listUploadedFiles: ko.observable(StatusState.READY),
-                listUploadedFilesMessage: ko.observable(""),
-                // @type {ServerStatus}
-                downloadFile: ko.observable(StatusState.READY),
-                downloadFileMessage: ko.observable(""),
-                // @type {ServerStatus}
-                uploadFile: ko.observable(StatusState.READY),
-                uploadFileMessage: ko.observable(""),
-                // @type {ServerStatus}
-                renameFile: ko.observable(StatusState.READY),
-                renameFileMessage: ko.observable(""),
-                // @type {ServerStatus}
-                externalAPI: ko.observable(StatusState.READY),
-                externalAPIMessage: ko.observable(""),
-                // @type {ServerStatus}
-                onExecution: ko.observable(StatusState.READY),
-            },
-            execution: {
-                // Information about in-progress executions
-                reports: {},
-                // list of Output objects
-                output: ko.observableArray([]),
-                // List of inputted strings
-                input: ko.observableArray([]),
-                inputIndex: ko.observable(0),
-                // Information related to a student run
-                student: {
-                    // str: the filename that was last executed and is associated with these results
-                    filename: ko.observable(null),
-                    // integer
-                    currentStep: ko.observable(null),
-                    // integer
-                    lastStep: ko.observable(null),
-                    // integer
-                    currentLine: ko.observable(null),
-                    lastLine: ko.observable(0),
-                    // array of simple objects
-                    currentTraceData: ko.observableArray([]),
-                    // integer
-                    currentTraceStep: ko.observable(0),
-                    // Actual execution results
-                    results: null,
-                    globals: ko.observable(null),
-                    calls: {}
-                },
-                instructor: {
-                    globals: null,
-                    sysmodules: undefined
-                },
-                // Information related to feedback from the instructor run
-                feedback: {
-                    // str (markdown)
-                    message: ko.observable("Ready"),
-                    category: ko.observable(null),
-                    label: ko.observable(null),
-                    hidden: ko.observable(false),
-                    linesError: ko.observableArray([]),
-                    linesUncovered: ko.observableArray([]),
-                    // The results of the last execution
-                    results: null,
-                },
-            },
-            configuration: {
-                /**
-                 * Functions to fire when certain events occur
-                 */
-                callbacks: {
-                    /**
-                     * When the student gets a success
-                     */
-                    "success": this.initialConfiguration_["callback.success"],
-                },
-                /**
-                 * Whether or not the server is connected.
-                 * @type {bool}
-                 */
-                serverConnected: ko.observable(this.getSetting("server.connected", true)),
-                // string
-                blocklyPath: this.initialConfiguration_["blockly.path"],
-                // string
-                attachmentPoint: this.initialConfiguration_["attachment.point"],
-                // JQuery object
-                container: null,
-                // Maps codes ('log_event', 'save_code') to URLs
-                urls: this.initialConfiguration_["urls"] || {},
-                /**
-                 * Unique Part ID that can distinguish this editor instance's region of the assignment.
-                 * It's possible that other editors may be attached to a different Part of the same assignmnet, on the
-                 * same page.
-                 * **/
-                partId: ko.observable(configuration["partId"] || ""),
-                accessToken: ko.observable(configuration["access_token"] || undefined),
-            }
-        };
-    };
- 
-    /**
-     * Creates the interface
-     */
-    initInterface() {
-        let constants = this.model.configuration;
-        let gui = makeInterface(this);
-        constants.container = $(constants.attachmentPoint).html($(gui));
-    };
- 
-    loadAssignment(assignment_id) {
-        this.components.server.loadAssignment(assignment_id);
-    }
- 
-    loadTags(tags) {
-        // Already a JSON list representing tags
-    }
- 
-    loadSampleSubmissions(samples) {
-        // Already a JSON list representing samples
-    }
- 
-    loadNoSubmission(assignment) {
-        this.model.submission.code(assignment.starting_code);
-        loadConcatenatedFile(assignment.extra_starting_files, this.model.submission.extraFiles);
-    }
- 
-    loadSubmission(submission, assignment) {
-        if (!submission) {
-            // TODO: Scarier "You are not logged in message"
-            this.loadNoSubmission(assignment);
-            return false;
-        }
-        // TODO: What if submissions' assignment version and the assignments' version conflict?
-        this.model.submission.id(submission.id);
-        this.model.display.backupSubmissionCode(submission.code);
-        this.model.submission.code(extractPart(submission.code, this.model.configuration.partId()) || "");
-        this.model.submission.correct(submission.correct);
-        this.model.submission.score(submission.score);
-        this.model.submission.endpoint(submission.endpoint);
-        this.model.submission.url(submission.url);
-        this.model.submission.version(submission.version);
-        this.model.submission.gradingStatus(submission.grading_status || SubmissionStatuses.UNKNOWN);
-        this.model.submission.submissionStatus(submission.submission_status || SubmissionStatuses.UNKNOWN);
-        this.model.submission.ownerId(submission.user_id);
-        this.model.user.courseId(submission.course_id);
-        loadConcatenatedFile(submission.extra_files, this.model.submission.extraFiles);
-    }
- 
-    loadAssignmentData_(data) {
-        console.debug(data);
-        this.resetInterface();
-        this.components.fileSystem.dismountExtraFiles();
-        let wasServerConnected = this.model.configuration.serverConnected();
-        this.model.configuration.serverConnected(false);
-        let assignment = data.assignment;
-        this.model.assignment.id(assignment.id);
-        this.model.assignment.version(assignment.version);
-        this.model.assignment.courseId(assignment.course_id);
-        this.model.assignment.forkedId(assignment.forked_id);
-        this.model.assignment.forkedVersion(assignment.forked_version);
-        this.model.assignment.hidden(assignment.hidden);
-        this.model.assignment.reviewed(assignment.reviewed);
-        this.model.assignment.public(assignment.public);
-        this.model.assignment.type(assignment.type);
-        this.model.assignment.url(assignment.url);
-        this.model.assignment.points(assignment.points);
-        this.model.assignment.ipRanges(assignment.ip_ranges);
-        this.model.assignment.instructions(assignment.instructions);
-        this.model.assignment.name(assignment.name);
-        this.model.assignment.onChange(assignment.on_change || null);
-        if (assignment.on_change) {
-            this.components.fileSystem.newFile("!on_change.py", assignment.on_change);
-        }
-        this.model.assignment.onEval(assignment.on_eval || null);
-        if (assignment.on_eval) {
-            this.components.fileSystem.newFile("!on_eval.py", assignment.on_eval);
-        }
-        this.model.assignment.onRun(assignment.on_run);
-        this.model.assignment.startingCode(assignment.starting_code);
-        this.model.assignment.ownerId(assignment.owner_id);
-        this.loadTags(assignment.tags);
-        this.loadSampleSubmissions(assignment.sample_submissions);
-        loadConcatenatedFile(assignment.extra_instructor_files, this.model.assignment.extraInstructorFiles);
-        loadConcatenatedFile(assignment.extra_starting_files, this.model.assignment.extraStartingFiles);
-        loadAssignmentSettings(this.model, assignment.settings);
-        this.loadSubmission(data.submission, assignment);
-        this.model.display.dirtySubmission(true);
-        this.model.display.changedInstructions(null);
-        this.model.configuration.serverConnected(wasServerConnected);
-        this.components.corgis.loadDatasets(true);
-        this.components.pythonEditor.bm.refresh();
-        this.components.fileSystem.loadRemoteFiles();
- 
-        this.components.server.setStatus("saveFile", StatusState.READY);
-    }
- 
-    initModelMethods() {
-        let self = this;
-        let model = this.model;
-        model.ui = {
-            smallLayout: ko.pureComputed(()=>
-                !model.display.instructor() && model.assignment.settings.smallLayout()),
-            role: {
-                isGrader: ko.pureComputed(()=>
-                    model.user.role() === "owner" || model.user.role() === "grader")
-            },
-            instructions: {
-                isChanged: ko.pureComputed(() =>
-                    model.display.changedInstructions() !== null
-                ),
-                current: ko.pureComputed(() =>
-                    model.ui.instructions.isChanged() ?
-                        self.utilities.markdown(model.display.changedInstructions()) :
-                        self.utilities.markdown(model.assignment.instructions())
-                ),
-                reset: () =>
-                    model.display.changedInstructions(null)
-            },
-            menu: {
-                visible: ko.pureComputed(
-                    () =>
-                        model.display.instructor() || !model.assignment.settings.onlyInteractive()
-                ),
-                textFullscreen: ko.pureComputed(() =>
-                    (model.display.fullscreen()) ? "fa-compress-arrows-alt" : "fa-expand-arrows-alt"
-                ),
-                clickFullscreen: () =>{
-                    model.display.fullscreen(!model.display.fullscreen());
-                },
-                editInputs: () => {
-                    this.components.dialog.EDIT_INPUTS();
-                },
-                toggleImages: () => {
-                    if (model.display.renderImages()) {
-                        self.components.pythonEditor.bm.textEditor.disableImages();
-                    } else {
-                        self.components.pythonEditor.bm.textEditor.enableImages();
-                    }
-                    model.display.renderImages(!model.display.renderImages());
-                },
-                canMarkSubmitted: ko.pureComputed(() =>
-                    model.assignment.hidden() || model.assignment.reviewed() ||
-                    model.assignment.settings.canClose()
-                ),
-                textMarkSubmitted: ko.pureComputed(() => {
-                    if (model.ui.menu.isCompleted()) {
-                        return model.user.groupId() ? "Problem closed" : "Assignment closed";
-                    } else if (model.ui.menu.isSubmitted()) {
-                        return "Reopen for editing";
-                    } else if (model.display.dirtySubmission()) {
-                        return "Run";
-                    } else {
-                        if (!model.assignment.hidden() && model.submission.correct()) {
-                            return "Submit";
-                        } else {
-                            return "Submit early";
-                        }
-                    }
-                }),
-                clickMarkSubmitted: () => {
-                    if (model.ui.menu.isCompleted()) {
-                        alert("You cannot reopen closed assignments. Contact a grader!");
-                    } else if (model.ui.menu.isSubmitted()) {
-                        self.components.server.updateSubmissionStatus("inProgress");
-                    } else if (model.display.dirtySubmission()) {
-                        self.components.engine.delayedRun();
-                    } else {
-                        self.components.server.updateSubmissionStatus("Submitted");
-                    }
-                },
-                isSubmitted: ko.pureComputed(() =>
-                    (model.assignment.reviewed() || model.assignment.settings.canClose()) &&
-                    model.submission.submissionStatus().toLowerCase() === "submitted"
-                ),
-                isCompleted: ko.pureComputed(()=>
-                    model.submission.submissionStatus().toLowerCase() === "completed"
-                ),
-                showQueuedInputs: ko.pureComputed(() =>
-                    !model.assignment.settings.hideQueuedInputs()
-                ),
-                showClock: ko.pureComputed(() =>
-                    !model.assignment.settings.hasClock()
-                ),
-                canShare: ko.pureComputed(() =>
-                    model.configuration.urls["shareUrl"] !== undefined
-                ),
-                getShareUrl: (wasPrompted) => {
-                    const parts = ["group", model.user.courseId(), model.user.groupId(), model.assignment.id(), model.user.id()];
-                    /*const interestingDetails = {
-                        "when": new Date().toISOString(),
-                        // "feedback": model.execution.feedback.category() + "|" + model.execution.feedback.label(),
-                        // "wasPrompted": wasPrompted
-                    };
-                    parts.push(btoa(JSON.stringify(interestingDetails)));
-                    console.log(interestingDetails);*/
-                    parts.push(new Date().toISOString());
- 
-                    // Base64 encode the parts
-                    const encoded = btoa(parts.join("_"));
-                    // Construct the target URL using model.configuration.urls["shareUrl"]
-                    const baseUrl = model.configuration.urls["shareUrl"];
-                    return baseUrl + (baseUrl.endsWith("/") ? "" : "/") + encoded;
-                },
-                startShare: (wasPrompted) => {
-                    this.components.dialog.START_SHARE(
-                        model.ui.menu.getShareUrl(wasPrompted),
-                        wasPrompted
-                    );
-                },
-            },
-            secondRow: {
-                width: ko.pureComputed(()=>
-                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
-                        "col-md-12" : "col-md-5"
-                ),
-                hideTraceButton: ko.pureComputed(()=>
-                    !model.display.instructor() && model.assignment.settings.hideTraceButton()
-                ),
-                isAllVisible: ko.pureComputed(() =>
-                    !model.assignment.settings.hideMiddlePanel()
-                ),
-                isFeedbackVisible: ko.pureComputed(() =>
-                    model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.FEEDBACK
-                ),
-                isTraceVisible: ko.pureComputed(() =>
-                    model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.TRACE
-                ),
-                isConsoleShowVisible: ko.pureComputed(() =>
-                    model.ui.secondRow.isFeedbackVisible() || model.ui.secondRow.isTraceVisible()
-                ),
-                switchLabel: ko.pureComputed(() =>
-                    model.execution.student.lastStep() !== null ?
-                        "View Trace" : ""
-                ),
-                advanceState: function () {
-                    let currentPanel = model.display.secondRowSecondPanel;
-                    if (currentPanel() === SecondRowSecondPanelOptions.NONE) {
-                        currentPanel(SecondRowSecondPanelOptions.FEEDBACK);
-                    } else if (currentPanel() === SecondRowSecondPanelOptions.TRACE) {
-                        currentPanel(SecondRowSecondPanelOptions.NONE);
-                    } else if (model.execution.student.lastStep() !== null) {
-                        currentPanel(SecondRowSecondPanelOptions.TRACE);
-                    } else {
-                        currentPanel(SecondRowSecondPanelOptions.NONE);
-                    }
-                },
-                makeWide: function () {
-                    const currentPanel = model.display.secondRowSecondPanel;
-                    model.display.previousSecondRowSecondPanel(currentPanel());
-                    currentPanel(SecondRowSecondPanelOptions.NONE);
-                },
-                restorePanel: function() {
-                    const oldPanel = model.display.previousSecondRowSecondPanel;
-                    if (oldPanel() !== null) {
-                        model.display.secondRowSecondPanel(oldPanel());
-                        oldPanel(null);
-                    }
-                }
-            },
-            console: {
-                size: ko.pureComputed(() =>
-                    (!model.display.instructor() && model.assignment.settings.smallLayout()) ||
-                    (model.display.secondRowSecondPanel() === SecondRowSecondPanelOptions.NONE) ?
-                        "col-md-12" :
-                        "col-md-6"
-                ),
-                hideEvaluate: ko.pureComputed( ()=>
-                    model.assignment.settings.hideEvaluate() || !model.execution.student.globals() ||
-                    model.status.onExecution() === StatusState.ACTIVE
-                )
-            },
-            feedback: {
-                badge: ko.pureComputed(function () {
-                    if (model.execution.feedback.category() === null) {
-                        return "label-none";
-                    }
-                    switch (model.execution.feedback.category().toLowerCase()) {
-                        default:
-                        case "none":
-                            return "label-none";
-                        case "runtime":
-                            return "label-runtime-error";
-                        case "syntax":
-                            return "label-syntax-error";
-                        case "editor":
-                            return "label-syntax-error";
-                        case "internal":
-                            return "label-internal-error";
-                        case "semantic":
-                        case "analyzer":
-                            return "label-semantic-error";
-                        case "feedback":
-                        case "instructor":
-                            return "label-feedback-error";
-                        case "complete":
-                            return "label-problem-complete";
-                        case "instructions":
-                            return "label-instructions";
-                        case "no errors":
-                            return "label-no-errors";
-                    }
-                }),
-                category: ko.pureComputed(function () {
-                    if (model.execution.feedback.category() === null) {
-                        return "";
-                    }
-                    switch (model.execution.feedback.category().toLowerCase()) {
-                        default:
-                        case "none":
-                            return "";
-                        case "runtime":
-                            return "Runtime Error";
-                        case "syntax":
-                            return "Syntax Error";
-                        case "editor":
-                            return "Editor Error";
-                        case "internal":
-                            return "Internal Error";
-                        case "semantic":
-                        case "analyzer":
-                            return "Algorithm Error";
-                        case "feedback":
-                        case "instructions":
-                            return "Instructions";
-                        case "instructor":
-                            return "Incorrect Answer";
-                        case "complete":
-                            return "Complete";
-                        case "no errors":
-                            return "No errors";
-                    }
-                }),
-                resetScore: () => {
-                    model.submission.score(0);
-                    model.submission.correct(false);
-                    self.components.server.updateSubmission(model.submission.score(), model.submission.correct(), true, true);
-                },
-                provideRatings: ko.pureComputed(() =>
-                    !model.assignment.hidden()
-                ),
-                flipRating: () => {
-                    const newState = !model.display.showRating();
-                    model.display.showRating(newState);
-                    self.localSettings_.set("display.showRating", newState.toString());
-                },
-                rate: (rating, suggestShare=false) => {
-                    self.components.server.logEvent("X-Rating",
-                                                    model.execution.feedback.category(),
-                                                    model.execution.feedback.label(),
-                                                    rating);
-                    model.configuration.container.find(".blockpy-rating").fadeOut(500, function() {
-                        $(this).fadeIn(500);
-                        model.display.hasRated(true);
-                    });
-                    const thankYou = model.configuration.container.find(".blockpy-feedback-thank-you");
-                    thankYou.addClass("show");
-                    setTimeout(() => {
-                        thankYou.removeClass("show");
-                        if (model.display.hasRated()) {
-                            model.ui.menu.startShare(true);
-                        }
-                    }, 1000);
-                },
-                hasRatedClass: ko.pureComputed(() =>
-                    model.display.hasRated() ? "far" : "fas"
-                ),
-                addPositiveFeedback: (text, icon, color, onclick, toEnd, instructorOnly) => {
-                    if (!instructorOnly || model.display.instructor()) {
-                        self.components.feedback.addPositiveFeedback(text, icon, color, onclick, toEnd);
-                    }
-                }
-            },
-            trace: {
-                has: ko.pureComputed(() =>
-                    model.execution.student.currentTraceData() !== null
-                ),
-                highlightedLine: ko.pureComputed(() => {
-                    if (model.display.secondRowSecondPanel() !== SecondRowSecondPanelOptions.TRACE) {
-                        return [];
-                    }
-                    let step = model.execution.student.currentTraceStep();
-                    let lastStep = model.execution.student.lastStep();
-                    let traceData = model.execution.student.currentTraceData();
-                    if (!traceData || step === null) {
-                        return [];
-                    } else if (step === 0) {
-                        return [];
-                    } else {
-                        return [traceData[step-1].line];
-                    }
-                }),
-                line: ko.pureComputed(function () {
-                    let step = model.execution.student.currentTraceStep();
-                    let lastStep = model.execution.student.lastStep();
-                    let traceData = model.execution.student.currentTraceData();
-                    if (!traceData || step === null) {
-                        return "No trace";
-                    }
-                    if (step === 0) {
-                        return "Before run";
-                    } else if (step === lastStep) {
-                        return "Finished run";
-                    } else {
-                        // TODO: why are these numbers wonky?
-                        return "Line "+(traceData[step-1].line);
-                    }
-                }),
-                ast: ko.pureComputed(function () {
-                    let step = model.execution.student.currentTraceStep();
-                    let lastStep = model.execution.student.lastStep();
-                    let traceData = model.execution.student.currentTraceData();
-                    if (!traceData) {
-                        return "Nothing traced.";
-                    }
-                    switch (step) {
-                        case 0:
-                            return "Starting execution";
-                        case lastStep:
-                            if (!model.execution.reports.student.success) {
-                                return "Execution halted (error)";
-                            }
-                            return "Finished execution";
-                        default:
-                            return "Current step: " + AST_DESCRIPTIONS[traceData[step-1].ast];
-                    }
-                }),
-                first: function () {
-                    model.execution.student.currentTraceStep(0);
-                },
-                backward: function () {
-                    let previous = Math.max(0, model.execution.student.currentTraceStep() - 1);
-                    model.execution.student.currentTraceStep(previous);
-                },
-                forward: function () {
-                    let next = Math.min(model.execution.student.lastStep(), model.execution.student.currentTraceStep() + 1);
-                    model.execution.student.currentTraceStep(next);
-                },
-                last: function () {
-                    model.execution.student.currentTraceStep(model.execution.student.lastStep());
-                },
-                data: ko.pureComputed(function () {
-                    let step = model.execution.student.currentTraceStep();
-                    let lastStep = model.execution.student.lastStep();
-                    let traceData = model.execution.student.currentTraceData();
-                    if (!traceData) {
-                        return [];
-                    }
-                    switch (step) {
-                        case 0:
-                            return [];
-                        case lastStep:
-                            return traceData[step - 1];
-                        default:
-                            return traceData[step];
-                    }
-                }),
-            },
-            files: {
-                visible: ko.pureComputed(() =>
-                    model.display.instructor() || !model.assignment.settings.hideFiles() || model.assignment.settings.preloadAllFiles()
-                ),
-                addIsVisible: ko.pureComputed(() =>
-                    model.display.instructor() || !model.assignment.settings.hideFiles()
-                ),
-                width: ko.pureComputed(()=>
-                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
-                        "col-md-12" : "col-md-6"
-                ),
-                hasContents: function(path) {
-                    switch (path) {
-                        case "answer.py": return model.submission.code();
-                        case "!instructions.md": return model.assignment.instructions();
-                        case "!on_change.py": return model.assignment.onChange() !== null;
-                        case "!on_eval.py": return model.assignment.onEval() !== null;
-                        case "?mock_urls.blockpy": return model.assignment.extraInstructorFiles().some(file =>
-                            file.filename() === "?mock_urls.blockpy");
-                        case "images.blockpy": return model.assignment.extraInstructorFiles().some(file =>
-                            file.filename() === "images.blockpy");
-                        case "!answer_prefix.py": return model.assignment.extraInstructorFiles().some(file =>
-                            file.filename() === "!answer_prefix.py");
-                        case "!answer_suffix.py": return model.assignment.extraInstructorFiles().some(file =>
-                            file.filename() === "!answer_suffix.py");
-                        case "?toolbox.blockpy": return model.assignment.extraInstructorFiles().some(file =>
-                            file.filename() === "?toolbox.blockpy");
-                        case "!tags.blockpy": return model.assignment.tags().length;
-                        case "!sample_submissions.blockpy": return model.assignment.sampleSubmissions().length;
-                        default: return false;
-                    }
-                },
-                add: function(path) {
-                    switch (path) {
-                        case "?mock_urls.blockpy":
-                        case "!answer_prefix.py":
-                        case "!answer_suffix.py":
-                        case "?tags.blockpy":
-                        case "?settings.blockpy":
-                            self.components.fileSystem.newFile(path);
-                            break;
-                        case "images.blockpy":
-                            self.components.fileSystem.newFile(path, "{}");
-                            break;
-                        case "?toolbox.blockpy":
-                            let normalToolbox = self.components.pythonEditor.bm.blockEditor.TOOLBOXES["normal"];
-                            normalToolbox = JSON.stringify(normalToolbox, null, 2);
-                            self.components.fileSystem.newFile(path, normalToolbox);
-                            break;
-                        case "!sample_submissions.blockpy":
-                            model.assignment.sampleSubmissions([SampleSubmission.Blank()]);
-                            self.components.fileSystem.newFile(path);
-                            break;
-                        case "!on_change.py":
-                            model.assignment.onChange("");
-                            self.components.fileSystem.newFile(path);
-                            break;
-                            // TODO fix extrafiles for instructor and student
-                        case "!on_eval.py":
-                            model.assignment.onEval("");
-                            self.components.fileSystem.newFile(path);
-                            break;
-                        case "instructor":
-                            self.components.fileSystem.newFileDialog("instructor");
-                            return;
-                        case "student":
-                            self.components.fileSystem.newFileDialog("student");
-                            return;
-                        case "starting":
-                            self.components.fileSystem.newFileDialog("starting");
-                            return;
-                        default:
- 
-                    }
-                    model.display.filename(path);
-                },
-                delete: function() {
-                    return self.components.fileSystem.deleteFile(model.display.filename());
-                },
-                rename: (newName) => {
-                    return self.components.fileSystem.renameFile(model.display.filename(), newName);
-                },
-                getStudentCode: function() {
-                    let prefixPy = self.components.fileSystem.getFile("!answer_prefix.py");
-                    let suffixPy = self.components.fileSystem.getFile("!answer_suffix.py");
-                    let code = self.model.submission.code();
-                    if (prefixPy && prefixPy.handle && prefixPy.handle()) {
-                        code = prefixPy.handle() + code;
-                    }
-                    if (suffixPy && suffixPy.handle && suffixPy.handle()) {
-                        code = code + suffixPy.handle();
-                    }
-                    return code;
-                },
-                extraStudentFiles: observeConcatenatedFile(model.submission.extraFiles),
-                extraInstructorFiles: observeConcatenatedFile(model.assignment.extraInstructorFiles),
-                extraStartingFiles: observeConcatenatedFile(model.assignment.extraStartingFiles),
-                displayFilename: function(path) {
-                    if (path === "?mock_urls.blockpy") {
-                        return "URL Data";
-                    }
-                    if (path === "images.blockpy") {
-                        return "Images";
-                    }
-                    if (path === "!answer_prefix.py") {
-                        return "Answer Prefix";
-                    }
-                    if (path === "!answer_suffix.py") {
-                        return "Answer Suffix";
-                    }
-                    if (path === "?toolbox.blockpy") {
-                        return "Toolbox";
-                    }
-                    if (path.startsWith("&")) {
-                        return path.slice(1);
-                    }
-                    return path;
-                },
-            },
-            editors: {
-                current: ko.pureComputed( ()=>
-                    self.components.editors.getEditor(model.display.filename())
-                ),
-                width: ko.pureComputed(()=>
-                    model.display.instructor() || !model.assignment.settings.smallLayout() ?
-                        "col-md-12" : "col-md-7"
-                ),
-                view: ko.pureComputed(() =>
-                    (!model.display.instructor() && (
-                        model.assignment.settings.hideEditors() ||
-                        model.assignment.settings.onlyInteractive())) ? "None" :
-                    model.display.filename() ? model.ui.editors.current() : "None"
-                ),
-                reset: function() {
-                    self.components.server.logEvent("X-File.Reset", "", "", "", "answer.py");
-                    model.submission.code(model.assignment.startingCode());
-                    model.submission.extraFiles(model.assignment.extraStartingFiles().map(
-                        file => {
-                            let filename = file.filename().substr(1);
-                            return makeModelFile(filename, file.contents());
-                        }
-                    ));
-                },
-                canSave: ko.pureComputed(() =>
-                    !model.display.autoSave()),
-                canDelete: ko.pureComputed(() =>
-                    (!model.assignment.settings.hideFiles() || model.display.instructor()) &&
-                    UNDELETABLE_FILES.indexOf(model.display.filename()) === -1),
-                canRename: ko.pureComputed(() =>
-                    (!model.assignment.settings.hideFiles() || model.display.instructor()) &&
-                    UNRENAMABLE_FILES.indexOf(model.display.filename()) === -1),
-                upload: uploadFile.bind(self),
-                download: downloadFile.bind(self),
-                importDataset: () => {
-                    self.components.corgis.openDialog();
-                },
-                python: {
-                    fullscreen: () => {
-                        let codeMirror = self.components.pythonEditor.bm.textEditor.codeMirror;
-                        return codeMirror.setOption("fullScreen", !codeMirror.getOption("fullScreen"));
-                    },
-                    updateMode: (newMode) => {
-                        self.components.server.logEvent("X-View.Change", "", "", newMode, model.display.filename());
-                        model.display.pythonMode(newMode);
-                        if (model.display.filename() === "answer.py") {
-                            self.components.pythonEditor.oldPythonMode = newMode;
-                        }
-                    },
-                    isHistoryAvailable: ko.pureComputed(()=>
-                        model.ui.server.isEndpointConnected("loadHistory")),
-                    turnOffHistoryMode: () => {
-                        self.components.pythonEditor.updateEditor();
-                        self.components.pythonEditor.setReadOnly(false);
-                        model.display.historyMode(false);
-                    },
-                    turnOnHistoryMode: () => {
-                        self.components.server.loadHistory((response) =>{
-                            if (response.success) {
-                                self.components.history.load(response.history);
-                                model.display.historyMode(true);
-                                self.components.pythonEditor.setReadOnly(true);
-                            } else {
-                                self.components.dialog.ERROR_LOADING_HISTORY();
-                            }
-                        });
-                    },
-                    toggleHistoryMode: () => {
-                        if (model.display.historyMode()) {
-                            model.ui.editors.python.turnOffHistoryMode();
-                        } else {
-                            model.ui.editors.python.turnOnHistoryMode();
-                        }
-                    },
-                    history: {
-                        start: ()=>{ self.components.history.moveToStart(); },
-                        previous: ()=>{ self.components.history.movePrevious(); },
-                        next: ()=>{ self.components.history.moveNext(); },
-                        mostRecent: ()=>{ self.components.history.moveToMostRecent(); },
-                        use: ()=>{ self.components.history.use(); }
-                    }
-                },
-                images: {
-                    uploadFile: () => self.components.editors.byName("image").uploadFile(),
-                    deleteFile: (fileInfo) => self.components.editors.byName("image").deleteFile(fileInfo),
-                    renameFile: (fileInfo) => self.components.editors.byName("image").renameFile(fileInfo),
-                    reloadImages: () => self.components.editors.byName("image").reloadImages(),
-                    canChoosePlacement: ko.pureComputed(() => model.display.instructor()),
-                    canModify: (placement) => model.display.instructor() || placement === "submission" || placement === "user",
-                },
-                settings: {
-                    save: () => self.components.server.saveAssignment()
-                },
-                sampleSubmissions: {
-                    buildEditor: (newDOM, index, newElement) => {
-                        let editor = self.components.editors.byName("Sample Submissions");
-                        editor.buildEditor(newDOM, index, newElement);
-                    }
-                },
-            },
-            execute: {
-                isRunning: ko.pureComputed(() =>
-                    model.status.onExecution() === StatusState.ACTIVE
-                ),
-                runLabel: ko.pureComputed(() =>
-                    model.status.onExecution() === StatusState.ACTIVE ? "Stop" : "Run"
-                ),
-                run: () => {
-                    if (model.status.onExecution() === StatusState.ACTIVE) {
-                        if (typeof PygameLib !== "undefined" && PygameLib.running) {
-                            PygameLib.StopPygame();
-                        }
-                        model.status.onExecution(StatusState.READY);
-                    } else {
-                        self.components.engine.delayedRun();
-                    }
-                },
-                runQuietlyLabel: ko.pureComputed(()=>
-                    model.status.onExecution() === StatusState.ACTIVE ? "Stop" : "Run without feedback"
-                ),
-                runQuietly: () => {
-                    if (model.status.onExecution() === StatusState.ACTIVE) {
-                        if (typeof PygameLib !== "undefined" && PygameLib.running) {
-                            PygameLib.StopPygame();
-                        }
-                        model.status.onExecution(StatusState.READY);
-                    } else {
-                        self.components.engine.delayedRun(true);
-                    }
-                },
-                evaluate: () =>
-                    self.components.engine.evaluate()
-            },
-            server: {
-                status: (endpoint =>
-                    "server-status-" + model.status[endpoint]()
-                ),
-                isEndpointConnected: (endpoint) =>
-                    model.configuration.serverConnected() &&
-                    model.configuration.urls !== undefined &&
-                    model.configuration.urls[endpoint] !== undefined,
-                messages: ko.pureComputed(() =>
-                    capitalize(model.status.loadAssignmentMessage() ||
-                        model.status.saveAssignmentMessage() ||
-                        model.status.loadHistoryMessage() ||
-                        model.status.loadFileMessage() ||
-                        model.status.saveFileMessage() ||
-                        model.status.loadDatasetMessage() ||
-                        model.status.logEventMessage() ||
-                        model.status.saveImage() ||
-                        model.status.updateSubmissionMessage() ||
-                        model.status.externalAPI() ||
-                        model.status.updateSubmissionStatusMessage() || "")
-                ),
-                force: {
-                    loadAssignment: (data, event) => {
-                        //let fileHandler = $(".blockpy-force-load-assignment-file");
-                        let assignmentForceLoadButton = $(event.target);
-                        //fileHandler.click();
-                        $(event.target).parent().fadeOut(100).fadeIn(100);
-                        // Allow user to upload a file containing an assignment submission
-                        var fr = new FileReader();
-                        var files = assignmentForceLoadButton[0].files;
-                        fr.onload = function(e) {
-                            let assignmentSubmission = JSON.parse(e.target.result);
-                            self.loadAssignmentData_(assignmentSubmission);
-                        };
-                        fr.fileName = files[0].name;
-                        fr.readAsText(files[0]);
-                        assignmentForceLoadButton.val("");
-                    },
-                    updateSubmission: (data, event) => {
-                        console.log(event);
-                        self.components.server.updateSubmission(self.model.submission.score(),
-                                                                self.model.submission.correct(),
-                                                                false, true);
-                        $(event.target).fadeOut(100).fadeIn(100);
-                    }
-                }
-            },
-            footer: {
-                visible: ko.pureComputed(
-                    () =>
-                        model.display.instructor() || !model.ui.smallLayout()
-                ),
-            }
-        };
-        makeExtraInterfaceSubscriptions(self, model);
-    }
- 
-    turnOnHacks() {
-        //console.log("TODO");
-        Sk.builtinFiles.files["src/lib/image.js"] = imageModule.toString();
-        //Sk.builtinFiles.files["src/lib/weakref.js"] = weakrefModule.toString();
-        //Sk.builtinFiles.files["src/lib/matplotlib/pyplot/__init__.js"] = matplotlibModule.toString();
-    }
- 
-    /**
-     * Applys the KnockoutJS bindings to the model, instantiating the values into the
-     * HTML.
-     */
-    applyModel() {
-        ko.applyBindings(this.model, this.model.configuration.container[0]);
-    }
- 
-    initUtilities() {
-        let main = this;
-        this.utilities = {
-            markdown: (text) => text ? EasyMDE.prototype.markdown(text) : "<p></p>"
-        };
-    }
- 
-    initComponents() {
-        let container = this.model.configuration.container;
-        let components = this.components = {};
-        let main = this;
-        // Each of these components will take the BlockPy instance, and possibly a
-        // reference to the relevant HTML location where it will be embedded.
-        components.dialog = new BlockPyDialog(main, container.find(".blockpy-dialog"));
-        components.feedback = new BlockPyFeedback(main, container.find(".blockpy-feedback"));
-        components.trace = new BlockPyTrace(main);
-        components.console = new BlockPyConsole(main, container.find(".blockpy-console"));
-        components.engine = new BlockPyEngine(main);
-        components.fileSystem = new BlockPyFileSystem(main);
-        components.editors = new Editors(main, container.find(".blockpy-editor"));
-        // Convenient shortcut directly to PythonEditor
-        components.pythonEditor = this.components.editors.byName("python");
-        components.server = new BlockPyServer(main);
-        components.corgis = new BlockPyCorgis(main);
-        components.history = new BlockPyHistory(main, container.find(".blockpy-history-toolbar"));
-    }
- 
-    show() {
-        this.model.configuration.container.show();
-        //this.model.configuration.container.find(".blockpy-file-instructor").toggle(this.model.display.instructor());
-    }
- 
-    hide() {
-        this.model.configuration.container.hide();
-    }
- 
-    makeExtraSubscriptions() {
-        this.model.display.changedInstructions.subscribe((changed) => {
-            this.components.server.logEvent("X-Instructions.Change", "", "",
-                                            changed, "instructions.md");
-        });
-        this.clock = null;
-        const container = this.model.configuration.container;
-        const updateClock = () => container.find(".blockpy-menu-clock").text(getCurrentTime());
-        if (this.model.ui.menu.showClock()) {
-            this.clock = setInterval(updateClock, 1000);
-        }
- 
-        this.model.ui.menu.showClock.subscribe((changed) => {
-            if (this.model.ui.menu.showClock()) {
-                if (this.clock) {
-                    clearInterval(this.clock);
-                    this.clock = null;
-                }
-            } else {
-                if (!this.clock) {
-                    this.clock = setInterval(updateClock, 1000);
-                }
-            }
-        });
-    }
- 
-    start() {
-        this.model.display.filename("answer.py");
-    }
- 
-    resetInterface() {
-        this.components.engine.reset();
-        // Disable any alternative logEntry functions we have been given
-        this.components.server.altLogEntry = null;
-    }
- 
-    requestPasscode() {
-        let userSuppliedPasscode = prompt("Please enter the passcode.");
-        this.model.display.passcode(userSuppliedPasscode);
-    }
- 
-    destroy() {
- 
-    }
- 
-}
- 
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/console.js.html b/coverage/lcov-report/src/console.js.html deleted file mode 100644 index c3af5ed96..000000000 --- a/coverage/lcov-report/src/console.js.html +++ /dev/null @@ -1,1930 +0,0 @@ - - - - - - Code coverage report for src/console.js - - - - - - - - - -
-
-

All files / src console.js

-
- -
- 1.81% - Statements - 4/220 -
- - -
- 0% - Branches - 0/58 -
- - -
- 0% - Functions - 0/57 -
- - -
- 1.83% - Lines - 4/218 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {encodeHTML} from "./utilities";
- 
-/**
- * Evaluate button HTML template
- * @type {string}
- */
-const START_EVAL_HTML = `
-<button type="button" class="btn btn-sm btn-outline float-right blockpy-btn-eval">
-    Evaluate
-</button>`;
- 
-/**
- * HTML template for a new line in the console.
- * @type {string}
- */
-const NEW_CONSOLE_LINE_HTML = "<div></div>";
- 
-/**
- * HTML template for the entire console area
- * @type {string}
- */
-export const CONSOLE_HTML = `
-    <div class='blockpy-panel blockpy-console'
-          role="region" aria-label="Console"
-          data-bind="class: ui.console.size">
-          
-        <!-- Feedback/Trace Visibility Control -->
-        <button type='button'
-                class='btn btn-sm btn-outline-secondary float-right blockpy-show-feedback'
-                data-bind="hidden: ui.secondRow.isConsoleShowVisible, click: ui.secondRow.advanceState">
-            <span class='fas fa-eye'></span>
-        </button>
-          
-        <strong>Console:</strong>
-        
-        <div class='blockpy-printer blockpy-printer-default'>
-        </div>
-        
-     </div>`;
- 
-/**
- * All the possible types for a line in the console.
- * @enum
- */
-export let ConsoleLineType = {
-    TEXT: "text",
-    HTML: "html",
-    PLOT: "plot",
-    IMAGE: "image",
-    PYGAME: "pygame",
-    DRAFTER: "drafter",
-    TURTLE: "turtle",
-    EVAL: "eval",
-    START_EVAL: "start_eval",
-    VALUE: "value",
-    INPUT: "input",
-    TEST_CASE: "test_case"
-};
- 
-/**
- * Abstract version of a line in the console. All other console lines
- * should extend this class. Critically, they need to implement a render function.
- */
-class ConsoleLine {
-    constructor(main, type, content) {
-        /**
-         * Reference back to the main BlockPy instance.
-         * @const
-         * @type {BlockPy}
-         */
-        this.main = main;
-        /**
-         * Categorizes what kind of line this is (text/html/plot/etc.)
-         * @type {ConsoleLineType}
-         */
-        this.type = type;
-        /**
-         * The actual data stored on this line.
-         * @type {string}
-         */
-        this.content = content;
-        /**
-         * Metadata about where the line originated from in the code.
-         * @type {{filename: string, line: number, step: number}}
-         */
-        this.origin = {
-            filename: Sk.currFilename,
-            step: main.components.engine.executionBuffer.step,
-            line: main.components.engine.executionBuffer.line
-        };
-        /**
-         * The HTML content stored on this line, meant to be rendered
-         * to the user.
-         * @type {*|jQuery.fn.init|jQuery|HTMLElement}
-         */
-        this.html = $("<div></div>", {
-            "class":  "blockpy-printer-output",
-            "data-container": main.model.configuration.attachmentPoint,
-            "data-toggle": "tooltip",
-            "data-placement": "auto",
-            "data-step": this.origin.step,
-            "title": "Step " + this.origin.step + ", Line " + this.origin.line
-        });
-        /**
-         * Whether or not this line should be visible
-         * @type {boolean}
-         */
-        this.visible = !main.model.display.mutePrinter();
-        /**
-         *
-         * @type {number}
-         */
-        this.index = 0;
-    }
- 
-    /**
-     * Create a Skulpt representation of this console line's content.
-     * @returns {*}
-     */
-    toSkulpt() {
-        return Sk.ffi.remapToPy(this.content);
-    }
- 
-    /**
-     * Remove this console line by deleting its HTML representation.
-     */
-    delete() {
-        this.html.remove();
-    }
-}
- 
-class ConsoleLineTurtle extends ConsoleLine {
-    // TODO: Capture turtle commands for tracing purposes
-    constructor(main) {
-        super(main, ConsoleLineType.TURTLE);
-        this.html.addClass("blockpy-console-turtle-output");
-    }
- 
-    render(where) {
-        if (this.visible) {
-            where.prepend(this.html);
-            //this.html[0].scrollIntoView({ behavior: "smooth" });
-            var top = this.html.offset().top;
-            //$('html').scrollTop(top);
-            $("html").scrollTop(top);
-            //this.html.tooltip();
-        }
-    }
-}
- 
-class ConsoleLineDrafter extends ConsoleLine {
-    constructor(main, size, fullscreen) {
-        super(main, ConsoleLineType.DRAFTER);
-        this.html.addClass("blockpy-console-drafter-output");
-        this.size = size;
-        this.fullscreen = fullscreen;
-    }
- 
-    render(where) {
-        if (this.visible) {
-            where.prepend(this.html);
-            var top = this.html.offset().top;
-            $("html").scrollTop(top);
-        }
-    }
- 
-    cleanup() {
-        // Starts off as a no-op
-    }
- 
-    stop() {
-        this.main.model.ui.secondRow.restorePanel();
-    }
-}
- 
-class ConsoleLinePygame extends ConsoleLine {
-    constructor(main, size, fullscreen, pygameObj) {
-        super(main, ConsoleLineType.PYGAME);
-        this.html.addClass("blockpy-console-pygame-output");
-        this.size = size;
-        this.fullscreen = fullscreen;
-        this.pygameObj = pygameObj;
-        this.initialized = false;
-        this.canvas = document.createElement("canvas");
-        //Sk.main_canvas = document.getElementById("myCanvas");
-    }
- 
-    render(where) {
-        if (this.visible) {
-            this.html.append(this.canvas);
-            where.prepend(this.html);
-            var top = this.html.offset().top;
-            $("html").scrollTop(top);
-        }
-    }
- 
-    cleanup() {
-        // Starts off as a no-op
-    }
- 
-    stop() {
-        this.cleanup = () => {};
-        this.main.model.ui.secondRow.restorePanel();
-    }
- 
-    finalize(cleanupFunction, listeners) {
-        this.initialized = true;
-        this.cleanup = () => cleanupFunction(this.pygameObj, listeners);
-    }
- 
-}
- 
-class ConsoleLineImage extends ConsoleLine {
-    constructor(main, content) {
-        super(main, ConsoleLineType.IMAGE, content);
-        this.html.addClass("blockpy-console-image-output");
-    }
- 
-    render(where) {
-        if (this.visible) {
-            console.log(this.content);
-            this.html.append(this.content);
-            where.append(this.html);
-            //this.html.tooltip();
-        }
-    }
-}
- 
-class ConsoleLinePlot extends ConsoleLine {
-    constructor(main, content) {
-        super(main, ConsoleLineType.PLOT, content);
-        this.html.addClass("blockpy-console-plot-output");
-    }
- 
-    render(where) {
-        if (this.visible) {
-            where.append(this.html);
-            //this.html.tooltip();
-        }
-    }
-}
- 
-class ConsoleLineText extends ConsoleLine {
- 
-    addContent(content) {
-        this.content = this.content + content;
-    }
- 
-    render(where) {
-        if (this.visible) {
-            let encodedText = encodeHTML(this.content);
-            if (!encodedText || encodedText.trim().length <= 0) {
-                encodedText = "\n";
-            }
-            let lineData = $("<samp></samp>", { "html": encodedText });
-            this.html.append(lineData);
-            where.append(this.html);
-            this.html.tooltip();
-        }
-    }
-}
- 
-class ConsoleLineValue extends ConsoleLine {
- 
-    constructor(main, content) {
-        super(main, ConsoleLineType.VALUE, content);
-    }
- 
-    render(where) {
-        if (this.visible) {
-            let encodedText = encodeHTML(this.content);
-            let lineData = $("<code></code>", { "html": encodedText });
-            this.html.append(lineData);
-            where.append(this.html);
-            this.html.tooltip();
-        }
-    }
-}
- 
-class ConsoleLineInput extends ConsoleLine {
-    constructor(main, promptMessage) {
-        super(main, ConsoleLineType.INPUT, promptMessage);
-        this.visible = true;
-    }
- 
-    /**
-     * Creates an Input box for receiving input() from the user.
-     *
-     */
-    render(where) {
-        // Perform any necessary cleaning
-        if (this.visible) {
-            // Input form
-            let inputForm = $("<input type='text' />");
-            // Enter button
-            let inputBtn = $("<button></button>", {"html": "Enter"});
-            // Group form and button
-            let inputGroup = $("<div></div>", {"class": "blockpy-console-input"});
-            inputGroup.append(inputForm);
-            inputGroup.append(inputBtn);
-            // Prompt box, new line, input group
-            let inputBox = $("<div></div>");
-            if (this.content !== "\n") {
-                let encodedText = encodeHTML(this.content);
-                let inputMsg = $("<samp></samp>",  {"html": encodedText});
-                inputBox.append(inputMsg);
-            }
-            inputBox.append($("<br>"))
-                .append(inputGroup);
-            // Render
-            this.html.append(inputBox);
-            where.append(this.html);
-            // Make it interactive
-            return this.makeInteractive(inputForm, inputBtn);
-        }
-        return "";
-    };
- 
-    makeInteractive(input, button) {
-        let resolveOnClick;
-        let submittedPromise = new Promise((resolve) => {
-            resolveOnClick = resolve;
-        });
-        let inputIndex = this.main.model.execution.inputIndex();
-        let submitForm = () => {
-            let userInputtedValue = input.val();
-            Sk.queuedInput.push(userInputtedValue);
-            this.main.model.execution.inputIndex(inputIndex+1);
-            this.main.model.execution.input().push(userInputtedValue);
-            resolveOnClick(userInputtedValue);
-            input.prop("disabled", true);
-            button.prop("disabled", true);
-            this.html.tooltip();
-        };
-        button.click(submitForm);
-        input.keyup((e) => {
-            if (e.keyCode === 13) {
-                submitForm();
-            }
-        });
-        input.focus();
-        console.log(inputIndex, this.main.model.execution.input().length);
-        if (inputIndex < this.main.model.execution.input().length) {
-            let userInputtedValue = this.main.model.execution.input()[inputIndex];
-            input.val(userInputtedValue);
-            this.main.model.execution.inputIndex(inputIndex+1);
-            return new Promise((resolve) => {
-                input.prop("disabled", true);
-                button.prop("disabled", true);
-                this.html.tooltip();
-                resolve(userInputtedValue);
-            });
-        }
-        return submittedPromise;
-    }
-}
- 
-class ConsoleLineEvaluate extends ConsoleLineInput {
-    constructor(main) {
-        super(main, "Evaluate:");
-    }
-}
- 
-class ConsoleLineStartEvaluate extends ConsoleLine {
-    constructor(main) {
-        super(main, ConsoleLineType.START_EVAL);
-        this.html.append($(START_EVAL_HTML));
-        this.html.click(() => {
-            this.main.model.ui.execute.evaluate();
-            this.delete();
-        });
-    }
- 
-    render(where) {
-        where.append(this.html);
-    }
-}
- 
-export class BlockPyConsole {
- 
-    /**
-     * An object for managing the console, with features for things like printing, plotting, evaling, inputing.
-     * The "printer" is the region where we put things, as opposed to the console as a whole.
-     *
-     * @constructor
-     * @param {Object} main - The main BlockPy instance
-     * @param {HTMLElement} tag - The HTML object this is attached to.
-     */
-    constructor (main, tag) {
-        this.main = main;
-        this.tag = tag;
-        this.printerTag = tag.find(".blockpy-printer");
- 
-        this.MINIMUM_WIDTH = 200;
-        this.MINIMUM_HEIGHT = 200;
-        this.DEFAULT_HEIGHT = this.printerTag.height(); // Let CSS define this
-        this.main.model.display.previousConsoleHeight(this.DEFAULT_HEIGHT);
- 
-        this.output = this.main.model.execution.output;
-        //this.input = this.main.model.execution.input;
-        this.settings = {};
-        this.clear();
- 
-        // TODO: If the user modifies a file, then make the console look faded a little
-    };
- 
-    /**
-     * Reset the status of the printer, including removing any text in it and
-     * fixing its size.
-     */
-    clear() {
-        this.output.removeAll();
- 
-        this.lineBuffer = null;
-        this.plotBuffer = null;
-        this.printerTag.empty();
-        // If the user hasn't changed the console size, we'll reset it
-        if (this.main.model.display.previousConsoleHeight() === this.printerTag.height()) {
-            this.printerTag.height(this.DEFAULT_HEIGHT);
-            this.main.model.display.previousConsoleHeight(this.printerTag.height());
-        }
- 
-        this.turtleLine = null;
-        Sk.TurtleGraphics = {
-            target: this.getTurtleLine.bind(this),
-            width: this.getWidth(),
-            height: this.getHeight(),
-            assets: this.loadAsset.bind(this)
-        };
- 
-        this.pygameLine = null;
-        this.drafterLine = null;
-    };
- 
-    loadAsset(name) {
-        return name;
-    }
- 
-    getTurtleLine() {
-        if (this.turtleLine === null) {
-            this.turtleLine = new ConsoleLineTurtle(this.main);
-            this.turtleLine.render(this.printerTag);
-            // If the user hasn't changed the console size, we'll do so
-            if (this.main.model.display.previousConsoleHeight() === this.printerTag.height()) {
-                let currentPrinterDimension = this.printerTag.width();
-                this.printerTag.height(currentPrinterDimension);
-                this.main.model.display.previousConsoleHeight(this.printerTag.height());
-                Sk.TurtleGraphics.height = currentPrinterDimension-40;
-            }
-        }
-        return this.turtleLine.html[0];
-    }
- 
-    handlePygameResize(newWidth, newHeight) {
-        // If the user hasn't changed the console size, and the newHeight is bigger than default, we'll change it
-        if (this.main.model.display.previousConsoleHeight() === this.printerTag.height() &&
-            newHeight > this.DEFAULT_HEIGHT) {
-            this.printerTag.height(30+newHeight);
-            this.main.model.display.previousConsoleHeight(this.printerTag.height());
-        }
-        // If the pygame window is wider than the console, we'll expand temporarily.
-        if (newWidth > this.printerTag.width()) {
-            this.main.model.ui.secondRow.makeWide();
-        }
-    }
- 
-    finishTurtles() {
-        if (this.main.model.assignment.settings.saveTurtleOutput()) {
-            if (this.turtleLine) {
-                let canvas = this.turtleLine.html.find("canvas").last()[0];
-                let dataUrl = canvas.toDataURL("image/png");
-                this.main.components.server.saveImage("turtle_output", dataUrl);
-            } else if (this.pygameLine) {
-                let canvas = this.pygameLine.canvas;
-                let dataUrl = canvas.toDataURL("image/png");
-                this.main.components.server.saveImage("turtle_output", dataUrl);
-            } else {
-                // TODO: What if there are no turtles to save?
-            }
-        }
-    }
- 
-    // TODO: turtles should be based on the current width
-    newTurtle() {
-        return this;
-    }
- 
-    getWidth() {
-        return Math.max(this.MINIMUM_WIDTH, this.printerTag.width()-40);
-    }
- 
-    getHeight() {
-        return Math.max(this.MINIMUM_HEIGHT, this.printerTag.height()+40);
-    }
- 
-    isMuted() {
-        return this.main.model.display.mutePrinter();
-    }
- 
-    /**
-     * Updates each printed element in the printer and makes it hidden
-     * or visible, depending on what step we're on.
-     *
-     * @param {Number} step - The current step of the executed program that we're on; each element in the printer must be marked with a "data-step" property to resolve this.
-     * @param {Number} page - Deprecated, not sure what this even does.
-     */
-    stepPrinter(step, page) {
-        this.printerTag.find(".blockpy-printer-output").each(function() {
-            if ($(this).attr("data-step") <= step) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
- 
-    /**
-     * Print a line to the on-screen printer.
-     * @param {String} lineText - A line of text to be printed out.
-     */
-    print(lineText) {
-        // Empty strings means do nothing.
-        // print("", end="")
-        if (!lineText) {
-            return;
-        }
-        let flush = false;
-        if (lineText.charAt(lineText.length-1) === "\n") {
-            flush = true;
-        }
-        let splitLines = lineText.split("\n");
-        if (this.lineBuffer === null) {
-            this.lineBuffer = new ConsoleLineText(this.main, ConsoleLineType.TEXT, splitLines[0]);
-        } else {
-            this.lineBuffer.addContent(splitLines[0]);
-        }
-        for (let i=1; i < splitLines.length-1; i++) {
-            this.output.push(this.lineBuffer);
-            this.lineBuffer.render(this.printerTag);
-            this.lineBuffer = new ConsoleLineText(this.main, ConsoleLineType.TEXT, splitLines[i]);
-        }
-        if (flush) {
-            this.output.push(this.lineBuffer);
-            this.lineBuffer.render(this.printerTag);
-            this.lineBuffer = null;
-        }
-    };
- 
- 
-    plot(plots) {
-        this.plotBuffer = new ConsoleLinePlot(this.main, plots);
-        this.plotBuffer.render(this.printerTag);
-        return this.plotBuffer;
-    }
- 
-    pygame(size, fullscreen, pygameObj) {
-        if (this.pygameLine === null) {
-            this.pygameLine = new ConsoleLinePygame(this.main, size, fullscreen, pygameObj);
-            this.pygameLine.render(this.printerTag);
-        }
-        return this.pygameLine;
-    }
- 
-    drafter(size, fullscreen) {
-        if (this.drafterLine === null) {
-            this.drafterLine = new ConsoleLineDrafter(this.main, size, fullscreen);
-            this.drafterLine.render(this.printerTag);
-        }
-        return this.drafterLine;
-    }
- 
-    printPILImage(imageData) {
-        console.log("TEST", imageData.image);
-        this.imageBuffer = new ConsoleLineImage(this.main, imageData.image);
-        this.imageBuffer.render(this.printerTag);
-        return this.imageBuffer;
-    }
- 
-    printValue(value) {
-        let printedValue = new ConsoleLineValue(this.main, value);
-        printedValue.render(this.printerTag);
-        return printedValue;
-    }
- 
-    /**
-     * Creates and registers a Promise from the Input box
-     * @param {String} promptMessage - Message to display to the user.
-     *
-     */
-    input(promptMessage) {
-        this.inputBuffer = new ConsoleLineInput(this.main, promptMessage);
-        return this.inputBuffer.render(this.printerTag);
-    };
- 
- 
-    evaluate() {
-        this.inputBuffer = new ConsoleLineEvaluate(this.main);
-        return this.inputBuffer.render(this.printerTag);
-    }
- 
-    beginEval() {
-        let startEvaluation = new ConsoleLineStartEvaluate(this.main);
-        return startEvaluation.render(this.printerTag);
-    }
- 
-    /**
-     * Unconditionally scroll to the bottom of the window.
-     *
-     */
-    scrollToBottom() {
-        this.tag.animate({
-            scrollTop: this.tag.prop("scrollHeight") - this.tag.prop("clientHeight")
-        }, 500);
-    };
- 
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/corgis.js.html b/coverage/lcov-report/src/corgis.js.html deleted file mode 100644 index 111e0a928..000000000 --- a/coverage/lcov-report/src/corgis.js.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - - Code coverage report for src/corgis.js - - - - - - - - - -
-
-

All files / src corgis.js

-
- -
- 10% - Statements - 6/60 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/14 -
- - -
- 10% - Lines - 6/60 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147  -  -  -  -1x -1x -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {slug} from "./utilities";
- 
-// TODO: editor.bm.blockEditor.extraTools[]
- 
-export let _IMPORTED_DATASETS = {};
-export let _IMPORTED_COMPLETE_DATASETS = {};
- 
-/**
- * This is a very simplistic helper function that will transform
- * a given button into a "Loaded" state (disabled, pressed state, etc.).
- *
- * @param {HTMLElement} btn - An HTML element to change the text of.
- */
-let setButtonLoaded = function (btn) {
-    btn.addClass("active")
-        .addClass("btn-success")
-        .removeClass("btn-primary")
-        .prop("disabled", true)
-        .text("Loaded")
-        .attr("aria-pressed", "true");
-};
- 
- 
-/**
- * Module that connects to the CORGIS datasets and manages interactions
- * with them. This includes loading in datasets at launch and on-the-fly.
- * Note that this has no presence on screen, so it does not have a tag.
- *
- * @constructor
- * @this {BlockPyCorgis}
- * @param {Object} main - The main BlockPy instance
- */
-export function BlockPyCorgis(main) {
-    this.main = main;
- 
-    this.loadedDatasets = [];
-    this.loadDatasets();
-}
- 
-BlockPyCorgis.prototype.loadDatasets = function (silently) {
-    // Load in each the datasets
-    let model = this.main.model,
-        editor = this.main.components.pythonEditor,
-        server = this.main.components.server;
-    let imports = [];
-    model.assignment.settings.datasets().split(",").forEach((name) => {
-        if (name && !(name in BlockMirrorBlockEditor.EXTRA_TOOLS)) {
-            imports.push.apply(imports, this.importDataset(slug(name), name, silently));
-        }
-    });
- 
-    // When datasets are loaded, update the toolbox.
-    $.when.apply($, imports).done(function () {
-        //console.log("TRIGGERED");
-        editor.bm.forceBlockRefresh();
-        editor.bm.blockEditor.remakeToolbox();
-    }).fail(function (e) {
-        console.log(arguments);
-        console.error(e);
-    }).always(function () {
-        server.finalizeSubscriptions();
-    });
-};
- 
-/**
- * Loads the definitions for a dataset into the environment, including
- * the dataset (as a JS file), the skulpt bindings, and the blockly
- * bindings. This requires access to a CORGIS server, and occurs
- * asynchronously. The requests are fired and their deferred objects
- * are returned - callers can use this information to perform an action
- * on completion of the import.
- *
- * @param {String} slug - The URL safe version of the dataset name
- * @param {String} name - The user-friendly version of the dataset name.
- * @returns {Array.<Deferred>} - Returns the async requests as deferred objects.
- */
-BlockPyCorgis.prototype.importDataset = function (slug, name) {
-    let url_retrievals = [];
-    if (this.main.model.ui.server.isEndpointConnected("importDatasets")) {
-        let root = this.main.model.configuration.urls.importDatasets + "blockpy/" + slug + "/" + slug;
-        this.main.model.display.loadingDatasets.push(name);
-        // Actually get data
-        let getDataset = $.getScript(root + "_dataset.js");
-        // Load getComplete silently in the background because its big :(
-        let getComplete = $.getScript(root + "_complete.js");
-        let getSkulpt = $.get(root + "_skulpt.js", function (data) {
-            Sk.builtinFiles["files"]["src/lib/" + slug + "/__init__.js"] = data;
-        });
-        let getBlockly = $.getScript(root + "_blockly.js");
-        // On completion, update menus.
-        $.when(getDataset, getSkulpt, getBlockly).done(() => {
-            this.loadedDatasets.push(slug);
-            this.main.components.pythonEditor.bm.textToBlocks.hiddenImports.push(slug);
-            this.main.components.pythonEditor.bm.forceBlockRefresh();
-            this.main.components.pythonEditor.bm.blockEditor.remakeToolbox();
-            this.main.model.display.loadingDatasets.remove(name);
-        });
-        url_retrievals.push(getDataset, getSkulpt, getBlockly);
-    }
-    return url_retrievals;
-};
- 
-/**
- * Opens a dialog box to present the user with the datasets available
- * through the CORGIS server. This requires a call, so this method
- * completes asynchronously. The dialog is composed of a table with
- * buttons to load the datasets (More than one dataset can be loaded
- * from within the dialog at a time).
- */
-BlockPyCorgis.prototype.openDialog = function () {
-    if (this.main.model.ui.server.isEndpointConnected("importDatasets")) {
-        let root = this.main.model.configuration.urls.importDatasets;
-        $.getJSON(root + "index.json",  (data) => {
-            // Make up the Body
-            let datasets = data.blockpy;
-            let documentation = root+"blockpy/index.html";
-            let start = $(`<p>Documentation is available at <a href='${documentation}' target=_blank>url</a></p>`);
-            let body = $("<table></table>", {"class": "table table-bordered table-sm table-striped"});
-            Object.keys(datasets).sort().map((name) => {
-                let sluggedName = slug(datasets[name].name);
-                let titleName = name;
-                let btn = $('<button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">Load</button>');
-                let imgSrc = root+"../images/datasets/"+name+"-icon.png";
-                if (this.loadedDatasets.indexOf(sluggedName) > -1) {
-                    setButtonLoaded(btn);
-                } else {
-                    btn.click( () => {
-                        this.importDataset(sluggedName, "Data - " + datasets[name].title);
-                        setButtonLoaded(btn);
-                    });
-                }
-                //let img = `<img src='${imgSrc}' class="corgis-icon">`;
-                $("<tr></tr>")
-                    //.append($("<td>" + img + "</td>"))
-                    .append($("<td>" + datasets[name].title + "</td>"))
-                    .append($("<td>" + datasets[name].overview + "</td>"))
-                    .append($("<td></td>").append(btn))
-                    .appendTo(body);
-            });
-            body.appendTo(start);
-            // Show the actual dialog
-            this.main.components.dialog.show("Import Datasets", start, null);
-        });
-    }
-};
- 
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/dialog.js.html b/coverage/lcov-report/src/dialog.js.html deleted file mode 100644 index eb31475da..000000000 --- a/coverage/lcov-report/src/dialog.js.html +++ /dev/null @@ -1,814 +0,0 @@ - - - - - - Code coverage report for src/dialog.js - - - - - - - - - -
-
-

All files / src dialog.js

-
- -
- 40.25% - Statements - 31/77 -
- - -
- 0% - Branches - 0/12 -
- - -
- 10.71% - Functions - 3/28 -
- - -
- 40.25% - Lines - 31/77 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -6x -  -6x -6x -6x -6x -6x -  -6x -6x -6x -  -  -  -6x -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -5x -  -  -  -5x -  -  -  -5x -  -  -  -  -5x -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// TODO: Dyanmically populate aria-labelledby in this and other places
- 
-export let DIALOG_HTML = `
-    <div class='blockpy-dialog modal hidden'
-         role="dialog"
-         aria-label='Dialog'
-         aria-hidden="true"
-         aria-modal="true">
-        <div class='modal-dialog modal-lg' role="document">
-            <div class='modal-content' role='region' aria-label='Dialog content'>
-                <div class='modal-header'>
-                    <h4 class='modal-title'>Dynamic Content</h4>
-                    <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>
-                        <span aria-hidden="true">&times;</span>
-                    </button>
-                </div>
-                <div class='modal-body' style='max-width:100%; max-height:400px'>
-                </div>
-                <div class='modal-footer'>
-                    <button type='button' class='btn btn-white modal-close' data-dismiss='modal'>Close</button>
-                    <button type='button' class='btn btn-success modal-okay' data-dismiss='modal'>Okay</button>
-                </div>    
-            </div>
-        </div>
-    </div>
-`;
- 
-/**
- * A utility object for quickly and conveniently generating dialog boxes.
- * Unfortunately, this doesn't dynamically create new boxes; it reuses the same one
- * over and over again. It turns out dynamically generating new dialog boxes
- * is a pain! So we can't stack them.
- *
- * @constructor
- * @this {BlockPyDialog}
- * @param {Object} main - The main BlockPy instance
- * @param {HTMLElement} tag - The HTML object this is attached to.
- */
-export function BlockPyDialog(main, tag) {
-    this.main = main;
-    this.tag = tag;
- 
-    this.titleTag = tag.find(".modal-title");
-    this.bodyTag = tag.find(".modal-body");
-    this.footerTag = tag.find(".modal-footer");
-    this.okayButton = tag.find(".modal-okay");
-    this.closeButton = tag.find(".modal-close");
- 
-    this.yes = () => {};
-    this.no = () => {};
-    this.okayButton.click(() => {
-        this.yes();
-        this.tag.modal("hide");
-    });
-    this.closeButton.click(() => {
-        this.no();
-        //this.tag.modal("hide");
-    });
-}
- 
-BlockPyDialog.prototype.close = function () {
-    this.tag.modal("hide");
-};
- 
-/**
- * A simple externally available function for popping up a dialog
- * message. This menu will be draggable by its title.
- *
- * @param {String} title - The title of the message dialog. Can have HTML.
- * @param {String} body - The body of the message dialog. Can have HTML.
- * @param {function} onclose - A function to be run when the user closes the dialog.
- */
-BlockPyDialog.prototype.show = function (title, body, onclose) {
-    this.titleTag.html(title);
-    this.bodyTag.html(body);
-    this.tag.modal("show");
-    this.okayButton.hide();
-    this.tag.draggable({
-        "handle": ".modal-title"
-    });
- 
-    this.tag.on("hidden.bs.modal", function (e) {
-        if (onclose !== undefined && onclose !== null) {
-            onclose();
-        }
-    });
-};
- 
-BlockPyDialog.prototype.confirm = function (title, body, yes, no, yesText) {
-    if (yesText === undefined) {
-        yesText = "Okay";
-    }
-    this.show(title, body, no);
-    this.yes = yes;
-    this.no = no;
-    this.okayButton.show().html(yesText);
-    // TODO: add okay button and cancel button
-};
- 
-BlockPyDialog.prototype.ASSIGNMENT_VERSION_CHANGED = function () {
-    this.confirm("Assignment Changed", "Your instructor has made changes to this assignment. Would you like to reload? All your work has been saved.",);
-};
- 
-BlockPyDialog.prototype.ERROR_LOADING_ASSIGNMNENT = function (reason) {
-    this.show("Error Loading Assignment", `BlockPy encountered an error while loading the assignment.<br>
-Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_LISTING_UPLOADED_FILES = function (reason) {
-    this.show("Error Listing Uploaded Files", `BlockPy encountered an error while listing the uploaded files.<br>
-Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_UPLOADING_FILE = function (reason) {
-    this.show("Error Uploaded File", `BlockPy encountered an error while uploading the file.<br>
-Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_DOWNLOADING_FILE = function (reason) {
-    this.show("Error Downloading File", `BlockPy encountered an error while downloading a file.<br>
-Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_RENAMING_FILE = function (reason) {
-    this.show("Error Renaming File", `BlockPy encountered an error while renaming a file.<br>
-Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_DELETING_FILE = function (reason) {
-    this.show("Error Deleting File", `BlockPy encountered an error while deleting a file.<br>
-Please try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_SAVING_ASSIGNMNENT = function (reason) {
-    this.show("Error Saving Assignment", `BlockPy encountered an error while saving the assignment.<br>
-Please reload the page and try again.<br>Response from server was:<br><pre>${reason}</pre>`,);
-};
- 
-BlockPyDialog.prototype.ERROR_SHOW_STUDENT_ERROR = function (error) {
-    this.show("Original Error", `When I ran your code, I encountered an error:\n\n<div class="blockpy-dialog-student-error-message">${error}</div>`);
-};
- 
-BlockPyDialog.prototype.POSITIVE_FEEDBACK_FULL = function (title, message) {
-    this.show(title, message);
-};
- 
-BlockPyDialog.prototype.SCREENSHOT_BLOCKS = function () {
-    // TODO
-};
- 
-BlockPyDialog.prototype.ERROR_UPDATING_SUBMISSION_STATUS = function () {
-    this.show("Error Updating Submission Status", `BlockPy encountered an error while updating your submission status.<br>
-Please reload the page and try again.`);
-};
- 
-BlockPyDialog.prototype.ERROR_LOADING_HISTORY = function () {
-    this.show("Error Loading History", `BlockPy encountered an error while loading your history.<br>
-Please reload the page and try again.`);
-};
- 
-BlockPyDialog.prototype.OFFER_FORK = function () {
-    let setupUrl = this.main.model.configuration.urls.instructionsAssignmentSetup;
-    setupUrl = setupUrl ? ` (<a href="${setupUrl}" target="_blank">How do I do that?</a>)` : "";
-    this.show("Assignment Not Owned; Fork?", `
-    <div class="mb-4">
-        It looks like you want to edit this assignment, but you are not an instructor
-    or designer in the course that owns it ("Course Name"). Would you like to fork
-    this assignment (or its entire group) so that you can save your modifications?
-    </div>
-    
-    <div class="mb-4">
-        Remember to update the Launch URL in the assignments' settings on Canvas!${setupUrl}
-    </div>
-    
-    <div><button type='button' class='btn btn-white'>Fork entire assignment group</button></div>
-    <div><button type='button' class='btn btn-white'>Fork just this assignment</button></div>
-    <div><button type='button' class='btn btn-danger'>Reset my local changes</button></div>
-    
-    <div class="form-check">
-        <input type="checkbox" class="form-check-input"
-                name="blockpy-transfer-submissions">
-        <label class="form-check-label" for="blockpy-transfer-submissions">Transfer Student Submissions for this course</label>
-    </div>
-    
-    <div class="form-check">
-    <label class="form-text" for="blockpy-course-id">New owning course id: </label>
-        <input type="text" name="blockpy-course-id" value="${this.main.model.user.courseId()}">
-    </div>
-    `);
-};
- 
-BlockPyDialog.prototype.EDIT_INPUTS = function () {
-    let inputText = this.main.model.execution.input().join("\n");
-    let clearInputs = this.main.model.display.clearInputs() ? "" : "checked";
-    let yes = () => {
-        let checked = this.tag.find(".blockpy-remember-inputs").prop("checked");
-        let inputs = this.tag.find(".blockpy-input-list").val().split("\n");
-        this.main.model.display.clearInputs(!checked);
-        this.main.model.execution.input(inputs);
-    };
-    this.confirm("Edit Remembered Inputs", `
- 
-<div class="form-check">
-<input type="checkbox" class="blockpy-remember-inputs form-check-input"
-        name="blockpy-remember-inputs" ${clearInputs}>
-<label class="form-check-label" for="blockpy-remember-inputs">Reuse inputs for next execution</label>
-</div>
- 
-<textarea class="blockpy-input-list form-control" rows="4">${inputText}</textarea><br>
-Edit the inputs above to store and reuse them across multiple executions.
-Each input should be put on its own line.
-You do not need quotes; the text will be entered literally.
- 
-`, yes, this.no, "Save");
-    // TODO: Allow user to specify the infinite string to keep giving when the others run out
-};
- 
-BlockPyDialog.prototype.START_SHARE = function (url, wasPrompted) {
-    const initialMessage = wasPrompted ? `
-    It looks like you are having some trouble with this problem, your code, or this feedback.
-    If you plan to reach out for help from the course staff, then we recommend you include this link
-    in your message. It will make it much easier for them to help you quickly. 
-    ` : "You can quickly share your code with instructors and TAs by providing them with this link:";
-    this.show("Share Your Code", `
-    <div class="mb-4">
-        ${initialMessage}
-    </div>
-    <div class="mb-4">
-        <pre class="blockpy-copy-share-link-area">${url}</pre>
-        <button type='button' class='btn btn-white blockpy-copy-share-link'>Copy Link</button>
-    </div>
-    <div class="mb-4">
-        Note that you CANNOT share this link with other students, or access it yourself.
-        This is strictly for sharing with the course staff when something goes wrong or you need help with your code.
-    </div>
-    `);
- 
-    this.tag.find(".blockpy-copy-share-link").on("click", () => {
-        // Copy the URL to the clipboard
-        navigator.clipboard.writeText(url).then(() => {
-            this.tag.find(".blockpy-copy-share-link").html("Copied!");
-        });
-    });
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/abstract_editor.js.html b/coverage/lcov-report/src/editor/abstract_editor.js.html deleted file mode 100644 index 2229872b3..000000000 --- a/coverage/lcov-report/src/editor/abstract_editor.js.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - Code coverage report for src/editor/abstract_editor.js - - - - - - - - - -
-
-

All files / src/editor abstract_editor.js

-
- -
- 0% - Statements - 0/44 -
- - -
- 0% - Branches - 0/4 -
- - -
- 0% - Functions - 0/13 -
- - -
- 0% - Lines - 0/44 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {Editors} from "../editors";
- 
-export function uploadFile(model, event) {
-    let fileReader = new FileReader();
-    let files = event.target.files;
-    fileReader.onload = (e =>
-        model.ui.editors.current().uploadFile(e)
-    );
-    fileReader.fileName = files[0].name;
-    fileReader.readAsText(files[0]);
-    event.target.value = "";
-}
- 
-export function sluggify(text) {
-    return text.replace(/[^a-z0-9]/gi, "_").toLowerCase();
-}
- 
-export function downloadFile(model, event) {
-    let {name, extension, contents, mimetype} = model.ui.editors.current().downloadFile();
-    // Make safe
-    name = sluggify(name);
-    name = name + extension;
-    // Make the data download as a file
-    let blob = new Blob([contents], {type: mimetype});
-    if (window.navigator.msSaveOrOpenBlob) {
-        window.navigator.msSaveBlob(blob, name);
-    } else{
-        let temporaryDownloadLink = window.document.createElement("a");
-        temporaryDownloadLink.href = window.URL.createObjectURL(blob);
-        temporaryDownloadLink.download = name;
-        document.body.appendChild(temporaryDownloadLink);
-        temporaryDownloadLink.click();
-        document.body.removeChild(temporaryDownloadLink);
-    }
-}
- 
-export class AbstractEditor {
-    constructor(main, tag) {
-        this.main = main;
-        this.tag = tag;
- 
-        this.fileSystem = main.components.fileSystem;
-        this.filename = null;
-        this.file = null;
-    }
- 
-    deleteFile() {
-        this.fileSystem.deleteFile(this.filename);
-        this.main.model.display.filename("answer.py");
-        this.main.components.editors.changeEditor("answer.py");
-    }
- 
-    onFileDeleted() {
-        // TODO: Switch to the previous file instead of a default file
-        this.main.model.display.filename("answer.py");
-        this.main.components.editors.changeEditor("answer.py");
-    }
- 
-    onFileUpdated(file) {
-        if (file.filename === this.filename) {
-            //this.file = file;
-            this.main.components.editors.changeEditor(this.filename);
-            //this.fileSystem.stopWatchingFile(this.filename);
-            //this.trackCurrentFile();
-        }
-    }
- 
-    trackCurrentFile() {
-        this.fileSystem.watchFile(this.filename, {
-            updated: this.onFileUpdated.bind(this),
-            deleted: this.onFileDeleted.bind(this)
-        });
-    }
- 
-    enter(newFilename, oldEditor) {
-        this.filename = newFilename;
-        this.file = this.fileSystem.getFile(newFilename);
-        this.trackCurrentFile();
-    }
- 
-    /**
-     *
-     * @param newFilename - the filename that the other editor will be switching to
-     * @param oldEditor
-     * @param newEditor
-     */
-    exit(newFilename, oldEditor, newEditor) {
-        this.fileSystem.stopWatchingFile(this.filename);
-        this.file = null;
-        this.filename = null;
-    }
- 
-    uploadFile(event) {
-        let filename = event.target.fileName;
-        let contents = event.target.result;
-        this.file.handle(contents);
-    }
- 
-    downloadFile() {
-        let filename = Editors.parseFilename(this.filename);
-        return {
-            name: filename.name,
-            extension: filename.type,
-            contents: this.file.handle(),
-            mimetype: "text/plain"
-        };
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/assignment_settings.js.html b/coverage/lcov-report/src/editor/assignment_settings.js.html deleted file mode 100644 index cc9c4d1fd..000000000 --- a/coverage/lcov-report/src/editor/assignment_settings.js.html +++ /dev/null @@ -1,1312 +0,0 @@ - - - - - - Code coverage report for src/editor/assignment_settings.js - - - - - - - - - -
-
-

All files / src/editor assignment_settings.js

-
- -
- 22.95% - Statements - 14/61 -
- - -
- 11.11% - Branches - 2/18 -
- - -
- 31.25% - Functions - 5/16 -
- - -
- 22.22% - Lines - 12/54 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -28x -228x -28x -  -  -  -  -  -  -12x -  -  -  -  -  -  -  -4x -  -140x -  -268x -112x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
-import {DisplayModes} from "./python";
- 
-const ASSIGNMENT_SETTINGS = [
-    ["toolbox", "toolbox", "normal", "toolbox", "Which version of the toolbox to present to the user."],
-    ["type", "type", "blockpy", "type", "The type of question; BlockPy programming problems are the default, but we also support static readings, quiz questions, and a Maze game."],
-    ["passcode", "passcode", "", "string", "A string that the user must enter to access the problem. If blank, then no passcode is prompted."],
-    //["toolboxLevel", "toolbox_level", "normal", "toolbox", "INCOMPLETE: What level of toolbox to present to the user (hiding and showing categories)."],
-    ["startView", "start_view", DisplayModes.TEXT, DisplayModes, "The Python editor mode to start in when the student starts the problem."],
-    ["datasets", "datasets", "", "string", "The current list of datasets available on load as a comma-separated string."],
-    ["disableTimeout", "disable_timeout", false, "bool", "If checked, then students code is allowed to run without timeouts (potentially allowing infinite loops)."],
-    ["partId", "part_id", "", "string", "The Part ID of an Assignment that this editor is responsible for. Assignments can have regions (\"Parts\") that behave independently to the user but all correspond to the same assignment on the backend. Blank corresponds to the full document. Note that most assignment settings will apply UNIVERSALLY across all parts, including the on_run.py and the other settings on this page."],
-    ["isParsons", "is_parsons", false, "bool", "If checked, then this is a parson's style question (jumbled)."],
-    ["saveTurtleOutput", "save_turtle_output", false, "bool", "If checked, then turtle (and pygame) output is saved whenever the program uses it."],
-    ["disableFeedback", "disable_feedback", false, "bool", "If checked, then no instructor scripts are run (e.g., on_run and on_eval)."],
-    ["disableInstructorRun", "disable_instructor_run", false, "bool", "If checked, then the instructor on_run will not automatically run the students' code. This still runs the students' code once beforehand, but the output/data will not be available to the instructor's on_run.py script."],
-    ["disableStudentRun", "disable_student_run", false, "bool", "If checked, then the run button no longer run the students' code. This still runs the instructor's feedback on_run script."],
-    ["disableTifa", "disable_tifa", false, "bool", "If checked, then do not automatically run Tifa (which can be slow)."],
-    ["disableTrace", "disable_trace", false, "bool", "If checked, then the students code will not have its execution traced (no variables recorded, no coverage tracked)."],
-    ["disableEdit", "disable_edit", false, "bool", "If checked, then the students' file will not be editable."],
-    ["preloadAllFiles", "preload_all_files", false, "bool", "If checked, then the students can upload and use images and other files. This preloads all available files and images. You can filter them using the Preloaded Files setting."],
-    ["enableImages", "can_image", false, "bool", "If checked, then users can copy/paste images directly into the text editor."],
-    ["enableBlocks", "can_blocks", true, "bool", "If checked, then the student can edit the block interface (if not, then it is visible but not editable)."],
-    ["canClose", "can_close", false, "bool", "If checked, then the student should mark their submission closed when they are done. There is no way to force a student to do so. Unlike Reviewed, this still submits the correctness."],
-    ["onlyInteractive", "only_interactive", false, "bool", "If checked, the editors are hidden, the program is automatically run, and then the console enters Eval mode (interactive)."],
-    ["onlyUploads", "only_uploads", false, "bool", "If checked, then the students' file will not be directly editable (they will have to upload submissions)."],
-    // What menus/feedback to show and hide
-    ["hideSubmission", "hide_submission", false, "bool", "If checked, then students will not be able to see their submission's code or history on Canvas."],
-    ["hideFiles", "hide_files", true, "bool", "If checked, then students will not see the View Files toolbar."],
-    ["hideQueuedInputs", "hide_queued_inputs", false, "bool", "If checked, then the students cannot access the queued inputs box (makes repeated debugging easier for the input function)."],
-    ["hideEditors", "hide_editors", false, "bool", "If checked, then all of the editors are hidden."],
-    ["hideMiddlePanel", "hide_middle_panel", false, "bool", "If checked, then the console and feedback areas is hidden."],
-    ["hideAll", "hide_all", false, "bool", "INCOMPLETE: If checked, then the entire interface is hidden."],
-    ["hideEvaluate", "hide_evaluate", false, "bool", "If checked, then the Evaluate button is not shown on the console."],
-    ["hideImportDatasetsButton", "hide_import_datasets_button", false, "bool", "If checked, then students cannot see the import datasets button."],
-    // TODO: Fix this one to be settable
-    ["hideImportStatements", "hide_import_statements", false, "bool", "INCOMPLETE: If checked, certain kinds of import statements (matplotlib, turtle, datasets) are not shown in the block interface."],
-    ["hideCoverageButton", "hide_coverage_button", false, "bool", "INCOMPLETE: If checked, the coverage button is not shown."],
-    ["hideTraceButton", "hide_trace_button", false, "bool", "If checked, then the Trace button is not shown."],
-    ["smallLayout", "small_layout", false, "bool", "If checked, then the interface fits into a smaller region."],
-    ["hasClock", "has_clock", false, "bool", "If checked, then a clock is shown in the top right corner."],
-    ["preloadFiles", "preload_files", "", "string", "A JSON structure representing the files that should be loaded on start from the remote, as if they were local."]
-];
- 
-export let AssigmentType = {
-    BLOCKPY: "blockpy",
-    MAZE: "maze",
-    QUIZ: "quiz",
-    READING: "reading"
-};
- 
-function getDocumentation(name) {
-    for (let i=0; i < ASSIGNMENT_SETTINGS.length; i++) {
-        if (ASSIGNMENT_SETTINGS[i][0] === name) {
-            return ASSIGNMENT_SETTINGS[i][4];
-        }
-    }
-    return "Documentation not found for field";
-}
- 
-function makeStartViewTab(name, icon, mode) {
-    return `<label class="btn btn-outline-secondary blockpy-mode-set-blocks"
-                data-bind="css: {active: assignment.settings.startView() === '${mode}'},
-                           click: assignment.settings.startView.bind($data, '${mode}')">
-                <span class='fas fa-${icon}'></span>
-                <input type="radio" name="blockpy-start-view-set" autocomplete="off" checked> ${name}
-            </label>`;
-}
- 
-const ASSIGNMENT_SETTINGS_BOOLEAN_COMPONENTS_HTML = ASSIGNMENT_SETTINGS
-    // Only handle the simple booleans this way
-    .filter((setting) => setting[3] === "bool")
-    .map((setting) => {
-        let prettyName = setting[1].split("_").map(word=>(word.charAt(0).toUpperCase()+word.slice(1))).join(" ");
-        return `
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-check-label" for="blockpy-settings-${setting[0]}">${prettyName}</label>
-            </div>
-            <div class="col-sm-1">
-                <div class="form-check">
-                    <input class="form-check-input" type="checkbox" id="blockpy-settings-${setting[0]}"
-                    data-bind="checked: assignment.settings.${setting[0]}">
-                </div>  
-            </div>            
-            <div class="col-sm-9">
-                <small class="form-text text-muted">
-                    ${setting[4]}
-                </small>
-            </div>
-        </div>
-        `;
-    }).join("\n\n");
- 
-export const ASSIGNMENT_SETTINGS_EDITOR_HTML = `
-    <div class="blockpy-view-settings">
-    
-    <form>
- 
-        <div class="form-group row">
-            <div class="col-sm-12 mx-auto">
-                <button type="button" class="btn btn-success"
-                    data-bind="click: ui.editors.settings.save">Save changes</button>
-            </div>
-        </div>
-    
-        <div class="form-group row">
-            <label for="blockpy-settings-name" class="col-sm-2 col-form-label text-right">Name:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-name"
-                data-bind="value: assignment.name">
-                <small class="form-text text-muted">
-                    The student-facing name of the assignment. Assignments within a group are ordered alphabetically
-                    by their name, so you may want to use a naming scheme like "#43.5) Whatever".
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-url" class="col-sm-2 col-form-label text-right">URL:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-url"
-                data-bind="value: assignment.url">
-                <small class="form-text text-muted">
-                    The course-unique URL that can be used to consistently refer to this assignment. 
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-check-label" for="blockpy-settings-public">Public:</label>
-            </div>
-            <div class="col-sm-1">
-                <div class="form-check">
-                    <input class="form-check-input" type="checkbox" id="blockpy-settings-public"
-                    data-bind="checked: assignment.public">
-                </div>  
-            </div>            
-            <div class="col-sm-9">
-                <small class="form-text text-muted">
-                    If not public, users outside of the course will not be able to see the assignment in course listings.
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-check-label" for="blockpy-settings-hidden">Hidden:</label>
-            </div>
-            <div class="col-sm-1">
-                <div class="form-check">
-                    <input class="form-check-input" type="checkbox" id="blockpy-settings-hidden"
-                    data-bind="checked: assignment.hidden">
-                </div>  
-            </div>            
-            <div class="col-sm-9">
-                <small class="form-text text-muted">
-                    If hidden, students will not be able to see their grade while working on the assignment.
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-check-label" for="blockpy-settings-reviewed">Reviewed:</label>
-            </div>
-            <div class="col-sm-1">
-                <div class="form-check">
-                    <input class="form-check-input" type="checkbox" id="blockpy-settings-reviewed"
-                    data-bind="checked: assignment.reviewed">
-                </div>  
-            </div>            
-            <div class="col-sm-9">
-                <small class="form-text text-muted">
-                    If reviewed, the assignment need to be commented upon and regraded by the staff after submission.
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-points" class="col-sm-2 col-form-label text-right">Points:</label>
-            <div class="col-sm-10">
-                <input type="number" class="form-control" id="blockpy-settings-points"
-                data-bind="value: assignment.points">
-                <small class="form-text text-muted">
-                    The number of points this assignment is worth; defaults to 1 point. 
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-check-label" for="blockpy-settings-reviewed">Starting View:</label>
-            </div>
-            <div class="col-sm-3">
-                <div class="btn-group btn-group-toggle mr-2" data-toggle="buttons">
-                    ${makeStartViewTab("Blocks", "th-large", DisplayModes.BLOCK)}
-                    ${makeStartViewTab("Split", "columns", DisplayModes.SPLIT)}
-                    ${makeStartViewTab("Text", "align-left", DisplayModes.TEXT)}
-                 </div>
-            </div>            
-            <div class="col-sm-7">
-                <small class="form-text text-muted">
-                    ${getDocumentation("startView")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-ip-ranges" class="col-sm-2 col-form-label text-right">IP Ranges:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-ip-ranges"
-                data-bind="value: assignment.ipRanges">
-                <small class="form-text text-muted">
-                    Provide a comma-separated list of IP Addresses that will be explicitly allowed. If blank,
-                    then all addresses are allowed. If an address starts with <code>^</code> then it it is explicitly
-                    blacklisted, but that can be overridden in turn with a <code>!</code>. Addresses can also
-                    include a bit mask to allow a range of addresses.
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-passcode" class="col-sm-2 col-form-label text-right">Passcode:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-passcode"
-                data-bind="value: assignment.settings.passcode">
-                <small class="form-text text-muted">
-                    ${getDocumentation("passcode")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-datasets" class="col-sm-2 col-form-label text-right">Preloaded Datasets:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-datasets"
-                data-bind="value: assignment.settings.datasets">
-                <small class="form-text text-muted">
-                    ${getDocumentation("datasets")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-preload-files" class="col-sm-2 col-form-label text-right">Preloaded Files:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-preload-files"
-                data-bind="value: assignment.settings.preloadFiles">
-                <small class="form-text text-muted">
-                    ${getDocumentation("preloadFiles")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-toolbox" class="col-sm-2 col-form-label text-right">Block Toolbox:</label>
-            <div class="col-sm-10">
-                <select class="form-control" id="blockpy-settings-toolbox"
-                       data-bind="value: assignment.settings.toolbox">
-                   <option value="normal">Normal Toolbox</option>
-                   <option value="ct">CT@VT Toolbox</option>
-                   <option value="ct2">CT@VT Toolbox V2</option>
-                   <option value="minimal">Minimal Set</option>
-                   <option value="full">All Blocks</option>
-                   <option value="custom">Custom</option>
-                </select>
-                <small class="form-text text-muted">
-                    ${getDocumentation("toolbox")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-type" class="col-sm-2 col-form-label text-right">Problem Type:</label>
-            <div class="col-sm-10">
-                <select class="form-control" id="blockpy-settings-type"
-                       data-bind="value: assignment.type">
-                   <option value="blockpy">BlockPy</option>
-                   <option value="maze">Maze</option>
-                   <option value="quiz">Quiz Question</option>
-                   <option value="reading">Reading</option>
-                </select>
-                <small class="form-text text-muted">
-                    ${getDocumentation("type")}
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <label for="blockpy-settings-part-id" class="col-sm-2 col-form-label text-right">Part ID:</label>
-            <div class="col-sm-10">
-                <input type="text" class="form-control" id="blockpy-settings-part-id"
-                data-bind="value: configuration.partId">
-                <small class="form-text text-muted">
-                    ${getDocumentation("partId")}
-                </small>
-            </div>
-        </div>
-        
-        ${ASSIGNMENT_SETTINGS_BOOLEAN_COMPONENTS_HTML}
-    </form>
-    
-    </div>
-`;
- 
-export function saveAssignmentSettings(model) {
-    let settings = {};
-    ASSIGNMENT_SETTINGS.forEach(setting => {
-        let clientName = setting[0], serverName = setting[1], defaultValue = setting[2];
-        let value = model.assignment.settings[clientName]();
-        // Only store this setting if its different from the default
-        if (value !== defaultValue) {
-            settings[serverName] = value;
-        }
-    });
-    return JSON.stringify(settings);
-}
- 
-export function loadAssignmentSettings(model, settings) {
-    if (settings) {
-        settings = JSON.parse(settings);
-        ASSIGNMENT_SETTINGS.forEach(setting => {
-            let clientName = setting[0], serverName = setting[1];
-            if (serverName in settings) {
-                model.assignment.settings[clientName](settings[serverName]);
-            } else {
-                model.assignment.settings[clientName](setting[2]);
-            }
-        });
- 
-        if (settings.start_view) {
-            model.display.pythonMode(settings.start_view);
-        }
-    }
-}
- 
-export function makeAssignmentSettingsModel(configuration) {
-    let settings = {};
-    ASSIGNMENT_SETTINGS.forEach(setting => {
-        let clientName = setting[0], serverName = setting[1], defaultValue = setting[2],
-            fieldType = setting[3];
-        if (configuration["assignment.settings."+serverName] === undefined) {
-            settings[clientName] = ko.observable(defaultValue);
-        } else {
-            let configValue = configuration["assignment.settings."+serverName];
-            if (fieldType === "bool") {
-                configValue = configValue.toLowerCase() === "true";
-            }
-            settings[clientName] = ko.observable(configValue);
-        }
-    });
- 
-    return settings;
-}
- 
-class AssignmentSettingsView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        //TODO: this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        // this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
- 
-        //TODO: this.codeMirror.on("change", this.currentListener);
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            // TODO: Do update
- 
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            //this.file.handle(this.codeMirror.value());
-            // TODO: Update
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        //this.currentSubscription.dispose();
-        // TODO: update
-        //this.codeMirror.off("change", this.currentListener);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const AssignmentSettings = {
-    name: "Assignment Settings",
-    extensions: ["!assignment_settings.blockpy"],
-    constructor: AssignmentSettingsView,
-    template: ASSIGNMENT_SETTINGS_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/default_header.js.html b/coverage/lcov-report/src/editor/default_header.js.html deleted file mode 100644 index 016a999e6..000000000 --- a/coverage/lcov-report/src/editor/default_header.js.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - Code coverage report for src/editor/default_header.js - - - - - - - - - -
-
-

All files / src/editor default_header.js

-
- -
- 100% - Statements - 1/1 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 1/1 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
 
- 
-export const default_header = `
-<div class="blockpy-python-toolbar col-md-12 btn-toolbar"
-     role="toolbar" aria-label="Python Toolbar">
-     <div class="btn-group mr-2">
-        <label class="btn btn-outline-secondary">
-            <span class="fas fa-file-upload"></span> Upload
-            <input class="blockpy-toolbar-upload" type="file"
-                hidden
-                data-bind="event: {change: ui.editors.upload}">
-         </label>
- 
-        <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
-            data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-            <span class="caret"></span>
-            <span class="sr-only">Toggle Dropdown</span>
-        </button>
-        
-        <div class="dropdown-menu dropdown-menu-right">
-            <a class='dropdown-item blockpy-toolbar-download'
-                data-bind="click: ui.editors.download">
-            <span class='fas fa-download'></span> Download
-            </a>
-        </div>
-    </div>
-    
-    <div class="btn-group mr-2" role="group" aria-label="Delete Group"
-        data-bind="visible: ui.editors.canDelete">
-        <button type="button" class="btn btn-outline-secondary",
-            data-bind="click: ui.files.delete">
-            <span class="fas fa-trash"></span> Delete
-         </button>
-     </div>
- </div>
-`;
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/images.js.html b/coverage/lcov-report/src/editor/images.js.html deleted file mode 100644 index b61f4cb52..000000000 --- a/coverage/lcov-report/src/editor/images.js.html +++ /dev/null @@ -1,961 +0,0 @@ - - - - - - Code coverage report for src/editor/images.js - - - - - - - - - -
-
-

All files / src/editor images.js

-
- -
- 4.54% - Statements - 2/44 -
- - -
- 0% - Branches - 0/17 -
- - -
- 0% - Functions - 0/15 -
- - -
- 4.54% - Lines - 2/44 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
-import * as FilePond from "filepond";
- 
-export const IMAGE_EDITOR_HTML = `
-     <div>
-        <strong>Available Files</strong><br>
-            All the files available to open with <code>PIL</code> for this assignment:
-            <button data-bind="click: ui.editors.images.reloadImages"
-                class="btn btn-outline-secondary float-right"
-            >Reload Available Images</button>
-        <!-- ko if: display.uploadedFiles() !== null -->
-            <ul>
-                <!-- ko foreach: { data: Object.keys(display.uploadedFiles()), as: 'placement' } -->
-                <li>
-                    <strong data-bind="text: $data[0].toUpperCase() + $data.slice(1)"></strong>:
-                    <table class="table table-striped table-bordered table-hover table-sm">
-                        <thead>
-                            <tr>
-                                <th>Filename</th>
-                                <th>Preview</th>
-                                <th>Actions</th>
-                            </tr>
-                        </thead>
-                        <tbody>
-                    <!-- ko foreach: { data: $root.display.uploadedFiles()[placement], as: 'filename' } -->
-                        <tr>
-                            <td>
-                                <code data-bind="text: filename[0]"></code>
-                            </td>
-                            <td>
-                                <details>
-                                    <summary><img data-bind="attr: { src: filename[1], alt: filename[1] }"
-                                        width="30px" height="30px" onerror="this.style.display='none'"/>
-                                    </summary>
-                                    <img data-bind="attr: { src: filename[1], alt: filename[1] }"
-                                        onerror="this.style.display='none'"/>
-                                </details>
-                            </td>
-                            <td>
-                                <button class="btn btn-danger" 
-                                    data-bind="click: $root.ui.editors.images.deleteFile.bind(filename[0]),
-                                               visible: $root.ui.editors.images.canModify(placement)">Delete</button>
-                                <button class="btn btn-danger" 
-                                    data-bind="click: $root.ui.editors.images.renameFile.bind(filename[0]),
-                                               visible: $root.ui.editors.images.canModify(placement)">Rename</button>
-                            </td>
-                        </tr>
-                    <!-- /ko -->
-                    </table>
-                </li>
-                <!-- /ko -->
-            </ul>
-        <!-- /ko -->
-        
-        <strong>Add more files</strong><br>
-        Upload more files using the forms below:
-                
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-label" for="blockpy-editor-images-upload-file">File:</label>
-            </div>
-            <div class="col-sm-10">
-                <input type="file" class="form-control blockpy-editor-images-upload-file" id="blockpy-editor-images-upload-file"
-            name="blockpy-editor-images-upload-file">
-                <small class="form-text text-muted">
-                    The file to make available in your code
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row" data-bind="visible: ui.editors.images.canChoosePlacement()">
-            <div class="col-sm-2 text-right">
-                <label class="form-label" for="blockpy-editor-images-upload-placement">Placement:</label>
-            </div>
-            <div class="col-sm-10">
-                <select id="blockpy-editor-images-upload-placement" name="blockpy-editor-images-upload-placement"
-                    class="form-control blockpy-editor-images-upload-placement">
-                    <option value="submission" selected>Only your submission</option>
-                    <option value="assignment">For all submissions of this assignment</option>
-                    <option value="course">Across the entire course</option>
-                    <option value="user">For just your user account</option>
-                </select>
-                <small class="form-text text-muted">
-                    The placement of the file in the system. This controls whether other users can see the file.
-                    If you want to provide a file to all students for just this specific problem, then you should
-                    use <code>For all submissions of this assignment</code>. If you want to use this same image
-                    across other assignments (including assignments within this assignment group), then you should
-                    use <code>Across the entire course</code>.
-                </small>
-            </div>
-        </div>
-        
-        <div class="form-group row">
-            <div class="col-sm-2 text-right">
-                <label class="form-label" for="blockpy-editor-images-upload-filename">Filename:</label>
-            </div>
-            <div class="col-sm-10">
-                <input type="text" class="form-control blockpy-editor-images-upload-filename" id="blockpy-editor-images-upload-filename"
-                             name="blockpy-editor-images-upload-filename">
-                <small class="form-text text-muted">
-                    The filename that will be made available in the code. This should be a valid filename for the
-                    system, and should not contain spaces or special characters. It should also have a valid file
-                    extension (e.g., <code>.png</code>, <code>.jpg</code>, <code>.txt</code>).
-                </small>
-            </div>
-        </div>
-        <div class="form-group row">
-            <button data-bind="click: ui.editors.images.uploadFile" class="btn btn-success">Upload</button>
-        </div>
-    </div>
-`;
- 
-class ImageEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
- 
-        this.tagUploadFileButton = this.tag.find(".blockpy-editor-images-upload-file");
-        this.tagUploadFilePlacement = this.tag.find(".blockpy-editor-images-upload-placement");
-        this.tagUploadFileName = this.tag.find(".blockpy-editor-images-upload-filename");
- 
-        this.tagUploadFileButton.on("change", (event) => {
-            this.tagUploadFileName.val(event.target.files[0].name);
-        });
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
- 
-        let uploadedFiles = this.main.model.display.uploadedFiles();
-        if (uploadedFiles === null) {
-            this.reloadImages();
-        }
- 
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
- 
-        // const target = this.tag.find(".blockpy-editor-images-filepond")[0];
-        //console.log(target);
-        /*const uploadUrl = new URL(this.main.model.configuration.urls["uploadFile"]);
-        uploadUrl.searchParams.set("directory", this.main.model.assignment.id());
-        uploadUrl.searchParams.set("placement", "submission");*/
-        // this.filepond = FilePond.create(target, {
-        //     //files: [],
-        //     allowMultiple: true,
-        //     server: {
-        //         url: this.main.model.configuration.urls["downloadFile"],
-        //         load: (source, load) => {
-        //             const params = new URL(source, window.location.origin).searchParams;
-        //             this.main.components.server.downloadFile(
-        //                 params.get("placement"),
-        //                 params.get("directory"),
-        //                 params.get("filename"),
-        //                 (response) => {
-        //                     load(new File([response], params.get("filename")));
-        //                 }
-        //             );
-        //             console.log(source, load);
-        //         },
-        //         process: {
-        //             url: this.main.model.configuration.urls["uploadFile"],
-        //             // url: "blockpy/upload_file?placement=assignment&directory="+this.main.model.assignment.id(),
-        //         }
-        //     }
-        // });
-        // console.log(this.filepond);
-        /*
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
- 
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.codeMirror.on("change", this.currentListener);*/
-    }
- 
-    reloadImages() {
-        this.main.components.server.listUploadedFiles((response) => {
-            if (response.success) {
-                this.main.model.display.uploadedFiles(response.files);
-                this.main.components.fileSystem.loadRemoteFiles(response.files);
-                // const allFiles = [];
-                // Object.entries(response.files).forEach(([group, files]) => {
-                //     files.forEach(([filename, url]) => allFiles.push({
-                //         source: url,
-                //         options: {
-                //             type: "local"
-                //         }
-                //     }));
-                // });
-                // this.filepond.addFiles(allFiles);
-            } else {
-                this.main.components.dialog.ERROR_LISTING_UPLOADED_FILES(response.message);
-            }
-        });
-    }
- 
-    updateEditor(newContents) {
- 
-    }
- 
-    updateHandle(event) {
-        /*this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirror.getValue());
-            this.dirty = false;
-        }*/
-    }
- 
-    getPlacementDirectory(placement) {
-        switch (placement) {
-            case "submission":
-                return this.main.model.submission.id();
-            case "assignment":
-                return this.main.model.assignment.id();
-            case "course":
-                return this.main.model.course.id();
-            case "user":
-                return this.main.model.user.id();
-            default:
-                return null;
-        }
-    }
- 
-    uploadFile(event) {
-        this.main.components.server.uploadFile(
-            this.tagUploadFilePlacement.val(),
-            this.getPlacementDirectory(this.tagUploadFilePlacement.val()),
-            this.tagUploadFileName.val(),
-            this.tagUploadFileButton[0].files[0],
-            (response) => {
-                if (response.success) {
-                    this.reloadImages();
-                } else {
-                    this.main.components.dialog.ERROR_UPLOADING_FILE(response.message);
-                }
-            }
-        );
-    }
- 
-    deleteFile(fileInfo) {
-        const [filename, url] = fileInfo;
-        const queryParams = new URL(url, window.location.origin).searchParams;
-        this.main.components.server.uploadFile(
-            queryParams.get("placement"),
-            queryParams.get("directory"),
-            filename,
-            "",
-            (response) => {
-                if (response.success) {
-                    this.reloadImages();
-                } else {
-                    this.main.components.dialog.ERROR_DELETING_FILE(response.message);
-                }
-            },
-            true
-        );
-    }
-    renameFile(fileInfo) {
-        const [filename, url] = fileInfo;
-        const queryParams = new URL(url, window.location.origin).searchParams;
-        const newFilename = prompt("Enter the new filename for this file:", filename);
-        if (newFilename) {
-            this.main.components.server.renameFile(
-                queryParams.get("placement"),
-                queryParams.get("directory"),
-                filename,
-                newFilename,
-                (response) => {
-                    if (response.success) {
-                        this.reloadImages();
-                    } else {
-                        this.main.components.dialog.ERROR_RENAMING_FILE(response.message);
-                    }
-                }
-            );
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        super.exit(newFilename, oldEditor);
-        // if (this.filepond) {
-        //     this.filepond.destroy();
-        // }
-    }
-}
- 
-export const ImageEditor = {
-    name: "Image",
-    extensions: ["images.blockpy"],
-    constructor: ImageEditorView,
-    template: IMAGE_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/index.html b/coverage/lcov-report/src/editor/index.html deleted file mode 100644 index eba3cfbf1..000000000 --- a/coverage/lcov-report/src/editor/index.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - Code coverage report for src/editor - - - - - - - - - -
-
-

All files src/editor

-
- -
- 7.06% - Statements - 37/524 -
- - -
- 1.28% - Branches - 2/156 -
- - -
- 4.41% - Functions - 6/136 -
- - -
- 6.86% - Lines - 35/510 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
abstract_editor.js -
-
0%0/440%0/40%0/130%0/44
assignment_settings.js -
-
22.95%14/6111.11%2/1831.25%5/1622.22%12/54
default_header.js -
-
100%1/1100%0/0100%0/0100%1/1
images.js -
-
4.54%2/440%0/170%0/154.54%2/44
json.js -
-
6.06%2/330%0/100%0/76.06%2/33
markdown.js -
-
7.4%2/270%0/60%0/57.4%2/27
python.js -
-
2.56%4/1560%0/592.63%1/382.59%4/154
quiz.js -
-
6.06%2/330%0/100%0/76.06%2/33
sample_submissions.js -
-
7.4%4/540%0/100%0/208.16%4/49
tags.js -
-
66.66%2/3100%0/00%0/166.66%2/3
text.js -
-
6.06%2/330%0/100%0/76.06%2/33
toolbox.js -
-
5.71%2/350%0/120%0/75.71%2/35
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/json.js.html b/coverage/lcov-report/src/editor/json.js.html deleted file mode 100644 index 2f4cd622c..000000000 --- a/coverage/lcov-report/src/editor/json.js.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - Code coverage report for src/editor/json.js - - - - - - - - - -
-
-

All files / src/editor json.js

-
- -
- 6.06% - Statements - 2/33 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/7 -
- - -
- 6.06% - Lines - 2/33 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
-import {default_header} from "./default_header";
- 
-export const JSON_EDITOR_HTML = `
-    ${default_header}
-     <div>
-        <textarea class="blockpy-editor-json"></textarea>
-    </div>
-`;
- 
-class JsonEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-json")[0], {
-            showCursorWhenSelecting: true,
-            lineNumbers: true,
-            firstLineNumber: 1,
-            indentUnit: 4,
-            tabSize: 4,
-            indentWithTabs: false,
-            mode: "json",
-            extraKeys: {
-                "Tab": "indentMore",
-                "Shift-Tab": "indentLess",
-                "Esc": function (cm) {
-                    if (cm.getOption("fullScreen")) {
-                        cm.setOption("fullScreen", false);
-                    } else {
-                        cm.display.input.blur();
-                    }
-                },
-                "F11": function (cm) {
-                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
-                }
-            }
-        });
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.codeMirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            // Delay so that everything is rendered
-            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
-        }
-        // TODO: update dynamically when changing instructor status
-        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
- 
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.codeMirror.setValue(newContents);
-            this.codeMirror.refresh();
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirror.getValue());
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.codeMirror.off("change", this.currentListener);
-        this.codeMirror.setOption("readOnly", false);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const JsonEditor = {
-    name: "JSON",
-    extensions: [".json"],
-    constructor: JsonEditorView,
-    template: JSON_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/markdown.js.html b/coverage/lcov-report/src/editor/markdown.js.html deleted file mode 100644 index e49906f79..000000000 --- a/coverage/lcov-report/src/editor/markdown.js.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - Code coverage report for src/editor/markdown.js - - - - - - - - - -
-
-

All files / src/editor markdown.js

-
- -
- 7.4% - Statements - 2/27 -
- - -
- 0% - Branches - 0/6 -
- - -
- 0% - Functions - 0/5 -
- - -
- 7.4% - Lines - 2/27 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
-import {default_header} from "./default_header";
- 
-export const MARKDOWN_EDITOR_HTML = `
-    ${default_header}
-    <textarea class="blockpy-editor-markdown"></textarea>    
-`;
- 
- 
-class MarkdownEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.mde = new EasyMDE({
-            element: tag.find(".blockpy-editor-markdown")[0],
-            autoDownloadFontAwesome: false,
-            forceSync: true,
-            minHeight: "300px",
-            //scrollbarStyle: "native",
-            // TODO: imageUploadFunction
-            renderingConfig: {
-                codeSyntaxHighlighting: true,
-            },
-            indentWithTabs: false,
-            tabSize: 4,
-        });
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.mde.codemirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            // Delay so that everything is rendered
-            setTimeout(this.mde.codemirror.refresh.bind(this.mde.codemirror), 1);
-        }
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.mde.value(newContents);
-            this.mde.codemirror.refresh();
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.mde.value());
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.mde.codemirror.off("change", this.currentListener);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const MarkdownEditor = {
-    name: "Markdown",
-    extensions: [".md"],
-    constructor: MarkdownEditorView,
-    template: MARKDOWN_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/python.js.html b/coverage/lcov-report/src/editor/python.js.html deleted file mode 100644 index 609f2ee9b..000000000 --- a/coverage/lcov-report/src/editor/python.js.html +++ /dev/null @@ -1,1486 +0,0 @@ - - - - - - Code coverage report for src/editor/python.js - - - - - - - - - -
-
-

All files / src/editor python.js

-
- -
- 2.56% - Statements - 4/156 -
- - -
- 0% - Branches - 0/59 -
- - -
- 2.63% - Functions - 1/38 -
- - -
- 2.59% - Lines - 4/154 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -12x -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
/**
- * TODO: rename files, manual save, tags, sample_submissions, on_eval, non-builtin files
- * TODO: import data, history, run, url_data, assignment_settings, parsons_mode
- * TODO: delete becomes "clear" for instructor files
- */
- 
-/**
- *
- * @enum {str}
- */
-import {AbstractEditor, sluggify} from "./abstract_editor";
-import {HISTORY_TOOLBAR_HTML} from "../history";
-import {SecondRowSecondPanelOptions} from "../interface";
- 
-export let DisplayModes = {
-    BLOCK: "block",
-    SPLIT: "split",
-    TEXT: "text"
-};
- 
-function makeTab(name, icon, mode) {
-    return `<label class="btn btn-outline-secondary blockpy-mode-set-blocks"
-                data-bind="css: {active: display.pythonMode() === '${mode}'},
-                           click: ui.editors.python.updateMode.bind($data, '${mode}')">
-                <span class='fas fa-${icon}'></span>
-                <input type="radio" name="blockpy-mode-set" autocomplete="off" checked> ${name}
-            </label>`;
-}
- 
-export const PYTHON_EDITOR_HTML = `
- 
-    <div class="blockpy-python-toolbar col-md-12 btn-toolbar"
-         role="toolbar" aria-label="Python Toolbar">
- 
-         <div class="btn-group mr-2" role="group" aria-label="Run Group">         
-            <button type="button" class="btn blockpy-run notransition"
-                data-bind="click: ui.execute.run,
-                            css: {'blockpy-run-running': ui.execute.isRunning}">
-                <span class="fas fa-play"></span> <span data-bind="text: ui.execute.runLabel"></span>
-             </button>
-         </div>
-         
-         <div class="btn-group btn-group-toggle mr-2" data-toggle="buttons">
-            <!-- ko if: $root.assignment.settings.enableBlocks() -->
-            ${makeTab("Blocks", "th-large", DisplayModes.BLOCK)}
-            ${makeTab("Split", "columns", DisplayModes.SPLIT)}
-            ${makeTab("Text", "align-left", DisplayModes.TEXT)}
-            <!-- /ko -->
-         </div>
- 
-         <div class="btn-group mr-2" role="group" aria-label="Reset Group">
-             <button type="button" class="btn btn-outline-secondary"
-                 data-bind="click: ui.editors.reset">
-                 <span class="fas fa-sync"></span> Reset
-              </button>
-         </div>
-         
-         <!-- ko if: !assignment.settings.hideImportDatasetsButton() && !ui.smallLayout()-->
-         <div class="btn-group mr-2" role="group" aria-label="Import Group">
-            <button type="button" class="btn btn-outline-secondary"
-                data-bind="click: ui.editors.importDataset">
-                <span class="fas fa-cloud-download-alt"></span> Import datasets
-             </button>
-         </div>
-         <!-- /ko -->
-         
-         <div class="btn-group mr-2" data-bind="hidden: ui.smallLayout">
-                <label class="btn btn-outline-secondary">
-                    <span class="fas fa-file-upload"></span> Upload
-                    <input class="blockpy-toolbar-upload" type="file"
-                        hidden
-                        data-bind="event: {change: ui.editors.upload}">
-                 </label>
- 
-                <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
-                    data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                    <span class="caret"></span>
-                    <span class="sr-only">Toggle Dropdown</span>
-                </button>
-                
-                <div class="dropdown-menu dropdown-menu-right">
-                    <a class='dropdown-item blockpy-toolbar-download'
-                        data-bind="click: ui.editors.download">
-                    <span class='fas fa-download'></span> Download
-                    </a>
-                </div>
-            </div>
-         
-         <div class="btn-group mr-2" role="group" aria-label="History Group" data-bind="hidden: ui.smallLayout">
-            <button type="button" class="btn btn-outline-secondary"
-                aria-pressed="false"
-                data-bind="click: ui.editors.python.toggleHistoryMode,
-                           enable: ui.editors.python.isHistoryAvailable,
-                           css: { active: display.historyMode },
-                           attr: { 'aria-pressed': display.historyMode }">
-                <span class="fas fa-history"></span> History
-             </button>
-         </div>
-         
-         <!-- Fully functional, but a little too.. Invasive 
-         <div class="btn-group mr-2" role="group" aria-label="Fullscreen Group"
-            data-bind="visible: display.pythonMode() === 'text'">
-            <button type="button" class="btn btn-outline-secondary"
-                data-bind="click: ui.editors.python.fullscreen">
-                <span class="fas fa-expand-arrows-alt"></span> Fullscreen
-             </button>
-         </div>
-         -->
-         
-         <div class="btn-group mr-2" role="group" aria-label="Save Group"
-            data-bind="visible: ui.editors.canSave">
-            <button type="button" class="btn btn-outline-secondary">
-                <span class="fas fa-save"></span> Save
-             </button>
-         </div>
-         
-         <div class="btn-group mr-2" role="group" aria-label="Delete Group"
-            data-bind="visible: ui.editors.canDelete">
-            <button type="button" class="btn btn-outline-secondary",
-                data-bind="click: ui.files.delete">
-                <span class="fas fa-trash"></span> Delete
-             </button>
-         </div>
-         
-         <div class="btn-group mr-2">
-                <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split"
-                    data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                    <span class="fas fa-ellipsis-v"></span>
-                    <span class="sr-only">Toggle Extra Features</span>
-                </button>
-                
-                <div class="dropdown-menu dropdown-menu-right">
-                    <a class='dropdown-item blockpy-toolbar-run-quietly notransition' role="button"
-                        href=""
-                        data-bind="click: ui.execute.runQuietly,
-                                    css: {'blockpy-run-running': ui.execute.isRunning}">
-                        <span class="fas fa-comment-slash"></span> <span data-bind="text: ui.execute.runQuietlyLabel"></span>
-                    </a>
-                </div>
-            </div>
-         
-         <!--<div class="btn-group mr-2" role="group" aria-label="Rename Group"
-            data-bind="visible: ui.editors.canRename">
-             <button type="button" class="btn btn-outline-secondary">
-                <span class="fas fa-file-signature"></span> Rename
-             </button>
-         </div>-->
-         
-    </div>
-    
-    ${HISTORY_TOOLBAR_HTML}
- 
- 
-    <div class="blockpy-python-blockmirror"
-        data-bind="hidden: ui.menu.isSubmitted">
-    </div>
-`;
- 
- 
- 
-function convertIpynbToPython(code) {
-    let ipynb = JSON.parse(code);
-    let isUsable = function(cell) {
-        if (cell.cell_type === "code") {
-            return cell.source.length > 0 &&
-                !cell.source[0].startsWith("%");
-        } else {
-            return cell.cell_type === "markdown" ||
-                cell.cell_type === "raw";
-        }
-    };
-    let makePython = function(cell) {
-        if (cell.cell_type === "code") {
-            return cell.source.join("\n");
-        } else if (cell.cell_type === "markdown" ||
-            cell.cell_type === "raw") {
-            return "'''"+cell.source.join("\n")+"'''";
-        }
-    };
-    return ipynb.cells.filter(isUsable).map(makePython).join("\n");
-}
- 
-class PythonEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag.find(".blockpy-python-blockmirror"));
-        Blockly.setParentContainer(main.model.configuration.container[0]);
-        this.bm = new BlockMirror({
-            "container": this.tag[0],
-            "run": main.components.engine.run.bind(main.components.engine),
-            "skipSkulpt": true,
-            "blocklyMediaPath": main.model.configuration.blocklyPath,
-            "toolbox": main.model.assignment.settings.toolbox(),
-            "imageMode": true,
-            imageDownloadHook: (oldUrl) => {
-                return oldUrl;
-            },
-            imageUploadHook: (blob) => {
-                //const uuid = window.URL.createObjectURL(new Blob([])).substring(31);
-                return new Promise((resolve, reject) => {
-                    const submissionId = main.model.submission.id();
-                    main.components.server.uploadFile("submission", submissionId, blob.name, blob, (response) => {
-                        resolve(JSON.stringify(response.endpoint));
-                        //resolve(JSON.stringify(main.model.configuration.urls["downloadFile"] + `?placement=submission&directory=${submissionId}&filename=${blob.name}`));
-                    });
-                    //return Promise.resolve("Image("+JSON.stringify(URL.createObjectURL(blob))+")");
-                    //return Promise.resolve(JSON.stringify(URL.createObjectURL(blob)));
-                });
-            },
-            imageLiteralHook: (oldUrl) => {
-                //return `Image("${oldUrl}")`;
-                return `"${oldUrl}"`;
-            },
-            //'height': '2000px'
-        });
-        // TODO: Prevent INS and OVR mode (... this.bm.textEditor.codeMirror.
- 
-        this.dirty = false;
-        this.readOnly = false;
-        this.makeSubscriptions();
-        this.lineErrorSubscription = null;
-        this.lineUncoveredSubscription = null;
-        this.lineTraceSubscription = null;
-        this.oldPythonMode = this.main.model.display.pythonMode();
- 
-        this.makePerAssignmentSubscriptions();
-    }
- 
-    configureExtraBlockly() {
-        this.bm.blockEditor.workspace.configureContextMenu = (options) => {
-            options.push({
-                enabled: true,
-                text: "Screenshot",
-                callback: () => this.main.components.dialog.SCREENSHOT_BLOCKS
-            });
-        };
-    }
- 
-    enter(newFilename, oldEditor) {
-        let oldFilename = this.filename;
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
- 
-        if (newFilename !== "answer.py") {
-            if (oldFilename === "answer.py") {
-                this.oldPythonMode = this.main.model.display.pythonMode();
-            }
-            this.main.model.display.pythonMode(DisplayModes.TEXT);
-        } else {
-            this.main.model.display.pythonMode(this.oldPythonMode);
-        }
- 
-        this.updateEditor(this.file.handle());
- 
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
- 
-        // Notify relevant file of changes to BM
-        this.currentBMListener = this.updateHandle.bind(this);
-        this.bm.addChangeListener(this.currentBMListener);
- 
-        if (newFilename !== "answer.py") {
-            this.bm.isParsons = () => false;
-        } else {
-            this.bm.isParsons = this.main.model.assignment.settings.isParsons;
- 
-            this.lineErrorSubscription = this.main.model.execution.feedback.linesError.subscribe((lines) =>{
-                return this.bm.setHighlightedLines(lines, "editor-error-line");
-            });
-            this.lineUncoveredSubscription = this.main.model.execution.feedback.linesUncovered.subscribe((lines) =>
-                this.bm.setHighlightedLines(lines, "editor-uncovered-line")
-            );
- 
-            this.lineTraceSubscription = this.main.model.ui.trace.highlightedLine.subscribe((lines) => {
-                this.bm.clearHighlightedLines("editor-traced-line");
-                this.bm.setHighlightedLines(lines, "editor-traced-line");
-            });
-        }
- 
- 
-        //this.bm.blockEditor.workspace.render();
-        //this.bm.refresh();
-        // TODO: Figure out why this doesn't end up looking right (go to a different editor, come back, and it'll be squished)
-        //this.bm.refresh();
-        setTimeout(() => this.bm.refresh(), 0);
-    }
- 
-    updateEditor(newContents) {
-        if (newContents === undefined) {
-            if (this.file !== null) {
-                newContents = this.file.handle();
-            } else {
-                // Doesn't matter, file was already shut down.
-                newContents = "";
-            }
-        } else if (newContents === null) {
-            // We're closing this file
-            this.main.components.fileSystem.deleteFileLocally_(this.filename);
-            return;
-        }
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.bm.setCode(newContents);
-            // Delay so that everything is rendered
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.bm.clearHighlightedLines();
- 
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            if (!this.main.model.display.historyMode()) {
-                this.file.handle(this.bm.getCode());
-            }
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.dirty = false;
-        this.currentSubscription.dispose();
-        this.bm.removeChangeListener(this.currentBMListener);
-        if (this.main.model.display.historyMode()) {
-            this.main.model.ui.editors.python.turnOffHistoryMode();
-        }
-        this.clearLineSubscriptions();
-        super.exit(newFilename, oldEditor);
-    }
- 
-    clearLineSubscriptions() {
-        this.bm.clearHighlightedLines();
-        if (this.lineErrorSubscription) {
-            this.lineErrorSubscription.dispose();
-            this.lineErrorSubscription = null;
-        }
-        if (this.lineUncoveredSubscription) {
-            this.lineUncoveredSubscription.dispose();
-            this.lineUncoveredSubscription = null;
-        }
-        if (this.lineTraceSubscription) {
-            this.lineTraceSubscription.dispose();
-            this.lineTraceSubscription = null;
-        }
-    }
- 
-    makeSubscriptions() {
-        this.bm.setMode(this.main.model.display.pythonMode());
-        this.main.model.display.pythonMode.subscribe(mode => {
-            this.bm.setMode(mode);
-        });
-        this.main.model.assignment.settings.enableBlocks.subscribe(enabled => {
-            if (!enabled) {
-                this.bm.setMode(DisplayModes.TEXT);
-            } else {
-                this.bm.setMode(this.main.model.display.pythonMode());
-            }
-        });
-        this.main.model.assignment.settings.toolbox.subscribe(this.reloadToolbox.bind(this));
-        this.main.model.assignment.settings.enableImages.subscribe(imageMode => {
-            this.bm.setImageMode(imageMode);
-        });
- 
-        // Small Layout Stuff
-        this.oldHeight = null;
-        if (this.main.model.ui.smallLayout()) {
-            this.useSmallLayout();
-        }
-        this.main.model.ui.smallLayout.subscribe(useSmallLayout => {
-            if (useSmallLayout) {
-                this.useSmallLayout();
-            } else if (this.oldHeight !== null) {
-                this.bm.configuration.height = this.oldHeight;
-                this.bm.textEditor.resizeResponsively();
-                this.oldHeight = null;
-            }
-        });
-    }
- 
-    useSmallLayout() {
-        this.bm.textEditor.updateGutter({indentSidebar: false});
-        this.oldHeight = this.bm.configuration.height;
-        this.bm.configuration.height = 300; // TODO: Parameterize this
-        this.bm.textEditor.resizeResponsively();
-    }
- 
-    reloadToolbox(toolbox) {
-        if (toolbox === "custom") {
-            let customToolbox = this.main.components.fileSystem.getFile("?toolbox.blockpy");
-            if (customToolbox == null) {
-                toolbox = "empty";
-            } else {
-                try {
-                    toolbox = JSON.parse(customToolbox.handle());
-                } catch (e) {
-                    console.error(e); // TODO: Improve error message for instructor
-                    toolbox = "minimal";
-                }
-            }
-        }
-        this.bm.configuration.toolbox = toolbox;
-        // TODO: Handle invalid toolbox better
-        try {
-            this.bm.blockEditor.remakeToolbox();
-        } catch (e) {
-            console.error(e);
-            this.bm.configuration.toolbox = "empty";
-            this.bm.blockEditor.remakeToolbox();
-        }
-    }
- 
-    makePerAssignmentSubscriptions() {
-        this.main.model.display.instructor.subscribe((changed) => {
-            this.setReadOnly(this.decideIfNotEditable());
-        });
-        this.main.model.assignment.settings.onlyUploads.subscribe((changed) => {
-            this.setReadOnly(this.decideIfNotEditable());
-        });
-        this.main.model.configuration.partId.subscribe((changed) => {
-            // TODO: Handle part id changing after everything is loaded
-        });
-    }
- 
-    decideIfNotEditable() {
-        let model = this.main.model;
-        return model.display.historyMode() || (
-            model.assignment.settings.onlyUploads() && !model.display.instructor()
-        );
-    }
- 
-    setReadOnly(isReadOnly) {
-        this.readOnly = isReadOnly;
-        this.bm.setReadOnly(isReadOnly);
-    }
- 
-    uploadFile(event) {
-        let filename = event.target.fileName;
-        let code = event.target.result;
-        if (filename.endsWith(".ipynb")) {
-            code = convertIpynbToPython(code);
-        }
-        this.main.components.server.logEvent("X-File.Upload", "", "", code, this.filename);
-        this.file.handle(code);
-        this.main.components.engine.run();
-        // TODO: Run code
-    }
- 
-    downloadFile() {
-        let result = super.downloadFile();
-        if (result.name === "answer" && result.extension === ".py") {
-            result.name = sluggify(this.main.model.assignment.name());
-        }
-        result.mimetype = "text/x-python";
-        this.main.components.server.logEvent("X-File.Download", "", "", "", result.name);
-        return result;
-    }
- 
-}
- 
-export const PythonEditor = {
-    name: "Python",
-    extensions: [".py", ".reading"],
-    constructor: PythonEditorView,
-    template: PYTHON_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/quiz.js.html b/coverage/lcov-report/src/editor/quiz.js.html deleted file mode 100644 index 1d5178a22..000000000 --- a/coverage/lcov-report/src/editor/quiz.js.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - Code coverage report for src/editor/quiz.js - - - - - - - - - -
-
-

All files / src/editor quiz.js

-
- -
- 6.06% - Statements - 2/33 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/7 -
- - -
- 6.06% - Lines - 2/33 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
- 
-export const QUIZ_EDITOR_HTML = `
-    <div>
-    <textarea class="blockpy-editor-quiz"></textarea>
-    </div>
-`;
- 
-class QuizEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-quiz")[0], {
-            showCursorWhenSelecting: true,
-            lineNumbers: true,
-            firstLineNumber: 1,
-            indentUnit: 4,
-            tabSize: 4,
-            indentWithTabs: false,
-            extraKeys: {
-                "Tab": "indentMore",
-                "Shift-Tab": "indentLess",
-                "Esc": function (cm) {
-                    if (cm.getOption("fullScreen")) {
-                        cm.setOption("fullScreen", false);
-                    } else {
-                        cm.display.input.blur();
-                    }
-                },
-                "F11": function (cm) {
-                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
-                }
-            }
-        });
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.codeMirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            // Delay so that everything is rendered
-            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
-        }
-        // TODO: update dynamically when changing instructor status
-        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.codeMirror.setValue(newContents);
-            this.codeMirror.refresh();
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirror.getValue());
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.codeMirror.off("change", this.currentListener);
-        this.codeMirror.setOption("readOnly", false);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const QuizEditor = {
-    name: "Quiz",
-    extensions: [".quiz"],
-    constructor: QuizEditorView,
-    template: QUIZ_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/sample_submissions.js.html b/coverage/lcov-report/src/editor/sample_submissions.js.html deleted file mode 100644 index 88c868f77..000000000 --- a/coverage/lcov-report/src/editor/sample_submissions.js.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - Code coverage report for src/editor/sample_submissions.js - - - - - - - - - -
-
-

All files / src/editor sample_submissions.js

-
- -
- 7.4% - Statements - 4/54 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/20 -
- - -
- 8.16% - Lines - 4/49 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  - 
/**
- * Panel for editing the set of Sample Submissions.
- * These are not provided at all to students without the Grader role.
- */
- 
-import {AbstractEditor} from "./abstract_editor";
- 
-export const SubmissionStatuses = {
-    UNKNOWN: "unknown",
-    PASSED: "passed",
-    FAILED: "failed",
-    ERROR: "error",
-    SKIPPED: "skipped"
-};
- 
-export class SampleSubmission {
-    constructor(name, status, code) {
-        this.name = name;
-        this.status = status;
-        this.code = code;
-    }
- 
-    static Blank(count) {
-        return new SampleSubmission("Untitled"+(count || 1),
-                                    SubmissionStatuses.UNKNOWN, "a=0");
-    }
- 
-    static deserialize(data) {
-        return new SampleSubmission(data.name, data.status, data.code);
-    }
- 
-    serialize() {
-        return {
-            name: this.name,
-            status: this.status,
-            code: this.code
-        };
-    }
-}
- 
-export const SAMPLE_SUBMISSIONS_HTML = `
-<div>
-    <div data-bind="foreach: {data: assignment.sampleSubmissions}"
-        class="row">
-        <div class="col-md-6">
-            <span data-bind="text: name"></span>
-            <textarea class="blockpy-editor-sample-submissions-code"
-                data-bind="codeMirrorInstance: code"></textarea>
-        </div>
-        <div class="col-md-6">
-            <span data-bind="text: status"></span>        
-        </div>
-    </div>
-</div>
-`;
- 
-ko.bindingHandlers.codeMirrorInstance = {
-    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
-        // This will be called when the binding is first applied to an element
-        // Set up any initial state, event handlers, etc. here
-        console.log("INIT");
-        let cm = CodeMirror.fromTextArea(element, {
-            showCursorWhenSelecting: true,
-            lineNumbers: true,
-            firstLineNumber: 1,
-            indentUnit: 4,
-            tabSize: 4,
-            indentWithTabs: false,
-            extraKeys: {
-                "Tab": "indentMore",
-                "Shift-Tab": "indentLess",
-                "Esc": function (cm) {
-                    if (cm.getOption("fullScreen")) {
-                        cm.setOption("fullScreen", false);
-                    } else {
-                        cm.display.input.blur();
-                    }
-                },
-                "F11": function (cm) {
-                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
-                }
-            }
-        });
-        cm.setSize("100%", "100px");
-        return cm;
-    },
-    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
-        // This will be called once when the binding is first applied to an element,
-        // and again whenever any observables/computeds that are accessed change
-        // Update the DOM element based on the supplied values here.
-        console.log("UPDATE");
-    }
-};
- 
-class SampleSubmissionsView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.tag = tag;
-        this.codeMirrors = [];
-        this.dirty = false;
-    }
- 
-    buildEditor(newDOM, index, newElement) {
- 
-    }
- 
-    rebuildEditors() {
-        console.log("Rebuilding editors");
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        //this.rebuildEditors();
-        //this.codeMirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            console.log(this.tag);
-            console.log(this.tag.find(".CodeMirror"));
-            console.log(this.tag.find(".CodeMirror").map((i,cm) => console.log("+++", cm.CodeMirror)));
-            this.tag.find(".CodeMirror").map((i, cm) => cm.CodeMirror.refresh());
-            console.log("REFRESH");
-            // Delay so that everything is rendered
-            setTimeout(() => this.tag.find(".CodeMirror").map((i, cm) => cm.CodeMirror.refresh()), 1);
-        }
-        // TODO: update dynamically when changing instructor status
-        //this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            console.log(this.codeMirrors);
-            //this.codeMirrors.each( (i, cm) => cm.setValue(newContents.join("\n")));
-            //this.codeMirrors.each( (i, cm) => cm.refresh());
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirrors.map(cm => cm.getValue()));
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.codeMirrors = [];
-        //this.codeMirrors.off("change", this.currentListener);
-        //this.codeMirror.setOption("readOnly", false);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const SampleSubmissions = {
-    name: "Sample Submissions",
-    extensions: ["!sample_submissions.blockpy"],
-    constructor: SampleSubmissionsView,
-    template: SAMPLE_SUBMISSIONS_HTML
-};
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/tags.js.html b/coverage/lcov-report/src/editor/tags.js.html deleted file mode 100644 index f298287db..000000000 --- a/coverage/lcov-report/src/editor/tags.js.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - Code coverage report for src/editor/tags.js - - - - - - - - - -
-
-

All files / src/editor tags.js

-
- -
- 66.66% - Statements - 2/3 -
- - -
- 100% - Branches - 0/0 -
- - -
- 0% - Functions - 0/1 -
- - -
- 66.66% - Lines - 2/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
- 
-export const TAGS_EDITOR_HTML = `
-Create new
-Import by name
-Find by owner/course/kind
- 
-Tags:
-    Data:
-        Name
-        Kind
-        Level
-        Version
-        Description
-    Controls:
-        Edit
-        Remove
-        Delete 
-`;
- 
-class TagsEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag.find(".blockpy-editor-tags"));
-    }
-}
- 
-export const TagsEditor = {
-    name: "Tags",
-    extensions: ["!tags.blockpy"],
-    constructor: TagsEditorView,
-    template: TAGS_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/text.js.html b/coverage/lcov-report/src/editor/text.js.html deleted file mode 100644 index 186be2a1e..000000000 --- a/coverage/lcov-report/src/editor/text.js.html +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - Code coverage report for src/editor/text.js - - - - - - - - - -
-
-

All files / src/editor text.js

-
- -
- 6.06% - Statements - 2/33 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/7 -
- - -
- 6.06% - Lines - 2/33 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
-import {default_header} from "./default_header";
- 
-export const TEXT_EDITOR_HTML = `
-    ${default_header}
-    <div>
-    <textarea class="blockpy-editor-text"></textarea>
-    </div>
-`;
- 
-class TextEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-text")[0], {
-            showCursorWhenSelecting: true,
-            lineNumbers: true,
-            firstLineNumber: 1,
-            indentUnit: 4,
-            tabSize: 4,
-            indentWithTabs: false,
-            extraKeys: {
-                "Tab": "indentMore",
-                "Shift-Tab": "indentLess",
-                "Esc": function (cm) {
-                    if (cm.getOption("fullScreen")) {
-                        cm.setOption("fullScreen", false);
-                    } else {
-                        cm.display.input.blur();
-                    }
-                },
-                "F11": function (cm) {
-                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
-                }
-            }
-        });
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.codeMirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            // Delay so that everything is rendered
-            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
-        }
-        // TODO: update dynamically when changing instructor status
-        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.codeMirror.setValue(newContents);
-            this.codeMirror.refresh();
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirror.getValue());
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.codeMirror.off("change", this.currentListener);
-        this.codeMirror.setOption("readOnly", false);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const TextEditor = {
-    name: "Text",
-    extensions: [".txt"],
-    constructor: TextEditorView,
-    template: TEXT_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editor/toolbox.js.html b/coverage/lcov-report/src/editor/toolbox.js.html deleted file mode 100644 index d76d25ea4..000000000 --- a/coverage/lcov-report/src/editor/toolbox.js.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - Code coverage report for src/editor/toolbox.js - - - - - - - - - -
-
-

All files / src/editor toolbox.js

-
- -
- 5.71% - Statements - 2/35 -
- - -
- 0% - Branches - 0/12 -
- - -
- 0% - Functions - 0/7 -
- - -
- 5.71% - Lines - 2/35 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  - 
import {AbstractEditor} from "./abstract_editor";
- 
-export const TOOLBOX_EDITOR_HTML = `
-    <div>
-        <div class="col-md-12"
-         role="toolbar" aria-label="Toolbox Toolbar">
-             <div class="btn-group mr-2" role="group" aria-label="Save Group">         
-                <button type="button" class="btn btn-outline-secondary btn-editor-json-save">
-                    <span class="fas fa-save"></span> Save
-                 </button>
-             </div>
-         </div>
-        <textarea class="blockpy-editor-toolbox"></textarea>
-    </div>
-`;
- 
-class ToolboxEditorView extends AbstractEditor {
-    constructor(main, tag) {
-        super(main, tag);
-        this.codeMirror = CodeMirror.fromTextArea(tag.find(".blockpy-editor-toolbox")[0], {
-            showCursorWhenSelecting: true,
-            lineNumbers: true,
-            firstLineNumber: 1,
-            indentUnit: 4,
-            tabSize: 4,
-            indentWithTabs: false,
-            mode: "json",
-            extraKeys: {
-                "Tab": "indentMore",
-                "Shift-Tab": "indentLess",
-                "Esc": function (cm) {
-                    if (cm.getOption("fullScreen")) {
-                        cm.setOption("fullScreen", false);
-                    } else {
-                        cm.display.input.blur();
-                    }
-                },
-                "F11": function (cm) {
-                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
-                }
-            }
-        });
-        this.dirty = false;
-    }
- 
-    enter(newFilename, oldEditor) {
-        super.enter(newFilename, oldEditor);
-        this.dirty = false;
-        this.updateEditor(this.file.handle());
-        // Subscribe to the relevant File
-        this.currentSubscription = this.file.handle.subscribe(this.updateEditor.bind(this));
-        // Notify relevant file of changes to BM
-        this.currentListener = this.updateHandle.bind(this);
-        this.tag.find(".btn-editor-json-save").on("click", this.currentListener);
-        //this.codeMirror.on("change", this.currentListener);
-        if (oldEditor !== this) {
-            // Delay so that everything is rendered
-            setTimeout(this.codeMirror.refresh.bind(this.codeMirror), 1);
-        }
-        // TODO: update dynamically when changing instructor status
-        this.codeMirror.setOption("readOnly", newFilename.startsWith("&") && !this.main.model.display.instructor());
- 
-    }
- 
-    updateEditor(newContents) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.codeMirror.setValue(newContents);
-            this.codeMirror.refresh();
-            this.dirty = false;
-        }
-    }
- 
-    updateHandle(event) {
-        this.dirty = !this.dirty;
-        if (this.dirty) {
-            this.dirty = true;
-            this.file.handle(this.codeMirror.getValue());
-            if (this.main.model.assignment.settings.toolbox() === "custom") {
-                this.main.components.pythonEditor.reloadToolbox("custom");
-            }
-            this.dirty = false;
-        }
-    }
- 
-    exit(newFilename, oldEditor, newEditor) {
-        // Remove subscriber
-        this.currentSubscription.dispose();
-        this.tag.find(".btn-editor-toolbox-save").off("click", this.currentListener);
-        //this.codeMirror.off("change", this.currentListener);
-        this.codeMirror.setOption("readOnly", false);
-        super.exit(newFilename, oldEditor);
-    }
-}
- 
-export const ToolboxEditor = {
-    name: "Toolbox",
-    extensions: ["?toolbox.blockpy"],
-    constructor: ToolboxEditorView,
-    template: TOOLBOX_EDITOR_HTML
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/editors.js.html b/coverage/lcov-report/src/editors.js.html deleted file mode 100644 index 4aa1a254c..000000000 --- a/coverage/lcov-report/src/editors.js.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - Code coverage report for src/editors.js - - - - - - - - - -
-
-

All files / src editors.js

-
- -
- 10.2% - Statements - 5/49 -
- - -
- 0% - Branches - 0/18 -
- - -
- 12.5% - Functions - 1/8 -
- - -
- 8.69% - Lines - 4/46 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -4x -  -4x -  -  -  -  -40x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * Editors are inferred from Filenames.
- *
- * The editor is based on the extension:
- *  .blockpy: Special editor (will be chosen by filename)
- *  .py: Python Editor
- *  .md: Markdown Editor
- *  .txt: Text Editor (also used for other types)
- *  .peml: PEML Editor
- *  .png, .gif, .jpeg, .jpg, .bmp: Image Editor
- *  .json: JSON Editor
- *  .yaml: YAML Editor
- */
- 
-import {PythonEditor} from "./editor/python";
-import {TextEditor} from "./editor/text";
-import {AssigmentType as AssignmentType, AssignmentSettings} from "./editor/assignment_settings";
-import {TagsEditor} from "./editor/tags";
-import {MarkdownEditor} from "./editor/markdown";
-import {SampleSubmissions} from "./editor/sample_submissions";
-import {JsonEditor} from "./editor/json";
-import {ToolboxEditor} from "./editor/toolbox";
-import {QuizEditor} from "./editor/quiz";
-import {ImageEditor} from "./editor/images";
- 
-/**
- * The different possible editors available
- * @enum {string}
- */
-export let EditorsEnum = {
-    SUBMISSION: "submission",
-    ASSIGNMENT: "assignment",
-    INSTRUCTIONS: "instructions",
-    ON_RUN: "on_run",
-    ON_CHANGE: "on_change",
-    ON_EVAL: "on_eval",
-    STARTING_CODE: "starting_code",
-    SAMPLE_SUBMISSIONS: "sample_submissions",
-    INSTRUCTOR_FILE: "instructor_file"
-};
- 
-const SPECIAL_NAMESPACES = ["!", "^", "?", "$"];
- 
-const AVAILABLE_EDITORS = [
-    TextEditor, PythonEditor, AssignmentSettings, TagsEditor, MarkdownEditor,
-    SampleSubmissions, JsonEditor, ToolboxEditor, QuizEditor, ImageEditor
-];
- 
-export const EDITORS_HTML = AVAILABLE_EDITORS.map(editor => `
-<div class="blockpy-panel blockpy-editor" 
-     data-bind="visible: ui.editors.view().name === '${editor.name}', class: ui.editors.width">
-    <div>
-    ${editor.template}
-    </div>
-</div>
-`
-    /*
-    `
-<!-- ko if: ui.editors.view().name === '${editor.name}' -->
-${editor.template}
-<!-- /ko -->`*/
-).join("\n");
- 
-export class Editors {
-    constructor(main, tag) {
-        this.main = main;
-        this.tag = tag;
-        this.current = null;
-        this.registered_ = [];
-        this.extensions_ = {};
-        this.byName_ = {};
-        AVAILABLE_EDITORS.forEach(editor => this.registerEditor(editor));
-        this.main.model.display.filename.subscribe(this.changeEditor, this);
-    }
- 
-    registerEditor(data) {
-        let extensions = data.extensions;
-        let instance = new data.constructor(this.main, this.tag);
-        instance.name = data.name;
-        this.registered_.push(instance);
-        this.byName_[data.name.toLowerCase()] = instance;
-        for (let i=0; i < extensions.length; i++) {
-            this.extensions_[extensions[i]] = instance;
-        }
-    }
- 
-    byName(name) {
-        return this.byName_[name.toLowerCase()];
-    }
- 
-    changeEditor(newFilename) {
-        let oldEditor = this.current;
-        let newEditor = this.getEditor(newFilename, oldEditor);
-        if (oldEditor !== null) {
-            oldEditor.exit(newFilename, oldEditor, newEditor);
-        }
-        this.current = newEditor;
-        this.current.enter(newFilename, oldEditor);
-    }
- 
-    static parseFilename(path) {
-        let space = path.charAt(0);
-        if (SPECIAL_NAMESPACES.indexOf(space) !== -1) {
-            path = path.substr(1);
-        } else {
-            space = "";
-        }
-        let name = path.substr(0, path.lastIndexOf("."));
-        let type = path.substr(path.lastIndexOf("."));
-        return {"space": space, "name": name, "type": type};
-    }
- 
-    getEditor(path) {
-        let {space, name, type} = Editors.parseFilename(path);
-        if (type === ".blockpy" && path in this.extensions_) {
-            return this.extensions_[path];
-        }
-        let assignmentType = this.main.model.assignment.type();
-        if (assignmentType !== AssignmentType.BLOCKPY) {
-            if (name === "answer" && type === ".py") {
-                if ("."+assignmentType in this.extensions_) {
-                    return this.extensions_["."+assignmentType];
-                } else {
-                    console.error("No editor registered for assignment type:", assignmentType);
-                    return this.registered_[0];
-                }
-            }
-        }
-        if (type in this.extensions_) {
-            return this.extensions_[type];
-        } else {
-            return this.registered_[0];
-        }
-        //console.log(this.main.model.assignment.type(), space, name, type);
-    }
- 
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine.js.html b/coverage/lcov-report/src/engine.js.html deleted file mode 100644 index 5c79ca905..000000000 --- a/coverage/lcov-report/src/engine.js.html +++ /dev/null @@ -1,787 +0,0 @@ - - - - - - Code coverage report for src/engine.js - - - - - - - - - -
-
-

All files / src engine.js

-
- -
- 0% - Statements - 0/77 -
- - -
- 0% - Branches - 0/24 -
- - -
- 0% - Functions - 0/20 -
- - -
- 0% - Lines - 0/77 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {StatusState} from "./server";
-import {OnRunConfiguration} from "./engine/on_run";
-import {RunConfiguration} from "./engine/run";
-import {EvalConfiguration} from "./engine/eval";
-import {SampleConfiguration} from "./engine/sample";
-import {OnChangeConfiguration} from "./engine/on_change";
-import {OnEvalConfiguration} from "./engine/on_eval";
-import {OnSampleConfiguration} from "./engine/on_sample";
- 
-/**
- * An object for executing Python code and passing the results along to interested components.
- *
- * Interesting components:
- *  Execution Buffer: Responsible for collecting the trace during program execution.
- *                    This prevents Knockoutjs from updating the editor during execution.
- *
- * @constructor
- * @this {BlockPyEditor}
- * @param {Object} main - The main BlockPy instance
- * @param {HTMLElement} tag - The HTML object this is attached to.
- */
-export class BlockPyEngine {
-    constructor(main) {
-        this.main = main;
-        this.executionModel = this.main.model.execution;
- 
-        this.configurations = {
-            run: new RunConfiguration(main),
-            eval: new EvalConfiguration(main),
-            onRun: new OnRunConfiguration(main),
-            onChange: new OnChangeConfiguration(main),
-            onEval: new OnEvalConfiguration(main)
-        };
- 
-        // Preconfigure skulpt so we can parse
-        Sk.configure(this.configurations.run.getSkulptOptions());
- 
-        // Keeps track of the tracing while the program is executing
-        this.executionBuffer = {};
- 
-        /**
-         * Definable function to be run when execution has fully ended,
-         * whether it succeeds or fails.
-         */
-        this.onExecutionBegin = null;
-        this.onExecutionEnd = null;
-    }
- 
-    /**
-     * Reset reports
-     */
-    resetReports() {
-        let report = this.executionModel.reports;
-        report["verifier"] = {};
-        report["parser"] = {};
-        report["student"] = {};
-        report["instructor"] = {};
-        report["model"] = this.main.model;
-    };
- 
-    resetStudentModel() {
-        let student = this.executionModel.student;
-        student.calls = {};
-        student.currentStep(null);
-        student.currentTraceStep(0);
-        student.lastStep(0);
-        student.currentLine(null);
-        student.currentTraceData.removeAll();
-        student.results = null;
-        student.tracing = [];
-    }
- 
-    resetExecutionBuffer() {
-        this.executionBuffer = {
-            "trace": [],
-            "step": 0,
-            "line": 0,
-        };
-    };
- 
-    /**
-     * Remove all interface aspects of the previous Run.
-     */
-    reset() {
-        // TODO: Clear out any coverage/trace/error highlights in editors
-        // Reset execution in model
-        this.resetStudentModel();
-        // Get reports ready
-        this.resetReports();
-        // Clear out the execution buffer
-        this.resetExecutionBuffer();
-        // Clear out the console of printed stuff
-        this.main.components.console.clear();
-        // Clear out any old feedback
-        this.main.components.feedback.clear();
-    }
- 
-    delayedRun(disableFeedback=false) {
-        //this.main.model.status.onExecution(StatusState.ACTIVE);
-        //$(".blockpy-run").addClass("blockpy-run-running");
-        this.run(disableFeedback);
-        //setTimeout(this.run.bind(this), 1);
-    }
- 
-    stop() {
- 
-    }
- 
-    run(disableFeedback=false) {
-        this.configuration = this.configurations.run.use(this);
-        let execution = this.execute().then(
-            this.configuration.success.bind(this.configuration),
-            this.configuration.failure.bind(this.configuration)
-        );
-        if (!this.main.model.assignment.settings.disableFeedback() && !disableFeedback) {
-            execution.then(() => {
-                this.configuration.provideSecretError();
-                return this.onRun();
-            });
-        } else {
-            execution.then(this.configuration.showErrors.bind(this.configuration));
-        }
-        execution.then(this.configuration.finally.bind(this.configuration));
-    }
- 
-    onRun() {
-        this.configuration = this.configurations.onRun.use(this);
-        this.execute().then(
-            this.configuration.success.bind(this.configuration),
-            this.configuration.failure.bind(this.configuration)
-        )
-            .then(this.configuration.finally.bind(this.configuration))
-            .then(this.executionEnd_.bind(this));
-    }
- 
-    evaluate() {
-        this.main.model.status.onExecution(StatusState.ACTIVE);
-        let evaluationInput = this.main.components.console.evaluate();
-        console.log(evaluationInput);
-        evaluationInput.then((userInput) => {
-            this.configuration = this.configurations.eval.use(this, userInput);
-            let execution = this.execute().then(
-                this.configuration.success.bind(this.configuration),
-                this.configuration.failure.bind(this.configuration)
-            );
-            if (!this.main.model.assignment.settings.disableFeedback() &&
-                this.main.model.assignment.onEval()) {
-                this.configuration.provideSecretError();
-                execution.then(this.onEval.bind(this));
-            } else {
-                execution.then(this.configuration.showErrors.bind(this.configuration))
-                    .then(this.evaluate.bind(this));
-            }
-            execution.then(this.configuration.finally.bind(this.configuration));
-        });
-    }
- 
-    onEval() {
-        this.configuration = this.configurations.onEval.use(this);
-        this.execute().then(
-            this.configuration.success.bind(this.configuration),
-            this.configuration.failure.bind(this.configuration)
-        )
-            .then(this.evaluate.bind(this))
-            .then(this.configuration.finally.bind(this.configuration));
-    }
- 
-    onChange() {
-        this.configuration = this.configurations.onChange.use(this);
-    }
- 
-    execute() {
-        this.main.model.status.onExecution(StatusState.ACTIVE);
-        return Sk.misceval.asyncToPromise(() =>
-            Sk.importMainWithBody(this.configuration.filename, false,
-                                  this.configuration.code, true,
-                                  this.configuration.sysmodules)
-        );
-    }
- 
-    /**
-     * Activated whenever the Python code changes
-     */
-    on_change() {
-        let FILENAME = "on_change";
-        // Skip if the instructor has not defined anything
-        if (!this.main.model.programs[FILENAME]().trim()) {
-            return false;
-        }
-        this.main.model.execution.status("changing");
-        this.main.components.server.saveCode();
-        // On step does not perform parse analysis by default or run student code
-        let engine = this;
-        let feedback = this.main.components.feedback;
-        engine.resetReports();
-        engine.verifyCode();
-        engine.updateParse();
-        engine.runInstructorCode(FILENAME, true, function (module) {
-            if (Sk.executionReports["instructor"]["success"]) {
-                // SUCCESS, SCORE, CATEGORY, LABEL, MESSAGE, DATA, HIDE
-                // TODO: only show under certain circumstances
-                if (!success &&
-                    !(category === "Instructor" && label === "No errors")) {
-                    feedback.presentFeedback(category, label, message, line);
-                }
-                engine.main.components.feedback.presentFeedback(module.$d);
-                engine.main.model.execution.status("complete");
-            }
-        });
-        engine.main.components.server.logEvent("engine", "on_change");
-    };
- 
- 
-    /**
-     * Helper function that will attempt to call the defined onExecutionEnd,
-     * but will do nothing if there is no function defined.
-     */
-    executionEnd_() {
-        if (this.onExecutionEnd !== null) {
-            this.onExecutionEnd();
-        }
-    }
- 
-    /**
-     *
-     */
-    executionBegin_() {
-        if (this.onExecutionBegin !== null) {
-            this.onExecutionBegin();
-        }
-    }
- 
-}
- 
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/configurations.js.html b/coverage/lcov-report/src/engine/configurations.js.html deleted file mode 100644 index 445d20a5b..000000000 --- a/coverage/lcov-report/src/engine/configurations.js.html +++ /dev/null @@ -1,742 +0,0 @@ - - - - - - Code coverage report for src/engine/configurations.js - - - - - - - - - -
-
-

All files / src/engine configurations.js

-
- -
- 1.25% - Statements - 1/80 -
- - -
- 0% - Branches - 0/36 -
- - -
- 0% - Functions - 0/26 -
- - -
- 1.29% - Lines - 1/77 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -2201x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
export const EMPTY_MODULE = "let $builtinmodule = function(mod){ return mod; }";
- 
-/**
- * A container for holding settings of a particular run configuration.
- * This is the root class for all other configurations.
- */
-export class Configuration {
- 
-    constructor(main) {
-        this.main = main;
-        this.filename = null;
-        this.code = null;
-        this.sysmodules = undefined;
-    }
- 
-    use(engine) {
-        // Access point for instructor data
-        this.engine = engine;
-        Sk.executionReports = this.main.model.execution.reports;
-        Sk.console = this.main.components.console;
-        Sk.queuedInput = [];
-        Sk.configure(this.getSkulptOptions());
-        // Set openFile as mechanism to read files
-        Sk.inBrowser = this.openFile.bind(this);
-        // Function to convert filenames to URLs
-        Sk.fileToURL = this.getUrlFromFilename.bind(this);
-        // Proxy requests
-        Sk.requestsGet = (url, data, timeout) => this.openURL(url, data, timeout);
-        // Configure a "do you want to wait? prompt"
-        Sk.timeoutHandler = (timePassed, execLimit) => {
-            if (this.main.model.assignment.settings.disableTimeout()) {
-                return null;
-            }
-            let promptMessage = this.getTimeoutPrompt(timePassed/1000 > 30);
-            let delay = prompt(promptMessage, Sk.execLimit/1000);
-            if (delay !== null || delay==0) {
-                delay = Sk.execLimit + parseInt(delay, 10) * 1000;
-                Sk.execLimit = delay;
-                Sk.execLimitFunction = () =>
-                    this.main.model.assignment.settings.disableTimeout() ? Infinity : delay;
-            }
-            return delay;
-        };
-        // Attach beforeCall
-        Sk.beforeCall = this.beforeCall.bind(this);
-        return this;
-    }
- 
-    getTimeoutPrompt(longTimeout) {
-        if (longTimeout) {
-            return "The program has taken a REALLY long time to run (30 or more seconds). You might want to cancel and check your code. Or, you can add more seconds to wait below.";
-        } else {
-            return "The program is taking a while to run. How many more seconds would you like to wait?";
-        }
-    }
- 
-    getSkulptOptions() {
-        return {
-            __future__: Sk.python3,
-            // import
-            read: this.importFile.bind(this),
-            // open
-            //fileopen: this.openFile.bind(this),
-            // file.write
-            filewrite: this.writeFile.bind(this),
-            // print
-            output: this.print.bind(this),
-            // input
-            inputfun: this.input.bind(this),
-            inputfunTakesPrompt: true,
-            // Media Image Proxy URL
-            imageProxy: this.getImageProxy.bind(this),
-            // TODO: Make this set by the system so we can use our own servers in practice
-            emojiProxy: (part) => `https://twemoji.maxcdn.com/v/13.1.0/svg/${part.toLowerCase()}.svg`,
-            // Whether or not to keep the globals
-            retainGlobals: true
-        };
-    }
- 
-    getUrlFromFilename(filename) {
-        const found = this.main.components.fileSystem.filesToUrls[filename];
-        if (found === undefined) {
-            throw new Sk.builtin.OSError("File not found: " + filename);
-        }
-        return found;
-    }
- 
-    /**
-     * Used to access Skulpt built-ins. This is pretty generic, taken
-     * almost directly from the Skulpt docs.
-     *
-     * @param {String} filename - The python filename (e.g., "os" or "pprint") that will be loaded.
-     * @returns {String} The JavaScript source code of the file (weird, right?)
-     * @throws Will throw an error if the file isn't found.
-     */
-    importFile(filename) {
-        console.warn("Unimplemented method!");
-        // TODO
-    };
- 
-    openURL(url, data, timeout) {
-        //return new Promise((resolve, reject) => {
-        let mockUrlData = this.main.components.fileSystem.getFile("?mock_urls.blockpy");
-        if (mockUrlData == null) {
-            throw (new Sk.builtin.IOError("Cannot access url: URL Data was not made available for this assignment"));
-        }
-        mockUrlData = JSON.parse(mockUrlData.handle());
-        for (let filename in mockUrlData) {
-            if (mockUrlData.hasOwnProperty(filename)) {
-                for (let i=0; i < mockUrlData[filename].length; i+= 1) {
-                    if (mockUrlData[filename][i] === url) {
-                        let fileData = this.main.components.fileSystem.readFile(filename);
-                        return (fileData);
-                    }
-                }
-            }
-        }
-        //reject(new Sk.builtin.IOError("Cannot access url: "+url+" was not made available for this assignment"));
-        throw (new Sk.builtin.IOError("Cannot access url: "+url+" was not made available for this assignment"));
-        //});
-    }
- 
-    openFile() {
-        console.warn("Unimplemented method!");
-        // TODO
-    }
- 
-    writeFile() {
-        console.warn("Unimplemented method!");
-        // TODO
-    }
- 
-    print(value) {
-        this.main.components.console.print(value);
-    }
- 
-    input() {
-        console.warn("Unimplemented method!");
-        // TODO
-    }
- 
-    clearInput() {
-        if (this.main.model.display.clearInputs()) {
-            this.main.model.execution.input([]);
-        }
-        this.main.model.execution.inputIndex(0);
-    }
- 
-    static inputMockFunction() {
-        if (Sk.queuedInput.length) {
-            return Sk.queuedInput.pop();
-        } else {
-            return "";
-        }
-    };
- 
-    getImageProxy(url) {
-        // TODO
-        return url;
-    }
- 
-    step() {
- 
-    }
- 
-    lastStep() {
- 
-    }
- 
-    isForbidden(filename) {
-        return false;
-    }
- 
-    success(module) {
-        throw new Error("Abstract success execution");
-    }
- 
-    failure(error) {
-        throw new Error("Abstract failure execution");
-    }
- 
-    finally(result) {
-        // Force Pygame to stop trapping keyboard events
-        if (this.main.components.console.pygameLine) {
-            this.main.components.console.pygameLine.cleanup();
-            this.main.components.console.pygameLine.stop();
-        }
-    }
- 
-    dummyOutSandbox() {
-        //Sk.builtinFiles.files["src/lib/pedal/sandbox/sandbox.py"] = "class Sandbox: pass\ndef run(): pass\ndef reset(): pass\n";
-    }
- 
-    beforeCall(functionName, posargs, kwargs) {
-        //console.log("TRACKING CALL", functionName, posargs, kwargs);
-        // TODO: Handle fastcall too? Check how that works in Skulpt side
-        let studentModel = this.main.model.execution.reports.student;
-        if (!("calls" in studentModel)) {
-            studentModel.calls = {};
-        }
-        if (!(functionName in studentModel.calls)) {
-            studentModel.calls[functionName] = [];
-        }
-        let args = {};
-        // Get actual parameter names!!
-        for (let i=0; i < posargs.length; i+= 1) {
-            args["__ARG"+i] = posargs[i];
-        }
-        if (kwargs && kwargs[0] != null) {
-            args["__ARGS"] = kwargs[0];
-        }
-        if (kwargs && kwargs[1] != null) {
-            args["__KWARGS"] = kwargs[1];
-        }
-        //console.log(args);
-        studentModel.calls[functionName].push(args);
-    }
-}
- 
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/eval.js.html b/coverage/lcov-report/src/engine/eval.js.html deleted file mode 100644 index 7bfb7e5ec..000000000 --- a/coverage/lcov-report/src/engine/eval.js.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - Code coverage report for src/engine/eval.js - - - - - - - - - -
-
-

All files / src/engine eval.js

-
- -
- 0% - Statements - 0/34 -
- - -
- 100% - Branches - 0/0 -
- - -
- 0% - Functions - 0/8 -
- - -
- 0% - Lines - 0/33 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {StudentConfiguration} from "./student";
-import {StatusState} from "../server";
-import {BlockPyTrace} from "../trace";
- 
-export class EvalConfiguration extends StudentConfiguration {
-    use(engine, code) {
-        // TODO: fix to be currently added line
-        this.main.model.execution.feedback.message("Running...");
-        this.filename = "answer";
-        this.code = "_ = " + code;
-        Sk.afterSingleExecution = null;
-        Sk.beforeCall = null;
- 
-        super.use(engine);
- 
-        Sk.retainGlobals = true;
-        Sk.globals = this.main.model.execution.student.globals();
- 
-        this.main.components.server.logEvent("X-File.Add", "", "", code, "evaluations");
-        this.main.components.server.logEvent("Compile", "", "", this.code, "evaluations");
- 
-        return this;
-    }
- 
-    success(module) {
-        console.log("Eval success");
-        this.main.components.server.logEvent("X-Evaluate.Program", "", "", "", "evaluations");
-        this.main.model.status.onExecution(StatusState.READY);
-        this.main.model.execution.student.globals(Sk.globals);
-        Sk.globals = {};
-        let report = this.main.model.execution.reports;
-        let filename = this.filename;
-        this.main.model.execution.student.results = module;
-        this.main.components.console.printValue(Sk.ffi.remapToJs(module.$d._.$r()));
-        return new Promise((resolve, reject) => {
-            //this.step(module.$d, module.$d,-1, 0, filename + ".py");
-            this.lastStep();
-            report["student"] = {
-                "success": true,
-                "trace": this.engine.executionBuffer.trace,
-                "lines": this.engine.executionBuffer.trace.map(x => x.line),
-                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
-                "results": module,
-                "output": this.main.model.execution.output,
-                "evaluation": this.code,
-                "calls": this.main.model.execution.student.calls,
-                "tracing": []
-            };
-            resolve();
-        });
-    }
- 
-    failure(error) {
-        console.log("Eval failure", error);
-        this.main.model.status.onExecution(StatusState.FAILED);
-        let report = this.main.model.execution.reports;
-        this.main.components.server.logEvent("Compile.Error", "", "", error.toString(), "evaluations");
-        return new Promise((resolve, reject) => {
-            report["student"] = {
-                "success": false,
-                "error": error,
-                "evaluation": this.code,
-                "tracing": []
-            };
-            resolve();
-        });
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/index.html b/coverage/lcov-report/src/engine/index.html deleted file mode 100644 index a3b0adbe8..000000000 --- a/coverage/lcov-report/src/engine/index.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - Code coverage report for src/engine - - - - - - - - - -
-
-

All files src/engine

-
- -
- 1.58% - Statements - 7/443 -
- - -
- 0% - Branches - 0/141 -
- - -
- 0% - Functions - 0/92 -
- - -
- 1.61% - Lines - 7/433 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
configurations.js -
-
1.25%1/800%0/360%0/261.29%1/77
eval.js -
-
0%0/34100%0/00%0/80%0/33
instructor.js -
-
2.59%2/770%0/360%0/172.59%2/77
on_change.js -
-
0%0/5100%0/00%0/10%0/5
on_eval.js -
-
2.08%1/480%0/120%0/42.08%1/48
on_run.js -
-
5.76%3/520%0/120%0/55.76%3/52
on_sample.js -
-
0%0/4100%0/00%0/10%0/4
run.js -
-
0%0/560%0/100%0/120%0/54
sample.js -
-
0%0/4100%0/00%0/10%0/4
student.js -
-
0%0/830%0/350%0/170%0/79
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/instructor.js.html b/coverage/lcov-report/src/engine/instructor.js.html deleted file mode 100644 index 04bff3f9a..000000000 --- a/coverage/lcov-report/src/engine/instructor.js.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - Code coverage report for src/engine/instructor.js - - - - - - - - - -
-
-

All files / src/engine instructor.js

-
- -
- 2.59% - Statements - 2/77 -
- - -
- 0% - Branches - 0/36 -
- - -
- 0% - Functions - 0/17 -
- - -
- 2.59% - Lines - 2/77 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170  -  -  -  -  -  -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {Configuration, EMPTY_MODULE} from "./configurations.js";
-import {$sk_mod_instructor} from "../skulpt_modules/sk_mod_instructor";
-import {$sk_mod_coverage} from "../skulpt_modules/coverage";
-import {$pedal_tracer} from "../skulpt_modules/pedal_tracer";
-import {chompSpecialFile} from "../files";
- 
-const UTILITY_MODULE_CODE = "var $builtinmodule = " + $sk_mod_instructor.toString();
-const COVERAGE_MODULE_CODE = $sk_mod_coverage;
- 
-export class InstructorConfiguration extends Configuration {
-    use(engine) {
-        super.use(engine);
-        // Instructors get 4 seconds
-        Sk.execLimitFunction = () =>
-            this.main.model.assignment.settings.disableTimeout() ? Infinity : 7000;
-        Sk.execLimit = Sk.execLimitFunction();
-        // Stepper! Executed after every statement.
-        Sk.afterSingleExecution = null; // 10 *1000
-        // Mute everything
-        this.main.model.display.mutePrinter(true);
-        // Disable input box
-        Sk.queuedInput = [];
-        // TODO Sk.inputfun = BlockPyEngine.inputMockFunction;
-        // TODO: Allow input function to disable the timer, somehow
-        // Disable the beforeCall checker unless specifically requested
-        Sk.beforeCallBackup = Sk.beforeCall;
-        Sk.beforeCall = null;
-        // Enable utility mode
-        Sk.builtinFiles.files["src/lib/utility/__init__.js"] = UTILITY_MODULE_CODE;
-        Sk.builtinFiles.files["src/lib/coverage.py"] = COVERAGE_MODULE_CODE;
-        // TODO: Check if this needs to be optimized
-        //const PEDAL_TRACER_MODULE_CODE = Sk.compile($pedal_tracer, "tracer.py", "exec", true, false);
-        Sk.builtinFiles.files["src/lib/pedal/sandbox/tracer.py"] = $pedal_tracer;
-        delete Sk.builtinFiles.files["src/lib/pedal/sandbox/tracer.js"];
-        // TODO: Mock Pedal's tracer module with the appropriate version
-        Sk.builtinFiles.files["./_instructor/__init__.js"] = EMPTY_MODULE;
-        // Reuse any existing sysmodules that we previously found, but not __main__ modules
-        this.sysmodules = this.clearExistingStudentImports();
-        // Horrific hack, to prevent Tifa from caching a bad version of the students' import
-        Sk.clearExistingStudentImports = this.clearExistingStudentImports;
-        return this;
-    }
- 
-    print(value) {
-        super.print(value);
-        console.info("Printed:", value);
-    }
- 
-    clearExistingStudentImports() {
-        let sysmodules = this.main.model.execution.instructor.sysmodules;
-        // Remove any existing __main__ modules
-        if (sysmodules !== undefined) {
-            for (let filename of this.getAllFilenames()) {
-                let skFilename = new Sk.builtin.str(filename);
-                /*if (sysmodules.quick$lookup(skFilename)) {
-                    sysmodules.pop$item(skFilename);
-                }*/
-                sysmodules.pop$item(skFilename);
-            }
-        }
-        return sysmodules;
-    }
- 
-    getAllStudentFiles() {
-        const files = {
-            "answer.py": this.main.model.ui.files.getStudentCode()
-        };
-        // Skip special instructor files
-        this.main.model.assignment.extraInstructorFiles().forEach(file => {
-            if (!("!^$#".includes(file.filename()[0]))) {
-                files[chompSpecialFile(file.filename())] = file.contents();
-            }
-        });
-        // Include normal student extra files
-        this.main.model.submission.extraFiles().forEach(file => {
-            files[file.filename()] = file.contents();
-        });
-        return files;
-    }
- 
-    getAllFilenames() {
-        function clean(filename) {
-            filename = chompSpecialFile(filename);
-            if (filename.endsWith(".py")) {
-                filename = filename.slice(0, -3);
-            }
-            return filename;
-        }
-        return [
-            "__main__",
-            "_instructor",
-            ...this.main.model.assignment.extraInstructorFiles().map(file => "_instructor." + clean(file.filename())),
-            ...this.main.model.submission.extraFiles().map(file => clean(file.filename())),
-        ];
-    }
- 
-    getTimeoutPrompt(longTimeout) {
-        if (longTimeout) {
-            return "The instructor code has taken a REALLY long time to check your code (30 or more seconds). You might want to cancel and check your code (or get help from an instructor). Or, you can add more seconds to wait below.";
-        } else {
-            return "The instructor code is taking a little while to check your code; it might just need a little more time. How many more seconds would you like to wait?";
-        }
-    }
- 
-    openFile(filename) {
-        let found = this.main.components.fileSystem.searchForFile(filename, false);
-        if (found === undefined) {
-            throw new Sk.builtin.OSError("File not found: "+filename);
-        } else {
-            return found.contents();
-        }
-    }
- 
-    openURL(url, data, timeout) {
-        // TODO: Figure out why parameters are misaligned..?
-        if (data.v === "OPENAI") {
-            return this.main.components.server.openaiProxy(timeout.v);
-        } else {
-            return super.openURL(url, data, timeout);
-        }
-    }
- 
-    importFile(filename) {
-        if (filename === "./answer.py") {
-            return this.main.model.submission.code();
-        } else if (filename === "./_instructor/on_run.py") {
-            return this.main.model.assignment.onRun();
-        } else if (filename === "./_instructor/on_eval.py") {
-            return this.main.model.assignment.onEval() || "";
-        } else if (filename === "./_instructor/__init__.js") {
-            return EMPTY_MODULE;
-        } else if (Sk.builtinFiles === undefined) {
-            throw new Sk.builtin.OSError("Built-in modules not accessible.");
-        } else if (Sk.builtinFiles["files"][filename] !== undefined) {
-            return Sk.builtinFiles["files"][filename];
-        } else {
-            let found = this.main.components.fileSystem.searchForFile(filename, false);
-            if (found === undefined) {
-                throw new Sk.builtin.OSError("File not found: '"+filename + "'");
-            } else {
-                return found.contents();
-            }
-        }
-    };
- 
-    input(promptMessage) {
-        //return "ApplePie";
-        console.log(">>>", this.main.model.execution.input(), this.main.model.execution.inputIndex());
-        if (this.main.model.execution.inputIndex() < this.main.model.execution.input().length) {
-            let inputIndex = this.main.model.execution.inputIndex();
-            let nextInput = this.main.model.execution.input()[inputIndex];
-            this.main.model.execution.inputIndex(inputIndex+1);
-            return nextInput;
-        } else {
-            return "ApplePie";
-        }
-        /*return new Promise((resolve) => {
-            resolve(Sk.queuedInput.pop());
-        });*/
-    }
- 
-    beforeCall(functionName, posargs, kwargs) {
-        let studentModel = this.main.model.execution.reports.student;
-        //console.log("HEY INSTRUCTOR CALL", functionName, studentModel.tracing);
-        if (studentModel.tracing && studentModel.tracing.length) {
-            super.beforeCall(functionName, posargs, kwargs);
-        }
-    }
- 
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_change.js.html b/coverage/lcov-report/src/engine/on_change.js.html deleted file mode 100644 index 046468217..000000000 --- a/coverage/lcov-report/src/engine/on_change.js.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - Code coverage report for src/engine/on_change.js - - - - - - - - - -
-
-

All files / src/engine on_change.js

-
- -
- 0% - Statements - 0/5 -
- - -
- 100% - Branches - 0/0 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/5 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13  -  -  -  -  -  -  -  -  -  -  -  - 
import {InstructorConfiguration} from "./instructor";
- 
-export class OnChangeConfiguration extends InstructorConfiguration {
-    use(engine) {
-        super.use(engine);
-        this.filename = "on_change.py";
-        this.code = this.main.model.assignment.onChange();
- 
-        clearTimeout(this.main.model.display.triggerOnChange);
- 
-        return this;
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_eval.js.html b/coverage/lcov-report/src/engine/on_eval.js.html deleted file mode 100644 index 6444401f6..000000000 --- a/coverage/lcov-report/src/engine/on_eval.js.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - Code coverage report for src/engine/on_eval.js - - - - - - - - - -
-
-

All files / src/engine on_eval.js

-
- -
- 2.08% - Statements - 1/48 -
- - -
- 0% - Branches - 0/12 -
- - -
- 0% - Functions - 0/4 -
- - -
- 2.08% - Lines - 1/48 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {InstructorConfiguration} from "./instructor";
-import {StatusState} from "../server";
-import {findActualInstructorOffset, INSTRUCTOR_MARKER, NEW_LINE_REGEX} from "./on_run";
-import {indent} from "../utilities";
- 
-/**
- * @return {string}
- */
-export const WRAP_INSTRUCTOR_CODE = function (studentCode, instructorCode, quick, isSafe) {
-    let safeCode = JSON.stringify(studentCode);
- 
-    return `
-from utility import *
- 
-# Load in some commonly used tools
-from pedal.cait.cait_api import parse_program
-from pedal.sandbox.commands import *
-from pedal.core.commands import *
- 
-# Backup the feedback
-on_run_feedback = []
-for feedback in MAIN_REPORT.feedback:
-    on_run_feedback.append(feedback)
-MAIN_REPORT.feedback.clear()
- 
-from pedal.environments.blockpy import setup_environment
-# Add in evaluated stuff from last time
-student = get_sandbox()
-# TODO: What about new inputs since we last ran/evaled?
-# MAIN_REPORT.submission.files['evaluation'] = ${safeCode}
-evaluate(${safeCode}['evaluation'])
- 
-# TODO: Refactor resolver to return instructions
-# Monkey-patch questions
-#from pedal import questions
-#questions.show_question = set_instructions
- 
-${INSTRUCTOR_MARKER}
-${instructorCode}
- 
-# Resolve everything
-from pedal.resolvers.simple import resolve
-final = resolve()
-SUCCESS = final.success
-SCORE = final.score
-CATEGORY = final.category
-LABEL = final.title
-MESSAGE = final.message
-DATA = final.data
-HIDE = final.hide_correctness
- 
-# Handle questions
-if final.instructions:
-    set_instructions(final.instructions[-1].message)
-    
-# Handle positive feedback
-POSITIVE = []
-for positive in final.positives:
-    message = positive.message
-    if not positive:
-        message = positive.else_message
-    POSITIVE.append({
-        "title": positive.title,
-        "label": positive.label,
-        "message": message
-    })
-    
-# Handle system messages
-for system in final.systems:
-    if system.label == 'log':
-        console_log(system.title, system.message);
-    if system.label == 'debug':
-        console_debug(system.title, system.message);
- 
-`;
-};
- 
-export class OnEvalConfiguration extends InstructorConfiguration {
-    use(engine) {
-        super.use(engine);
-        this.filename = "_instructor.on_eval";
-        this.code = this.main.model.assignment.onEval() || "";
- 
-        let disableTifa = this.main.model.assignment.settings.disableTifa();
- 
-        let report = this.main.model.execution.reports;
-        //let studentCodeSafe = this.main.model.execution.reports.student.evaluation || "None";
-        let studentFiles = this.getAllStudentFiles();
-        studentFiles["evaluation"] = this.main.model.execution.reports.student.evaluation || "None";
-        this.dummyOutSandbox();
-        let instructorCode = this.code;
-        let isSafe = !report["parser"].empty && report["verifier"].success;
-        instructorCode = WRAP_INSTRUCTOR_CODE(studentFiles, instructorCode, disableTifa, isSafe);
-        console.log(">>>", instructorCode);
-        let lineOffset = findActualInstructorOffset(instructorCode); //instructorCode.split(NEW_LINE_REGEX).length;
-        report["instructor"] = {
-            "compliments": [],
-            "filename": "./_instructor/on_eval.py",
-            "code": instructorCode,
-            "lineOffset": lineOffset
-            //'complete': false // Actually, let's use undefined for now.
-        };
-        this.code = instructorCode;
- 
-        super.use(engine);
- 
-        //Sk.retainGlobals = false;
-        Sk.globals = this.main.model.execution.instructor.globals;
- 
-        return this;
-    }
- 
-    success(module) {
-        console.log("OnEval success");
-        // TODO: Actually parse results
-        this.main.model.execution.instructor.globals = Sk.globals;
-        this.main.model.execution.instructor.sysmodules = Sk.sysmodules;
-        console.log(module);
-        let results = module.$d.on_eval.$d;
-        console.log(module.$d);
-        this.main.components.feedback.presentFeedback(results);
-        this.main.model.execution.reports["instructor"]["success"] = true;
-        let success = Sk.ffi.remapToJs(results.SUCCESS);
-        this.main.model.submission.correct(success || this.main.model.submission.correct());
-        // Cannot exceed 1 point, cannot go below 0 points
-        let score = Sk.ffi.remapToJs(results.SCORE);
-        score = Math.max(0.0, Math.min(1.0, score));
-        let oldScore = this.main.model.submission.score();
-        this.main.model.submission.score(Math.max(oldScore, score));
-        // Hide status
-        let hide = Sk.ffi.remapToJs(results.HIDE);
-        // And fire the result!
-        this.main.components.server.updateSubmission(score, success, hide, false);
-        this.main.model.status.onExecution(StatusState.READY);
-        //after(module);
- 
-        /*if (success && this.main.model.configuration.callbacks.success) {
-            this.main.model.configuration.callbacks.success(this.main.model.assignment.id());
-        }*/
- 
-        if (!Sk.executionReports.instructor.scrolling) {
-            try {
-                this.main.components.console.scrollToBottom();
-            } catch (e) {
-            }
-        }
-    }
- 
-    failure(error) {
-        console.log("OnEval failure", error);
-        let report = this.main.model.execution.reports;
-        if (error.tp$name === "GracefulExit") {
-            report["instructor"]["success"] = true;
-            this.main.model.status.onExecution(StatusState.READY);
-        } else {
-            this.main.model.status.onExecution(StatusState.FAILED);
-            //console.log(report["instructor"]["code"]);
-            this.main.components.feedback.presentInternalError(error, this.filename);
-            //report["instructor"]["success"] = false;
-            //report["instructor"]["error"] = error;
-            //TODO: report["instructor"]["line_offset"] = lineOffset;
-        }
-        //TODO: after(error);
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_run.js.html b/coverage/lcov-report/src/engine/on_run.js.html deleted file mode 100644 index 6aec0a8c5..000000000 --- a/coverage/lcov-report/src/engine/on_run.js.html +++ /dev/null @@ -1,820 +0,0 @@ - - - - - - Code coverage report for src/engine/on_run.js - - - - - - - - - -
-
-

All files / src/engine on_run.js

-
- -
- 5.76% - Statements - 3/52 -
- - -
- 0% - Branches - 0/12 -
- - -
- 0% - Functions - 0/5 -
- - -
- 5.76% - Lines - 3/52 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246  -  -  -  -  -  -  -  -  -  -  -1x -1x -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {indent} from "../utilities";
-import {StatusState} from "../server";
-import {InstructorConfiguration} from "./instructor";
- 
-export function findActualInstructorOffset(instructorCode) {
-    const index = instructorCode.indexOf(INSTRUCTOR_MARKER);
-    const before = instructorCode.slice(0, index);
-    const match = before.match(NEW_LINE_REGEX);
-    return match ? (1+match.length) : 0;
-}
- 
-export const INSTRUCTOR_MARKER = "###Run the actual instructor code###";
-export const NEW_LINE_REGEX = /\n/g;
-/**
- * @return {string}
- */
-export const WRAP_INSTRUCTOR_CODE = function (studentFiles, instructorCode, quick, isSafe) {
-    let safeCode = JSON.stringify(studentFiles);
-    let skip_tifa = quick ? "True": "False";
- 
-    // TODO: Add in Sk.queuedInput to be passed in
- 
-    return `
-# Support our sysmodules hack by clearing out any lingering old data
-from pedal.core.report import MAIN_REPORT
-MAIN_REPORT.clear()
- 
-from bakery import student_tests
-student_tests.reset()
- 
-from utility import *
- 
-# Load in some commonly used tools
-from pedal.cait.cait_api import parse_program
-from pedal.sandbox.commands import *
-from pedal.core.commands import *
- 
-from pedal.environments.blockpy import setup_environment
-# Do we execute student's code?
-skip_run = get_model_info('assignment.settings.disableInstructorRun')
-inputs = None if skip_run else get_model_info('execution.input')
- 
-# Set the seed to the submission ID by default?
-from pedal.questions import set_seed
-set_seed(str(get_model_info("submission.id")))
- 
-# Initialize the BlockPy environment
-pedal = setup_environment(skip_tifa=${skip_tifa},
-                          skip_run=skip_run,
-                          inputs=inputs,
-                          main_file='answer.py',
-                          files=${safeCode})
-student = pedal.fields['student']
- 
-# TODO: Refactor resolver to return instructions
-# Monkey-patch questions
-#from pedal import questions
-#questions.show_question = set_instructions
- 
-${INSTRUCTOR_MARKER}
-${instructorCode}
- 
-# Resolve everything
-from pedal.resolvers.simple import resolve
-final = resolve()
-SUCCESS = final.success
-SCORE = final.score
-CATEGORY = final.category
-LABEL = final.title
-MESSAGE = final.message
-DATA = final.data
-HIDE = final.hide_correctness
- 
-# Handle questions
-if final.instructions:
-    set_instructions(final.instructions[-1].message)
-    
-# Handle positive feedback
-POSITIVE = []
-for positive in final.positives:
-    message = positive.message
-    if not positive:
-        message = positive.else_message
-    POSITIVE.append({
-        "title": positive.title,
-        "label": positive.label,
-        "message": message
-    })
-    
-# Handle system messages
-for system in final.systems:
-    if system.label == 'log':
-        console_log(system.title, system.message);
-    if system.label == 'debug':
-        console_debug(system.title, system.message);
- 
-`;
-};
- 
-export class OnRunConfiguration extends InstructorConfiguration {
-    use(engine) {
-        super.use(engine);
-        this.filename = "_instructor.on_run";
-        this.code = this.main.model.assignment.onRun();
- 
-        let disableTifa = this.main.model.assignment.settings.disableTifa();
-        // Put the input index back to the front, so we can replay inputs
-        this.main.model.execution.inputIndex(1);
- 
-        let report = this.main.model.execution.reports;
-        //let studentCodeSafe = this.main.model.submission.code();
-        let studentFiles = this.getAllStudentFiles();
-        this.dummyOutSandbox();
-        let instructorCode = this.code;
-        let isSafe = !report["parser"].empty && report["verifier"].success;
-        instructorCode = WRAP_INSTRUCTOR_CODE(studentFiles, instructorCode, disableTifa, isSafe);
-        let lineOffset = findActualInstructorOffset(instructorCode); //instructorCode.split(NEW_LINE_REGEX).length;
-        //lineOffset = 0; //instructorCode.split(NEW_LINE_REGEX).length - lineOffset - 4;
-        report["instructor"] = {
-            "compliments": [],
-            "filename": "./_instructor/on_run.py",
-            "code": instructorCode,
-            "lineOffset": lineOffset
-            //'complete': false // Actually, let's use undefined for now.
-        };
-        /*
-        TODO: Interesting situation. If you have an instructor-file (not a student-file),
-        then it gets imported into sysmodules as `_instructor.MODULE_NAME`. But the instructor
-        script will attempt to import it as `MODULE_NAME`, and fail. UNLESS the *student* has
-        previously imported that module successfully. So there's a common case here where the
-        students' code fails to import the module THEREBY breaking the instructor code.
-         */
- 
-        this.code = instructorCode;
- 
-        Sk.retainGlobals = false;
- 
-        return this;
-    }
- 
-    success(module) {
-        // TODO Logging!!!!
-        //console.log("OnRun success");
-        // TODO: Actually parse results
-        this.main.model.execution.instructor.globals = Sk.globals;
-        this.main.model.execution.instructor.sysmodules = Sk.sysmodules;
-        Sk.globals = {};
-        let results = module.$d.on_run.$d;
-        this.main.components.feedback.presentFeedback(results);
-        this.main.model.execution.reports["instructor"]["success"] = true;
-        let success = Sk.ffi.remapToJs(results.SUCCESS);
-        this.main.model.submission.correct(success || this.main.model.submission.correct());
-        // Cannot exceed 1 point, cannot go below 0 points
-        let score = Sk.ffi.remapToJs(results.SCORE);
-        score = Math.max(0, Math.min(1, score));
-        let oldScore = this.main.model.submission.score();
-        score = Math.max(oldScore, score);
-        this.main.model.submission.score(score);
-        // Hide status
-        let hide = Sk.ffi.remapToJs(results.HIDE);
-        // And fire the result!
-        this.main.components.server.updateSubmission(score, success, hide, false);
-        this.main.model.status.onExecution(StatusState.READY);
-        //after(module);
- 
-        /*if (success && this.main.model.configuration.callbacks.success) {
-            this.main.model.configuration.callbacks.success(this.main.model.assignment.id());
-        }*/
- 
-        if (!Sk.executionReports.instructor.scrolling) {
-            try {
-                this.main.components.console.scrollToBottom();
-            } catch (e) {
-            }
-        }
-    }
- 
-    failure(error) {
-        console.error("OnRun failure", error);
-        let report = this.main.model.execution.reports;
-        if (error.tp$name === "GracefulExit") {
-            report["instructor"]["success"] = true;
-            this.main.model.status.onExecution(StatusState.READY);
-        } else {
-            this.main.model.status.onExecution(StatusState.FAILED);
-            //console.log(report["instructor"]["code"]);
-            this.main.components.feedback.presentInternalError(error, this.filename);
-            //report["instructor"]["success"] = false;
-            //report["instructor"]["error"] = error;
-            //TODO: report["instructor"]["line_offset"] = lineOffset;
-        }
-        //TODO: after(error);
-    }
-}
- 
- 
-/*
-# The following is the old instructor code, leaving it here for now.
- 
-from pedal.core.report import MAIN_REPORT
-# Support our sysmodules hack by clearing out any lingering old data
-MAIN_REPORT.clear()
-from pedal.core.commands import contextualize_report
-contextualize_report(${safeCode}, "answer.py")
-${tifaAnalysis}
-from pedal.sandbox.sandbox import Sandbox
-from pedal.sandbox import compatibility
-from utility import *
-student = MAIN_REPORT['sandbox']['run'] = Sandbox()
-student.report_exceptions_mode = True
-log(get_model_info('execution.input'))
-student.set_input(get_model_info('execution.input'))
-if not get_model_info('assignment.settings.disableInstructorRun'):
-    compatibility.run_student(raise_exceptions=False)
-#log(student.data)
-#student = get_student_data()
-#error, position = get_student_error()
-#compatibility.raise_exception(error, position)
-run_student = compatibility.run_student
-reset_output = compatibility.reset_output
-queue_input = compatibility.queue_input
-get_output = compatibility.get_output
-get_plots = compatibility.get_plots
-compatibility.trace_lines = trace_lines
-from pedal import questions
-questions.show_question = set_instructions
-# TODO: Remove the need for this hack!
-def capture_output(func, *args):
-   reset_output()
-   student.call(func.__name__, *args)
-   return get_output()
-compatibility.capture_output = capture_output
- 
-from pedal.cait.cait_api import parse_program
-${instructorCode}
-from pedal.resolvers import simple
-final = simple.resolve()
-SUCCESS = final.success
-SCORE = final.score
-CATEGORY = final.category
-LABEL = final.title
-MESSAGE = final.message
-DATA = final.data
-HIDE = final.hide_correctness
- 
- */
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/on_sample.js.html b/coverage/lcov-report/src/engine/on_sample.js.html deleted file mode 100644 index 481018b78..000000000 --- a/coverage/lcov-report/src/engine/on_sample.js.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - Code coverage report for src/engine/on_sample.js - - - - - - - - - -
-
-

All files / src/engine on_sample.js

-
- -
- 0% - Statements - 0/4 -
- - -
- 100% - Branches - 0/0 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11  -  -  -  -  -  -  -  -  -  - 
import {OnRunConfiguration} from "./on_run";
- 
-export class OnSampleConfiguration extends OnRunConfiguration {
-    use(engine) {
-        super.use(engine);
-        this.filename = "on_run.py";
-        this.code = this.main.model.assignment.onRun();
- 
-        return this;
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/run.js.html b/coverage/lcov-report/src/engine/run.js.html deleted file mode 100644 index 71aafd775..000000000 --- a/coverage/lcov-report/src/engine/run.js.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - Code coverage report for src/engine/run.js - - - - - - - - - -
-
-

All files / src/engine run.js

-
- -
- 0% - Statements - 0/56 -
- - -
- 0% - Branches - 0/10 -
- - -
- 0% - Functions - 0/12 -
- - -
- 0% - Lines - 0/54 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {StudentConfiguration} from "./student";
-import {StatusState} from "../server";
- 
-export class RunConfiguration extends StudentConfiguration {
-    use(engine) {
-        this.main.model.execution.feedback.message("Running...");
-        this.filename = "answer";
-        this.code = this.main.model.ui.files.getStudentCode();
-        if (this.main.model.assignment.settings.disableStudentRun()) {
-            this.code = "";
-        }
-        //this.code = this.main.model.submission.code();
-        this.main.components.server.saveFile("answer.py", this.main.model.submission.code(), null);
-        this.main.components.server.logEvent("Compile", "", "", "", "answer.py");
-        //console.log(this.code);
-        super.use(engine);
- 
-        engine.reset();
-        this.updateParse();
- 
-        this.main.model.execution.reports["verifier"] = {
-            "success": Boolean(this.code.trim()),
-            "code": this.code
-        };
- 
-        if (typeof Sk.environ == "undefined") {
-            Sk.environ = new Sk.builtin.dict();
-        }
-        const printerTag = this.main.components.console.printerTag,
-            width = printerTag.width()-50,
-            height = Math.max(300, printerTag.height()-50);
-        Sk.environ.set$item(new Sk.builtin.str("DESIGNER_WINDOW_WIDTH"), new Sk.builtin.int_(Math.round(width)));
-        Sk.environ.set$item(new Sk.builtin.str("DESIGNER_WINDOW_HEIGHT"), new Sk.builtin.int_(Math.round(height)));
- 
-        Sk.retainGlobals = false;
- 
-        this.clearInput();
- 
-        return this;
-    }
- 
-    success(module) {
-        console.log("Run success");
-        let message = {
-            "inputs": this.main.model.execution.input().join("\n"),
-            "outputs": this.main.model.execution.output().map(line => line.content).join("\n"),
-        };
-        this.main.components.server.logEvent("Run.Program", "", "", JSON.stringify(message), "answer.py");
-        this.main.model.display.dirtySubmission(false);
-        this.main.components.console.finishTurtles();
-        this.main.model.status.onExecution(StatusState.READY);
-        this.main.model.execution.student.globals(Sk.globals);
-        Sk.globals = {};
-        let report = this.main.model.execution.reports;
-        let filename = this.filename;
-        this.main.model.execution.student.results = module;
-        if (!this.main.model.assignment.settings.hideEvaluate()) {
-            this.main.components.console.beginEval();
-        }
-        return new Promise((resolve, reject) => {
-            this.step(module.$d, module.$d,-1, 0, filename + ".py");
-            this.lastStep();
-            report["student"] = {
-                "success": true,
-                "trace": this.engine.executionBuffer.trace,
-                "lines": this.engine.executionBuffer.trace.map(x => x.line),
-                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
-                "results": module,
-                "output": this.main.model.execution.output,
-                "input": this.main.model.execution.input,
-                "calls": this.main.model.execution.student.calls,
-                "tracing": []
-            };
-            resolve();
-        });
-    }
- 
-    failure(error) {
-        console.error("Run failure", error);
-        this.main.model.status.onExecution(StatusState.FAILED);
-        let report = this.main.model.execution.reports;
-        if (report.parser.success && report.verifier.success) {
-            this.main.components.server.logEvent("Compile.Error", "", "", error.toString(), "answer.py");
-        } else {
-            this.main.components.server.logEvent("Run.Program", "ProgramErrorOutput", "", error.toString(), "answer.py");
-        }
-        this.lastStep();
-        return new Promise((resolve, reject) => {
-            report["student"] = {
-                "success": false,
-                "error": error,
-                "trace": this.engine.executionBuffer.trace,
-                "lines": this.engine.executionBuffer.trace.map(x => x.line),
-                "realLines": this.engine.executionBuffer.trace.filter(x => !x.isDocstring).map(x => x.line),
-                "input": this.main.model.execution.input,
-                "calls": this.main.model.execution.student.calls,
-                "tracing": []
-            };
-            resolve();
-        });
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/sample.js.html b/coverage/lcov-report/src/engine/sample.js.html deleted file mode 100644 index 909a5ccce..000000000 --- a/coverage/lcov-report/src/engine/sample.js.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - Code coverage report for src/engine/sample.js - - - - - - - - - -
-
-

All files / src/engine sample.js

-
- -
- 0% - Statements - 0/4 -
- - -
- 100% - Branches - 0/0 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12  -  -  -  -  -  -  -  -  -  -  - 
import {StudentConfiguration} from "./student";
- 
-export class SampleConfiguration extends StudentConfiguration {
-    use(engine) {
-        super.use(engine);
-        // TODO: Fix to be the current sample submission
-        this.filename = "answer.py";
-        this.code = "print('Not ready yet!')";
- 
-        return this;
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/engine/student.js.html b/coverage/lcov-report/src/engine/student.js.html deleted file mode 100644 index 9a202070e..000000000 --- a/coverage/lcov-report/src/engine/student.js.html +++ /dev/null @@ -1,676 +0,0 @@ - - - - - - Code coverage report for src/engine/student.js - - - - - - - - - -
-
-

All files / src/engine student.js

-
- -
- 0% - Statements - 0/83 -
- - -
- 0% - Branches - 0/35 -
- - -
- 0% - Functions - 0/17 -
- - -
- 0% - Lines - 0/79 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {Configuration, EMPTY_MODULE} from "./configurations";
- 
-export class StudentConfiguration extends Configuration {
-    use(engine) {
-        super.use(engine);
-        // Limit execution to 4 seconds
-        let settings = this.main.model.settings;
-        Sk.execLimitFunction = () =>
-            this.main.model.assignment.settings.disableTimeout() ? Infinity : 5000;
-        Sk.execLimit = Sk.execLimitFunction();
-        // Stepper! Executed after every statement.
-        Sk.afterSingleExecution = this.step.bind(this);
- 
-        // Unmute everything
-        this.main.model.display.mutePrinter(false);
- 
-        // Function to call after each step
-        // afterSingleExecution
- 
-        Sk.builtinFiles.files["src/lib/utility/__init__.js"] = EMPTY_MODULE;
- 
-        return this;
-    }
- 
-    openFile(filename) {
-        let found = this.main.components.fileSystem.searchForFile(filename, true);
-        //console.log(filename, found);
-        if (found === undefined) {
-            if (Sk.builtinFiles && Sk.builtinFiles["files"][filename] !== undefined) {
-                return Sk.builtinFiles["files"][filename];
-            } else {
-                throw new Sk.builtin.OSError("File not found: " + filename);
-            }
-        } else {
-            return found.contents();
-        }
-    }
- 
-    importFile(filename) {
-        if (this.isForbidden(filename)) {
-            throw "File not accessible: '" + filename + "'";
-        } else if (filename === "./answer.py") {
-            return this.main.model.submission.code();
-        } else if (Sk.builtinFiles === undefined) {
-            throw new Sk.builtin.OSError("Built-in modules not accessible.");
-        } else if (Sk.builtinFiles["files"][filename] !== undefined) {
-            return Sk.builtinFiles["files"][filename];
-        } else {
-            let found = this.main.components.fileSystem.searchForFile(filename, true);
-            if (found === undefined) {
-                throw new Sk.builtin.OSError("File not found: '"+filename + "'");
-            } else {
-                return found.contents();
-            }
-        }
-    }
- 
-    input(promptMessage) {
-        return this.main.components.console.input(promptMessage);
-    }
- 
-    isForbidden(filename) {
-        return filename.startsWith("src/lib/utility/") ||
-            filename.startsWith("src/lib/pedal/") ||
-            filename.startsWith("./_instructor/");
-    }
- 
-    /**
-     * "Steps" the execution of the code, meant to be used as a callback to the Skulpt
-     * environment.
-     *
-     * @param {Object} globals - Hash that maps the names of global variables (Strings) to their Skulpt representation.
-     * @param {Object} locals - Hash that maps the names of local variables (Strings) to their Skulpt representation.
-     * @param {Number} lineNumber - The corresponding line number in the source code that is being executed.
-     * @param {Number} columnNumber - The corresponding column number in the source code that is being executed.
-     *                                Think of it as the "X" position to the lineNumber's "Y" position.
-     * @param {String} filename - The name of the python file being executed (e.g., "__main__.py").
-     * @param {Boolean} isDocstring - Whether or not this is an actual line or a docstring.
-     */
-    step(globals, locals, lineNumber, columnNumber, filename, isDocstring, astName) {
-        if (filename === "answer.py") {
-            /*if (execStack) {
-                console.log(execStack.map(([n, o]) => [n, {...o}]));
-            }*/
-            let currentStep = this.engine.executionBuffer.step;
-            globals = this.main.components.trace.parseGlobals({...globals, ...locals});
-            // TODO: Trace local variables properly
-            //let locals = this.main.components.trace.parseGlobals(locals);
-            //Object.assign(globals, locals);
-            this.engine.executionBuffer.trace.push({
-                "step": currentStep,
-                "filename": filename,
-                //'block': highlightMap[lineNumber-1],
-                "line": lineNumber,
-                "column": columnNumber,
-                "properties": globals.properties,
-                "modules": globals.modules,
-                "isDocstring": isDocstring,
-                "ast": astName
-            });
-            this.engine.executionBuffer.step = currentStep + 1;
-            this.engine.executionBuffer.line = lineNumber;
-        }
-    };
- 
- 
- 
-    /**
-     * Called at the end of the Skulpt execution to terminate the executionBuffer
-     * and hand it off to the execution trace in the model.
-     */
-    lastStep() {
-        let execution = this.main.model.execution;
-        execution.student.currentTraceData(this.engine.executionBuffer.trace);
-        execution.student.currentStep(this.engine.executionBuffer.step);
-        execution.student.lastStep(this.engine.executionBuffer.step);
-        execution.student.currentLine(this.engine.executionBuffer.line);
-        execution.student.lastLine(this.engine.executionBuffer.line);
-        execution.student.currentTraceStep(this.engine.executionBuffer.step);
-    };
- 
-    getLines(ast) {
-        let visitedLines = new Set();
-        let visitBody = (node) => {
-            if (node.lineno !== undefined) {
-                visitedLines.add(node.lineno);
-            }
-            if (node.body) {
-                node.body.forEach((statement) => visitBody(statement));
-            }
-            if (node.orelse) {
-                node.orelse.forEach((statement) => visitBody(statement));
-            }
-            if (node.finalbody) {
-                node.finalbody.forEach((statement) => visitBody(statement));
-            }
-        };
-        visitBody(ast);
-        return Array.from(visitedLines);
-    }
- 
-    /**
-     * Ensure that the parse information is up-to-date
-     */
-    updateParse() {
-        let report = this.main.model.execution.reports;
-        // Hold all the actually discovered lines from the parse
-        let lines = [];
-        // Attempt a parse
-        let ast;
-        try {
-            let parse = Sk.parse(this.filename, this.code);
-            ast = Sk.astFromParse(parse.cst, this.filename, parse.flags);
-            lines = this.getLines(ast);
-        } catch (error) {
-            // Report the error
-            report["parser"] = {
-                "success": false,
-                "error": error,
-                "empty": true,
-                "lines": lines
-            };
-            console.error(error);
-            console.log(this.filename, this.code);
-            return false;
-        }
-        // Successful parse
-        report["parser"] = {
-            "success": true,
-            "ast": ast,
-            "empty": ast.body.length === 0,
-            "lines": lines
-        };
-        return true;
-    }
- 
-    showErrors() {
-        let report = this.main.model.execution.reports;
-        if (report["student"].success) {
-            this.main.components.feedback.clear("Execution finished. No errors to report.");
-        } else {
-            this.main.components.feedback.presentRunError(report.student.error);
-        }
-    }
- 
-    provideSecretError() {
-        let report = this.main.model.execution.reports;
-        let feedback = this.main.components.feedback;
-        if (!report["student"].success) {
-            let errorButton = this.main.model.configuration.container.find(".blockpy-student-error");
-            let message = feedback.presentRunError(report.student.error, true);
-            errorButton.attr("title", "Click to see Original Error");
-            errorButton.tooltip({"trigger": "hover", "container": this.main.model.configuration.attachmentPoint});
-            errorButton.click(() => this.main.components.dialog.ERROR_SHOW_STUDENT_ERROR(message));
-            errorButton.show();
-        }
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/feedback.js.html b/coverage/lcov-report/src/feedback.js.html deleted file mode 100644 index 99b732f5b..000000000 --- a/coverage/lcov-report/src/feedback.js.html +++ /dev/null @@ -1,1456 +0,0 @@ - - - - - - Code coverage report for src/feedback.js - - - - - - - - - -
-
-

All files / src feedback.js

-
- -
- 5.23% - Statements - 10/191 -
- - -
- 0% - Branches - 0/96 -
- - -
- 7.14% - Functions - 2/28 -
- - -
- 4.81% - Lines - 9/187 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -5x -  -5x -  -5x -5x -5x -5x -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {arrayMove, capitalize, pyStr} from "./utilities";
- 
-export let FEEDBACK_HTML = `
- 
-<span class='blockpy-floating-feedback text-muted-less pull-right position-sticky sticky-top'
-    aria-hidden="true" role="presentation" aria-label="New Feedback Alert">
-    New feedback &uarr;
-</span>
- 
-<div class='blockpy-feedback blockpy-panel'
-            role="region" aria-label="Feedback"
-            aria-live="polite"
-            data-bind="class: ui.console.size">
- 
-    <div>
-    <!-- Feedback/Trace Visibility Control -->
-    <!-- ko ifnot: ui.secondRow.hideTraceButton -->
-    <button type='button'
-            class='btn btn-sm btn-outline-secondary float-right'
-            data-bind="click: ui.secondRow.advanceState">
-        <span class='fas fa-eye'></span>
-        <span data-bind="text: ui.secondRow.switchLabel"></span>
-    </button>
-    <!-- /ko -->
- 
-    <!-- Actual Feedback Region -->    
-    <div>
-        <strong>Feedback: </strong>
-        <span class='badge blockpy-feedback-category feedback-badge'
-            data-bind="css: ui.feedback.badge,
-                       text: ui.feedback.category">Feedback Kind</span>
-        <small data-bind="text: (100*submission.score())+'%',
-                          visible: display.instructor() && execution.feedback.label()"
-            class="text-muted"></small>
-        <small data-bind="click: ui.feedback.resetScore,
-                          visible: display.instructor() && execution.feedback.label() && submission.score() > 0"
-            class="text-muted" style="cursor: pointer"><u>(reset)</u></small>
-    </div>
-    <div>
-        <strong class="blockpy-feedback-label"
-            data-bind="text: execution.feedback.label"></strong>
-        <div class="blockpy-feedback-message"
-            data-bind="html: execution.feedback.message"></div>
-    </div>
-    </div>
-    <div style="position: relative;">
-        <!-- The thank you message will appear above the span -->
-        <span class="blockpy-feedback-thank-you">Thank you!</span>
-    </div>
-    <small class="blockpy-feedback-response-full" style="text-align: right"
-        data-bind="visible: ui.feedback.provideRatings() && execution.feedback.label() && display.showRating()">
-        <span style="cursor: pointer;" class="far fa-minus-square"
-            data-bind="click: ui.feedback.flipRating"></span>
-        Rate this Feedback:
-        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-thumbs-up"
-            data-bind="click: ()=>ui.feedback.rate('thumbs-up'),
-                        css: ui.feedback.hasRatedClass"></span>
-<!--        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-meh"-->
-<!--            data-bind="click: ()=>ui.feedback.rate('meh'),-->
-<!--                        css: ui.feedback.hasRatedClass"></span>-->
-        <span style="cursor: pointer; font-size: 20px" class="blockpy-rating fa-thumbs-down"
-            data-bind="click: ()=>ui.feedback.rate('thumbs-down', true),
-                        css: ui.feedback.hasRatedClass"></span>
-    </small>
-    <!-- Positive Feedback Region -->
-    <div class="blockpy-feedback-positive" style="text-align: right">
-    </div>
-    <small class="blockpy-feedback-response-collapsed" 
-        style="position: absolute; right: 0; bottom: 0"
-        data-bind="visible: execution.feedback.label() && !display.showRating()">
-        <span style="cursor: pointer; vertical-align: middle" class="far fa-plus-square"
-            data-bind="click: ui.feedback.flipRating"></span> Rate
-    </small>
-</div>            
-`;
- 
-export class BlockPyFeedback {
- 
-    /**
-     * An object that manages the feedback area, where users are told the state of their
-     * program's execution and given guidance. Also manages the creation of the Trace Table.
-     *
-     * @constructor
-     * @this {BlockPyFeedback}
-     * @param {Object} main - The main BlockPy instance
-     * @param {HTMLElement} tag - The HTML object this is attached to.
-     */
-    constructor(main, tag) {
-        this.main = main;
-        this.tag = tag;
- 
-        this.feedbackModel = this.main.model.execution.feedback;
- 
-        this.category = this.tag.find(".blockpy-feedback-category");
-        this.label = this.tag.find(".blockpy-feedback-label");
-        this.message = this.tag.find(".blockpy-feedback-message");
-        this.positive = this.tag.find(".blockpy-feedback-positive");
- 
-        // TODO: If they change the student extra files, also update the dirty flag
-        this.main.model.submission.code.subscribe(() => this.main.model.display.dirtySubmission(true));
-    };
- 
-    /**
-     * Moves the screen (takes 1 second) to make the Feedback area visible.
-     */
-    scrollIntoView() {
-        $("html, body").animate({
-            scrollTop: this.tag.offset().top
-        }, 700);
-    };
- 
-    /**
-     * Determines if the feedback area is currently visible
-     * @returns {boolean}
-     */
-    isFeedbackVisible() {
-        let visibilityBuffer = 100;
-        let topOfElement = this.tag.offset().top;
-        //let bottomOfElement = this.tag.offset().top + this.tag.outerHeight();
-        let bottomOfElement = topOfElement + visibilityBuffer;
-        let bottomOfScreen = $(window).scrollTop() + $(window).height();
-        let topOfScreen = $(window).scrollTop();
-        //bottom_of_element -= 40; // User friendly padding
-        return (
-            (topOfElement < bottomOfScreen) &&
-            (topOfScreen < bottomOfElement));
-    };
- 
-    /**
-     * Clears any output currently in the feedback area. Also resets the printer and
-     * any highlighted lines in the editor.
-     */
-    clear(message="Ready") {
-        this.feedbackModel.message(message);
-        this.feedbackModel.category(null);
-        this.feedbackModel.label(null);
-        this.feedbackModel.hidden(false);
-        this.feedbackModel.linesError.removeAll();
-        this.feedbackModel.linesUncovered.removeAll();
-        this.clearPositiveFeedback();
-        this.category.off("click");
-        this.main.model.display.hasRated(false);
-    };
- 
-    static findFirstErrorLine(feedbackData) {
-        if (feedbackData.quick$lookup) {
-            let location = feedbackData.quick$lookup(new Sk.builtin.str("location"));
-            if (location) {
-                let line = location.tp$getattr(new Sk.builtin.str("line"));
-                if (line) {
-                    return Sk.ffi.remapToJs(line);
-                }
-            }
-        }
-        return null;
-        /*for (let i = feedbackData.length-1; i >= 0; i-= 1) {
-            if ("position" in feedbackData[i]) {
-                return feedbackData[i].position.line;
-            }
-        }
-        return null;*/
-    };
- 
-    updateRegularFeedback() {
- 
-    }
- 
-    /**
-     * Updates the model with these new execution results
-     * @param executionResults
-     */
-    updateFeedback(executionResults) {
-        // Parse out data
-        let message = Sk.ffi.remapToJs(executionResults.MESSAGE);
-        let category = Sk.ffi.remapToJs(executionResults.CATEGORY);
-        let label = Sk.ffi.remapToJs(executionResults.LABEL);
-        let hide = Sk.ffi.remapToJs(executionResults.HIDE);
-        let data = executionResults.DATA;
-        let positives = Sk.ffi.remapToJs(executionResults.POSITIVE);
- 
-        // Override based on assignments' settings
-        let hideScore = this.main.model.assignment.hidden();
-        if (hideScore && category.toLowerCase() === "complete") {
-            category = "no errors";
-            label = "No errors";
-            message = "No errors reported.";
-        }
- 
-        // Remap to expected BlockPy labels
-        if (category.toLowerCase() === "instructor" && label.toLowerCase() === "explain") {
-            label = "Instructor Feedback";
-        }
- 
-        // Don't present a lack of error as being incorrect
-        if (category === "Instructor" && label === "No errors") {
-            category = "no errors";
-        }
- 
-        // Update model accordingly
-        message = this.main.utilities.markdown(message).replace(/<pre>\n/g, "<pre>\n\n");
-        this.feedbackModel.message(message);
-        this.feedbackModel.category(category);
-        this.feedbackModel.label(label);
-        //let highlightTimeout = setTimeout(() => {
-        this.message.find("pre code").map( (i, block) => {
-            window.hljs.highlightBlock(block);
-        });
-        //}, 400);
-        // TODO: Instead of tracking student file, let's track the instructor file
-        this.main.components.server.logEvent("Intervention", category, label, message, "answer.py");
- 
-        // Clear out any previously highlighted lines
-        this.main.components.pythonEditor.bm.clearHighlightedLines();
- 
-        // Find the first error on a line and report that
-        let line = BlockPyFeedback.findFirstErrorLine(data);
-        this.feedbackModel.linesError.removeAll();
-        if (line !== null && line !== undefined) {
-            this.feedbackModel.linesError.push(line);
-        }
- 
-        // Invert the set of traced lines
-        let studentReport = this.main.model.execution.reports.student;
-        this.feedbackModel.linesUncovered.removeAll();
-        if (studentReport.success) {
-            let uncoveredLines = [];
-            this.main.model.execution.reports.parser.lines.forEach((line) => {
-                if (studentReport.lines.indexOf(line) === -1) {
-                    uncoveredLines.push(line);
-                }
-            });
-            this.feedbackModel.linesUncovered(uncoveredLines);
-        }
- 
-        for (let i=0; i<positives.length; i+=1) {
-            let positiveData = positives[i];
-            this.addPositiveFeedback(positiveData.message, "star", "green", () => this.main.components.dialog.POSITIVE_FEEDBACK_FULL(positiveData.title, positiveData.message));
-        }
-    }
- 
-    clearPositiveFeedback() {
-        this.positive.empty();
-        this.main.model.configuration.container.find(".blockpy-student-error").hide();
-    }
- 
-    addPositiveFeedback(text, icon, color, onclick, toEnd) {
-        let positive = $("<span></span>");
-        positive.addClass("blockpy-feedback-positive-icon fas fa-"+icon);
-        positive.css("color", color);
-        positive.attr("title", text);
-        if (toEnd) {
-            this.positive.append(positive);
-        } else {
-            this.positive.prepend(positive);
-        }
-        positive.tooltip({"trigger": "hover", "container": this.main.model.configuration.attachmentPoint});
-        if (onclick !== undefined) {
-            positive.click(onclick);
-        }
-        positive.hover(() => {
-            this.main.components.server.logEvent("X-Feedback", "positive", "hover", text, "");
-        });
-    }
- 
-    /**
-     * Present any accumulated feedback
-     */
-    presentFeedback(executionResults) {
-        this.updateFeedback(executionResults);
- 
-        this.category.off("click");
-        if (this.main.model.display.instructor()) {
-            this.updateFullFeedback(executionResults);
-        }
- 
-        // TODO: Logging
-        //this.main.components.server.logEvent("feedback", category+"|"+label, message);
- 
-        this.notifyFeedbackUpdate();
-    };
- 
-    processSingleFeedback(element) {
-        const title = element.tp$getattr(new pyStr("title")).toString();
-        const category = capitalize(element.tp$getattr(new pyStr("category")).toString());
-        const kind = element.tp$getattr(new pyStr("kind")).toString();
-        const active = Sk.misceval.isTrue(element);
-        let message = element.tp$getattr(new pyStr("message")).toString();
-        const unused_message = element.tp$getattr(new pyStr("unused_message")).toString();
-        message = message === "None" ? unused_message : message;
-        const justification = element.tp$getattr(new pyStr("justification")).toString();
-        const parent = element.tp$getattr(new pyStr("parent"));
-        const hasParent = !Sk.builtin.checkNone(parent);
-        let score = element.tp$getattr(new pyStr("resolved_score"));
-        score = score === Sk.builtin.none.none$ ? ""
-            : score.tp$name === "float"
-                ? "+" + Math.round(score.v*100).toString() + "%"
-                : score.toString();
-        return [element, parent, `
-        <div class="list-group-item flex-column align-items-start" ${hasParent ? "style='margin-left: 50px;'" : ""}>
-            <div class="d-flex w-100 justify-content-between align-items-center">
-                <span><strong class="mb-1" style="${active ? "" : "text-decoration: line-through;"}">${title}</strong> (${category} - ${kind})</span>
-                <span class="badge badge-info badge-pill">${score}</span>
-            </div>
-            ${active ? "" : "<div>(Muted - Not shown to student)</div>"}
-            <div class="mb-1 p-1 feedback-expand-on-click feedback-shrunk">
-                ${message}
-            </div>
-            <small style="white-space: pre">${justification}</small>
-        </div>
-        `];
-    }
- 
-    updateFullFeedback(executionResults) {
-        console.log(executionResults);
-        if (!("MAIN_REPORT" in executionResults)) {
-            return;
-        }
-        let mainReport = executionResults.MAIN_REPORT;
-        const feedback = mainReport.tp$getattr(new pyStr("feedback"));
-        if (!feedback) {
-            return;
-        }
-        let feedbacks = [];
-        Sk.misceval.iterFor(feedback.tp$iter(), (element) => {
-            feedbacks.push(this.processSingleFeedback(element));
-        });
-        Sk.misceval.iterFor(mainReport.tp$getattr(new pyStr("ignored_feedback")).tp$iter(), (element) => {
-            feedbacks.push(this.processSingleFeedback(element));
-        });
-        const parents = new Map();
-        for (let i = 0; i < feedbacks.length; i += 1) {
-            const [element, parent, text] = feedbacks[i];
-            const hasParent = !Sk.builtin.checkNone(parent);
-            if (hasParent) {
-                if (!parents.has(parent)) {
-                    parents.set(parent, []);
-                }
-                parents.get(parent).push(text);
-            } else {
-                if (!parents.has(element)) {
-                    parents.set(element, []);
-                }
-                parents.get(element).unshift(text);
-            }
-        }
-        feedbacks = [...parents.values()].flat();
-        this.category.on("click", () => {
-            this.main.components.dialog.show("Full Feedback Information", '<div class="list-group">'+
-                feedbacks.join("\n") + "</div>");
-            $(".feedback-expand-on-click").on("click", (event) => {
-                $(event.target).toggleClass("feedback-shrunk");
-            });
-        });
-    }
- 
-    notifyFeedbackUpdate() {
-        if (!this.isFeedbackVisible()) {
-            this.tag.find(".blockpy-floating-feedback").show().fadeOut(7000);
-            if (this.shouldScrollIntoView()) {
-                this.scrollIntoView();
-            }
-        }
-    };
- 
-    shouldScrollIntoView() {
-        return !this.main.model.ui.smallLayout();
-    }
- 
-    presentRunError(error, just_return) {
-        if (just_return === undefined) {
-            just_return = false;
-        }
-        let message, label, category, lineno;
-        label = error.tp$name;
-        category = "runtime";
-        message = this.convertSkulptError(error);
- 
-        if (just_return) {
-            return message;
-        }
-        this.feedbackModel.message(message);
-        this.feedbackModel.category(category);
-        this.feedbackModel.label(label);
-        this.feedbackModel.linesError.removeAll();
-        if (lineno !== undefined && lineno !== null) {
-            this.feedbackModel.linesError.push(lineno);
-        }
-    }
- 
-    buildTraceback(error, filenameExecuted) {
-        return error.traceback.map(frame => {
-            if (!frame) {
-                return "??";
-            }
-            let lineno = frame.lineno;
-            if (frame.filename.slice(0, -3) === filenameExecuted) {
-                lineno -= this.main.model.execution.reports.instructor.lineOffset;
-            }
-            let file = `File <code class="filename">"${frame.filename}"</code>, `;
-            let line = `on line <code class="lineno">${lineno}</code>, `;
-            let scope = (frame.scope !== "<module>" &&
-            frame.scope !== undefined) ? `in scope ${frame.scope}` : "";
-            let source = "";
-            if (frame.source !== undefined) {
-                source = `\n<pre><code>${frame.source}</code></pre>`;
-            }
-            return file + line + scope + source;
-        });
-    }
- 
-    convertSkulptError(error, filenameExecuted, isInstructor) {
-        let name = error.tp$name;
-        let args = Sk.ffi.remapToJs(error.args);
-        let top = `${name}: ${args[0]}\n<br>\n<br>`;
-        let traceback = "";
-        if (name === "TimeoutError") {
-            if (error.err && error.err.traceback && error.err.traceback.length) {
-                const allFrames = this.buildTraceback(error.err, filenameExecuted);
-                const result = ["Traceback:"];
-                if (allFrames.length > 5) {
-                    result.push(...allFrames.slice(0, 3),
-                                `... Hiding ${allFrames.length - 3} other stack frames ...,`,
-                                ...allFrames.slice(-3, -2));
-                } else {
-                    result.push(...allFrames);
-                }
-                traceback = result.join("\n<br>");
-            }
-        } else {
-            if (isInstructor) {
-                top = "Error in instructor feedback. Please show the following to an instructor:<br>\n"+top;
-            }
-            if (error.traceback && error.traceback.length) {
-                traceback = "Traceback:<br>\n" + this.buildTraceback(error, filenameExecuted).join("\n<br>");
-            }
-        }
-        return top+"\n"+traceback;
-    }
- 
-    presentInternalError(error, filenameExecuted) {
-        if (error.tp$name === "TimeoutError") {
-            this.main.model.execution.feedback.category("runtime");
-            this.main.model.execution.feedback.label("Timeout Error");
-        } else {
-            this.main.model.execution.feedback.category("internal");
-            this.main.model.execution.feedback.label("Internal Error");
-        }
-        let message = this.convertSkulptError(error, filenameExecuted, true);
-        this.main.model.execution.feedback.message(message);
- 
-        this.notifyFeedbackUpdate();
- 
-        this.main.components.server.logEvent("X-System.Error", "internal", "Internal Error", message, filenameExecuted);
-    }
- 
- 
- 
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/files.js.html b/coverage/lcov-report/src/files.js.html deleted file mode 100644 index 688edeee0..000000000 --- a/coverage/lcov-report/src/files.js.html +++ /dev/null @@ -1,2296 +0,0 @@ - - - - - - Code coverage report for src/files.js - - - - - - - - - -
-
-

All files / src files.js

-
- -
- 6.81% - Statements - 19/279 -
- - -
- 2.63% - Branches - 4/152 -
- - -
- 1.81% - Functions - 1/55 -
- - -
- 7.03% - Lines - 19/270 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738  -  -  -  -4x -36x -4x -  -36x -36x -36x -32x -32x -  -36x -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -4x -  -4x -  -  -  -  -  -4x -  -4x -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {firstDefinedValue} from "utilities.js";
- 
-// ${makeTab("?mock_urls.blockpy", "URL Data", true)}
- 
-const makeTab = function(filename, friendlyName, hideIfEmpty, notInstructor) {
-    if (friendlyName === undefined) {
-        friendlyName = filename;
-    }
-    let instructorFileClass = "";
-    let hideIfNotInstructor = "true";
-    if (!notInstructor) {
-        instructorFileClass = "blockpy-file-instructor";
-        hideIfNotInstructor = "display.instructor()";
-    }
-    return `
-    <li class="nav-item ${instructorFileClass}">
-        <a class="nav-link" href="#"
-            data-toggle="tab"
-            data-bind="css: {active: display.filename() === '${filename}'},
-                click: display.filename.bind($data, '${filename}'),
-                visible: (!${hideIfEmpty} || ui.files.hasContents('${filename}')) && ${hideIfNotInstructor}">
-            ${friendlyName}</a>
-    </li>`;
-};
- 
-export let FILES_HTML = `
-<div class="blockpy-panel blockpy-files"
-    data-bind="visible: ui.files.visible, class: ui.files.width">
-<ul class="nav nav-tabs" role="tablist">
- 
-    <li class="nav-item">
-        <strong>View: </strong>
-    </li>
- 
-    ${makeTab("answer.py", undefined, undefined, true)}
-    ${makeTab("!instructions.md", "Instructions")}
-    ${makeTab("!assignment_settings.blockpy", "Settings")}
-    ${makeTab("^starting_code.py", "Starting Code")}
-    ${makeTab("!on_run.py", "On Run")}
-    ${makeTab("!on_change.py", "On Change", true)}
-    ${makeTab("!on_eval.py", "On Eval", true)}
-    ${makeTab("!sample_submissions.blockpy", "Sample Submissions", true)}
-    ${makeTab("!tags.blockpy", "Tags", true)}
-    
-    <!-- ko foreach: assignment.extraInstructorFiles -->
-        <li class="nav-item"
-            data-bind="css: {'blockpy-file-instructor': !filename().startsWith('&')},
-                       visible: filename().startsWith('&') || $root.display.instructor() ">
-            <a class="nav-link" href="#"
-                data-toggle="tab"
-                data-bind="css: {active: $root.display.filename() === filename(),
-                                 uneditable: filename().startsWith('&')},
-                            click: $root.display.filename.bind($data, filename()),
-                            text: $root.ui.files.displayFilename(filename())">
-            </a>        
-        </li>
-    <!-- /ko -->
-    <!-- ko foreach: assignment.extraStartingFiles -->
-        <li class="nav-item blockpy-file-instructor"
-            data-bind="visible: $root.display.instructor()">
-            <a class="nav-link" href="#"
-                data-toggle="tab"
-                data-bind="css: {active: $root.display.filename() === filename()},
-                            click: $root.display.filename.bind($data, filename()),
-                            text: filename">
-            </a>        
-        </li>
-    <!-- /ko -->
-    
-    <!-- ko foreach: submission.extraFiles -->
-        <li class="nav-item">
-            <a class="nav-link" href="#"
-                data-toggle="tab"
-                data-bind="css: {active: $root.display.filename() === filename()},
-                            click: $root.display.filename.bind($data, filename()),
-                            text: $root.ui.files.displayFilename(filename())">
-            </a>
-        </li>
-    <!-- /ko -->
-  
-    <li class="nav-item dropdown" data-bind="visible: ui.files.addIsVisible">
-        <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"
-         role="button" aria-haspopup="true" aria-expanded="false">Add New</a>
-        <!-- ko if: $root.display.instructor() -->
-        <div class="dropdown-menu dropdown-menu-right">
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('?mock_urls.blockpy'),
-                           click: ui.files.add.bind($data, '?mock_urls.blockpy')">URL Data</a>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('images.blockpy'),
-                           click: ui.files.add.bind($data, 'images.blockpy')">Images</a>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('?toolbox.blockpy'),
-                           click: ui.files.add.bind($data, '?toolbox.blockpy')">Toolbox</a>
-            
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('!tags.blockpy')">Tags</a>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('!sample_submissions.blockpy'),
-                           click: ui.files.add.bind($data, '!sample_submissions.blockpy')">Sample Submissions</a>
-            <div class="dropdown-divider"></div>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: assignment.onChange,
-                           click: ui.files.add.bind($data, '!on_change.py')">On Change</a>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: assignment.onEval,
-                           click: ui.files.add.bind($data, '!on_eval.py')">On Eval</a>
-            <div class="dropdown-divider"></div>
-           <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('!answer_prefix.py'),
-                           click: ui.files.add.bind($data, '!answer_prefix.py')">Answer Prefix</a>
-           <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="hidden: ui.files.hasContents('!answer_suffix.py'),
-                           click: ui.files.add.bind($data, '!answer_suffix.py')">Answer Suffix</a>
-            <div class="dropdown-divider"></div>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="click: ui.files.add.bind($data, 'starting')">Starting File</a>
-            <a class="dropdown-item blockpy-file-instructor" href="#"
-                data-bind="click: ui.files.add.bind($data, 'instructor')">Instructor File</a>
-            <a class="dropdown-item" href="#"
-                data-bind="click: ui.files.add.bind($data, 'student')">Student File</a>
-        </div>
-        <!-- /ko -->
-        <!-- ko ifnot: $root.display.instructor() -->
-        <div class="dropdown-menu dropdown-menu-right">
-        <a class="dropdown-item" href="#"
-                data-bind="click: ui.files.add.bind($data, 'student')">Student File</a>
-        </div>
-        <!-- /ko -->
-    </li>
-  
-</ul>
-</div>
-`;
- 
-const NEW_INSTRUCTOR_FILE_DIALOG_HTML = `
-<form>
-<div class="form-group row">
-    <div>
-        <p>This dialog box is for creating text files (e.g., Python code, Markdown, etc.) that will be
-        accessible from Python. If you want to upload a binary file (e.g., an image, a sqlite database),
-        then you should use the "Images" or "URL Data" options.</p>
-        
-        <p>Students will not be able to see file tabs unless you change the "Hide Files" setting to be unchecked.</p>
-    </div>
-    <!-- Filename -->
-    <div class="col-sm-2 text-right">
-        <label for="blockpy-instructor-file-dialog-filename">Filename:</label>
-    </div>
-    <div class="col-sm-10">
-        <input type="text" class="form-control blockpy-instructor-file-dialog-filename"
-            id="blockpy-instructor-file-dialog-filename">    
-    </div>
-    <!-- Filetype -->
-    <div class="col-sm-2 text-right mt-2">
-        <label for="blockpy-instructor-file-dialog-filetype">Filetype: </label>
-    </div>
-    <div class="col-sm-10">
-        <span class="blockpy-instructor-file-dialog-filetype"
-            id="blockpy-instructor-file-dialog-filetype"></span>    
-    </div>
-    <!-- Inaccessible to student? -->
-    <div class="col-sm-2 text-right mt-2">
-        <label for="blockpy-instructor-file-dialog-namespace">Namespace: </label>
-    </div>
-    <div class="col-sm-4">
-        <select class="form-control blockpy-instructor-file-dialog-namespace"
-            id="blockpy-instructor-file-dialog-namespace">
-            <option value="!">Completely inaccessible</option>
-            <option value="?">Hidden from student, accessible programatically</option>
-            <option value="&">Visible to student, but not editable</option>
-        </select>
-    </div>
-</div>
-</form>
-`;
- 
-/**
- * Filenames live in one of five possible namespaces:
- *  Instructor (!): Invisible to the student under all circumstances
- *  Start Space (^): Used to reset the student namespace
- *  Student Space (): Visible to the student when display.hideFiles is not true, able to be edited
- *  Hidden Space (?): Not directly visible to the student, but accessible programmatically
- *  Read-only Space (&): An instructor file type visible to the student, but is uneditable by them
- *  Secret Space ($): Not visible from the menu at all, some other mechanism controls it
- *  Generated Space (*): Visible to the student, but destroyed after Engine.Clear. Can shadow an actual file.
- *  Concatenated Space (#): Used when bundling a space for the server.
- */
- 
-export let STARTING_FILES = [
-    // Submission
-    "answer.py",
-    // Instructor files
-    "!instructions.md",
-    "!assignment_settings.blockpy",
-    "^starting_code.py",
-    "!on_run.py",
-    "$settings.blockpy",
-];
- 
-export const BASIC_NEW_FILES = [
-    "!on_change.py",
-    "!on_eval.py",
-    "?mock_urls.blockpy",
-    "?toolbox.blockpy",
-    "!tags.blockpy",
-    "!sample_submissions.blockpy",
-    "!answer_prefix.py",
-    "!answer_suffix.py"
-];
- 
-export function chompSpecialFile(filename) {
-    if ("!^?&$*#".includes(filename[0])) {
-        return filename.slice(1);
-    } else {
-        return filename;
-    }
-}
- 
-const INSTRUCTOR_DIRECTORY = "_instructor/";
-const STUDENT_DIRECTORY = "_student/";
- 
-const SearchModes = {
-    EVERYWHERE: "EVERYWHERE",
-    START_WITH_INSTRUCTOR: "START_WITH_INSTRUCTOR",
-    ONLY_STUDENT_FILES: "ONLY_STUDENT_FILES"
-};
- 
-const DELETABLE_SIMPLE_FILES = ["!on_change.py", "!on_eval.py"];
- 
-export const UNDELETABLE_FILES = ["answer.py", "!instructions.md", "!assignment_settings.py",
-                                  "^starting_code.py", "!on_run.py", "$settings.blockpy"];
- 
-export const UNRENAMABLE_FILES = ["answer.py", "!instructions.md", "!assignment_settings.py",
-                                  "^starting_code.py", "!on_run.py", "$settings.blockpy",
-                                  "!on_change.py", "!on_eval.py",
-                                  "?mock_urls.blockpy", "?toolbox.blockpy",
-                                  "!tags.blockpy", "!sample_submissions.blockpy",
-                                  "!answer_prefix.py", "!answer_suffix.py"];
- 
-class BlockPyFile {
-    constructor(main, filename, contents) {
-        this.main = main;
-        this.filename = filename;
-        this.contents = contents || "";
-        this.owner = null;
-        this.handle = null;
-    }
-}
- 
-export function makeModelFile(filename, contents) {
-    return {"filename": ko.observable(filename), contents: ko.observable(contents || "")};
-}
- 
-function makeMockModelFile(filename, contents) {
-    return { filename: () => filename, contents: () => contents };
-}
- 
-export function loadConcatenatedFile(concatenatedFile, modelFileList) {
-    if (concatenatedFile) {
-        let files = JSON.parse(concatenatedFile);
-        let modelFiles = [];
-        for (let filename in files) {
-            if (files.hasOwnProperty(filename)) {
-                modelFiles.push(makeModelFile(filename, files[filename]));
-            }
-        }
-        //files = files.map(file => makeModelFile(file.filename, file.contents));
-        if (modelFileList) {
-            modelFileList(modelFiles);
-        } else {
-            return modelFiles;
-        }
-    } else {
-        if (modelFileList) {
-            modelFileList([]);
-        } else {
-            return [];
-        }
-    }
-}
- 
-export function createConcatenatedFile(modelFileList) {
-    return JSON.stringify(modelFileList().map(file => {
-        return {
-            filename: file.filename(),
-            contents: file.contents()
-        };
-    }));
-}
- 
-export function observeConcatenatedFile(modelFileList) {
-    return ko.pureComputed(() => {
-        let result = {};
-        modelFileList().forEach(file =>
-            result[file.filename()] = file.contents());
-        return JSON.stringify(result);
-    });
-}
- 
-/**
- * Abstracts away database logic
- */
-export class BlockPyFileSystem {
-    constructor(main) {
-        this.main = main;
-        this.files_ = {};
-        this.mountFiles();
- 
-        this.watchModel();
-        this.watches_ = {};
- 
-        this.remoteFiles_ = {};
-        this.filesToUrls = {};
- 
-        /*main.model.configuration.container.find(".blockpy-file-instructor").toggle(this.main.model.display.instructor());
-        this.main.model.display.instructor.subscribe((visiblity)=> {
-            main.model.configuration.container.find(".blockpy-file-instructor").toggle(visiblity);
-        });*/
-    }
- 
-    watchFile(filename, callback) {
-        if (!(filename in this.watches_)) {
-            this.watches_[filename] = [];
-        }
-        this.watches_[filename].push(callback);
-    }
- 
-    stopWatchingFile(filename) {
-        delete this.watches_[filename];
-    }
- 
-    watchModel() {
-        let filesystem = this;
-        [this.main.model.submission.extraFiles,
-         this.main.model.assignment.extraStartingFiles,
-         this.main.model.assignment.extraInstructorFiles].forEach(fileArray =>
-            fileArray.subscribe(function(changes) {
-                changes.sort((first, second) => second.status.localeCompare(first.status))
-                    .forEach(function (change) {
-                        let modelFile = change.value;
-                        if (change.status === "added") {
-                            // Track new file
-                            let file = filesystem.newFile(modelFile.filename(), modelFile.contents(), modelFile.contents);
-                            filesystem.notifyWatches(file);
-                        } else if (change.status === "deleted") {
-                            // Delete file
-                            let file = filesystem.deleteFileLocally_(modelFile.filename());
-                            if (filesystem.main.model.display.filename() === modelFile.filename()) {
-                                filesystem.main.model.display.filename("answer.py");
-                            }
-                        }
-                    });
-            }, this, "arrayChange")
-        );
-    }
- 
-    // answer.py
-    //   => subscribe to first element of submission.code)
-    // !on_run.py, !on_change.py, !on_eval.py
-    //   => subscribe to relevant assignment.<whatever>
-    // ^starting_code.py
-    //   => subscribe to first element of assignment.startingCode
-    // ^whatever
-    //   => subscribe to rest of the elements of assignment.startingCode
-    // !whatever or ?whatever
-    //   => subscribe to elements of assignment.extraFiles
-    // Otherwise:
-    //   => subscribe to rest of the elements of submission.code
-    /**
-     * New special files need to be registered here
-     * @param file {BlockPyFile}
-     * @private
-     */
-    observeFile_(file) {
-        if (file.filename === "answer.py") {
-            file.handle = this.main.model.submission.code;
-        } else if (file.filename === "!on_run.py") {
-            file.handle = this.main.model.assignment.onRun;
-        } else if (file.filename === "!on_change.py") {
-            file.handle = this.main.model.assignment.onChange;
-        } else if (file.filename === "!on_eval.py") {
-            file.handle = this.main.model.assignment.onEval;
-        } else if (file.filename === "!instructions.md") {
-            file.handle = this.main.model.assignment.instructions;
-        } else if (file.filename === "^starting_code.py") {
-            file.handle = this.main.model.assignment.startingCode;
-        } else if (file.filename === "?mock_urls.blockpy") {
-            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
-        } else if (file.filename === "?toolbox.blockpy") {
-            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
-        } else if (file.filename === "!answer_prefix.py") {
-            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
-        } else if (file.filename === "!answer_suffix.py") {
-            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
-        } else if (file.filename === "!tags.blockpy") {
-            file.handle = this.main.model.assignment.tags;
-        } else if (file.filename === "!assignment_settings.blockpy") {
-            file.handle = this.main.model.assignment.settings;
-        } else if (file.filename === "!sample_submissions.blockpy") {
-            file.handle = this.main.model.assignment.sampleSubmissions;
-        } else if (file.filename === "$settings.blockpy") {
-            file.handle = this.main.model.display;
-        } else if (file.filename.startsWith("^")) {
-            this.observeInArray_(file, this.main.model.assignment.extraStartingFiles);
-        } else if (file.filename.startsWith("!") ||
-                   file.filename.startsWith("?") ||
-                   file.filename.startsWith("&")) {
-            this.observeInArray_(file, this.main.model.assignment.extraInstructorFiles);
-        } else {
-            this.observeInArray_(file, this.main.model.submission.extraFiles);
-        }
-    }
- 
-    observeInArray_(file, array) {
-        file.owner = array;
-        let codeBundle = file.owner();
-        for (let i=0; i < codeBundle.length; i++) {
-            if (codeBundle[i].filename() === file.filename) {
-                file.handle = codeBundle[i].contents;
-            }
-        }
-        if (file.handle === null) {
-            let newFile = makeModelFile(file.filename);
-            file.handle = newFile.contents;
-            array.push(newFile);
-        }
-    }
- 
-    mountFiles() {
-        this.newFile("answer.py");
-        this.newFile("^starting_code.py");
-        this.newFile("!on_run.py");
-        this.newFile("!instructions.md");
-        this.newFile("!assignment_settings.blockpy");
-    }
- 
-    dismountExtraFiles() {
-        for (let name in this.files_) {
-            if (this.files_.hasOwnProperty(name)) {
-                if (UNDELETABLE_FILES.indexOf(name) === -1) {
-                    delete this.files_[name];
-                    delete this.watches_[name];
-                }
-            }
-        }
-        // submission.codeTODO: Shouldn't we notify the UI that the file was deleted?
-    }
- 
-    newFile(filename, contents, modelFile) {
-        if (filename in this.files_) {
-            // File already exists! Just update its handle
-            let existingFile = this.files_[filename];
-            if (modelFile === undefined) {
-                this.observeFile_(existingFile);
-            } else {
-                existingFile.handle = modelFile;
-            }
-            existingFile.handle(contents || "");
-            return existingFile;
-        } else {
-            // File does not exist
-            let newFile = new BlockPyFile(this.main, filename);
-            this.files_[filename] = newFile;
-            if (modelFile === undefined) {
-                this.observeFile_(newFile);
-            } else {
-                newFile.handle = modelFile;
-            }
-            if (contents !== undefined) {
-                newFile.handle(contents);
-            }
-            return newFile;
-        }
-    }
- 
-    writeFile(filename, contents) {
-        contents = contents || "";
-        this.files_[filename].handle(contents);
-    }
- 
-    readFile(filename) {
-        return this.files_[filename].handle();
-    }
- 
-    getFile(filename) {
-        return this.files_[filename];
-    }
- 
-    /**
-     *
-     * @param filename
-     * @returns {boolean|object} The info about the file, or false if it could not be deleted
-     */
-    deleteFile(filename) {
-        if (DELETABLE_SIMPLE_FILES.indexOf(filename) !== -1) {
-            let file = this.deleteFileLocally_(filename);
-            file.handle(null);
-            return true;
-        } else if (this.files_[filename].owner === null) {
-            return false;
-        } else {
-            // Triggers a callback to eventually call deleteFileLocally_
-            let found = this.files_[filename].owner.remove(modelFile => modelFile.filename() === filename);
-            return found || false;
-        }
-    }
- 
-    deleteFileLocally_(filename) {
-        let file = this.files_[filename];
-        delete this.files_[filename];
-        if (filename in this.watches_) {
-            this.watches_[filename].forEach(callback => callback.deleted());
-        }
-        return file;
-    }
- 
-    renameFile(source, destination) {
-        if (UNRENAMABLE_FILES.indexOf(source) !== -1) {
-            return false;
-        } else if (this.files_[filename].owner === null) {
-            return false;
-        } else {
-            // Triggers a callback to eventually call deleteFileLocally_
-            let found = this.files_[filename].owner.remove(modelFile => modelFile.filename() === filename);
-            return found || false;
-        }
-    }
- 
-    notifyWatches(file) {
-        if (file.filename in this.watches_) {
-            this.watches_[file.filename].forEach(callback => callback.updated(file));
-        }
-    }
- 
-    searchForFile(name, studentSearch) {
-        /*
-        TODO: This is called quite a bit by the Import mechanism, might need
-              to optimize it some more. Do timing tests.
- 
-        files.*
-        _instructor/files.*
-        _student/files.*
- 
-        If a student searches for a file, it checks the "?", "&", "*", "" namespaces
-            import helper => "./helper.py"
-            open("external.json") => "external.json"
-        If an instructor searches for a file, it checks "!", "^", "?", "&", "*", "" namespaces
-            To explicitly search instructor namespaces first
-                import _instructor.helper => "./instructor/helper.py"
-                open("_instructor/external.json") => "_instructor/external.json"
-            to allow student files to override:
-                import helper => "./helper.py"
-                open("external.json") => "external.json"
-            to only check student files, prepend with _student
-         */
-        // Chop off starting "./"
-        if (name.startsWith("./")) {
-            name = name.slice(2);
-        }
-        let searchMode = SearchModes.EVERYWHERE;
-        // Should the search be start with instructor side?
-        if (name.startsWith(INSTRUCTOR_DIRECTORY)) {
-            name = name.slice(INSTRUCTOR_DIRECTORY.length);
-            searchMode = SearchModes.START_WITH_INSTRUCTOR;
-        }
-        // Should the search be limited to the student mode?
-        if (name.startsWith(STUDENT_DIRECTORY)) {
-            name = name.slice(STUDENT_DIRECTORY.length);
-            searchMode = SearchModes.ONLY_STUDENT_FILES;
-        } else if (studentSearch) {
-            searchMode = SearchModes.ONLY_STUDENT_FILES;
-        }
-        // Shortcut for instructor versions
-        let extraStudentFiles = this.main.model.submission.extraFiles();
-        let extraInstructorFiles = this.main.model.assignment.extraInstructorFiles();
-        let extraStartingFiles = this.main.model.assignment.extraStartingFiles();
-        // Check special files (TODO: how would an instructor access "./_instructor/answer.py"?
-        let specialFile = this.searchForSpecialFiles_(name, searchMode);
-        if (specialFile !== undefined) {
-            return specialFile;
-        }
-        // Start looking through possible files
-        let studentVersion = this.searchForFileInList_(extraStudentFiles, name);
-        let generatedVersion = this.searchForFileInList_(extraStudentFiles, "*"+name);
-        let defaultVersion = this.searchForFileInList_(extraInstructorFiles, "&"+name);
-        let hiddenVersion = this.searchForFileInList_(extraInstructorFiles, "?"+name);
-        let remoteVersion = this.remoteFiles_[name];
-        if (searchMode === SearchModes.ONLY_STUDENT_FILES) {
-            return firstDefinedValue(hiddenVersion, defaultVersion, studentVersion, generatedVersion, remoteVersion);
-        }
-        let instructorVersion = this.searchForFileInList_(extraInstructorFiles, "!"+name);
-        let startingVersion = this.searchForFileInList_(extraStartingFiles, "^"+name);
-        if (searchMode === SearchModes.START_WITH_INSTRUCTOR) {
-            return firstDefinedValue(instructorVersion, hiddenVersion, startingVersion,
-                                     defaultVersion, studentVersion, generatedVersion, remoteVersion);
-        } else if (searchMode === SearchModes.EVERYWHERE) {
-            return firstDefinedValue(defaultVersion, studentVersion, generatedVersion,
-                                     instructorVersion, hiddenVersion, startingVersion, remoteVersion);
-        }
-    }
- 
-    searchForFileInList_(modelList, filename) {
-        for (let i=0; i < modelList.length; i++) {
-            if (modelList[i].filename() === filename) {
-                return modelList[i];
-            }
-        }
-        return undefined;
-    }
- 
-    searchForSpecialFiles_(filename, searchMode) {
-        if (searchMode === SearchModes.ONLY_STUDENT_FILES) {
-            if (filename === "answer.py") {
-                return makeMockModelFile("_instructor/answer.py", this.main.model.submission.code());
-            }
-            return undefined;
-        }
-        switch (filename) {
-            case "answer.py":
-                return makeMockModelFile("_instructor/answer.py", this.main.model.submission.code());
-            case "on_run.py":
-                return makeMockModelFile("_instructor/on_run.py", this.main.model.assignment.onRun());
-            case "on_change.py":
-                return makeMockModelFile("_instructor/on_change.py", this.main.model.assignment.onChange());
-            case "on_eval.py":
-                return makeMockModelFile("_instructor/on_eval.md", this.main.model.assignment.onEval());
-            case "instructions.md":
-                return makeMockModelFile("_instructor/instructions.md", this.main.model.assignment.instructions());
-            case "starting_code.py":
-                return makeMockModelFile("_instructor/starting_code.py", this.main.model.assignment.startingCode());
-        }
-        return undefined;
-    }
- 
-    newFileDialog(kind) {
-        let body = $(NEW_INSTRUCTOR_FILE_DIALOG_HTML);
-        let filename = body.find(".blockpy-instructor-file-dialog-filename");
-        let filetype = body.find(".blockpy-instructor-file-dialog-filetype");
-        let namespace = body.find(".blockpy-instructor-file-dialog-namespace");
-        let extensionRegex = /(?:\.([^.]+))?$/;
-        filename.on("input", () => {
-            let extension = extensionRegex.exec(filename.val())[1];
-            extension = extension === undefined ? "No extension" : extension;
-            //TODO: this.main.components.editors.getEditorFromExtension(extension);
-            filetype.text(extension);
-        });
-        let yes = () => {
-            let prefix = "";
-            if (kind === "instructor") {
-                prefix = namespace.val();
-            } else if (kind === "starting") {
-                prefix = "^";
-            }
- 
-            if (filename.val()) {
-                filename = prefix+filename.val();
-                this.newFile(filename);
-            }
-        };
-        body.submit((e) => {
-            e.preventDefault();
-            yes();
-            this.main.components.dialog.close();
-        });
-        this.main.components.dialog.confirm("Make New File", body, yes, ()=>{}, "Add");
-    }
- 
-    loadRemoteFiles(files=null) {
-        // Clear existing remote files (?)
-        /*
-        Object.getOwnPropertyNames(this.remoteFiles_).forEach(function (prop) {
-            delete this.remoteFiles_[prop];
-        });*/
-        let model = this.main.model;
- 
-        const preloadFiles = model.assignment.settings.preloadFiles() || model.assignment.settings.preloadAllFiles();
-        if (!preloadFiles && !files) {
-            return null;
-        }
-        if (model.assignment.settings.preloadFiles()) {
-            try {
-                files = JSON.parse(preloadFiles);
-            } catch (e) {
-                console.error("Failed to preload files, invalid structure: ", e);
-                return null;
-            }
-            this.downloadRemoteFiles(files);
-        } else if (files) {
-            this.downloadRemoteFiles(this.reorganizeFiles(files));
-        } else {
-            this.main.components.server.listUploadedFiles((data) => {
-                this.downloadRemoteFiles(this.reorganizeFiles(data.files));
-            });
-        }
-    }
- 
-    reorganizeFiles(files) {
-        const organized = {};
-        Object.entries(files).forEach(([placement, placedFiles]) => {
-            placedFiles.forEach(([filename, url]) => {
-                const searchParams = new URL(url, window.location.origin).searchParams;
-                const directory = searchParams.get("directory");
-                const placement = searchParams.get("placement");
-                if (!(placement in organized)) {
-                    organized[placement] = {};
-                }
-                if (!(directory in organized[placement])) {
-                    organized[placement][directory] = {};
-                }
-                organized[placement][directory][filename] = true;
-                this.filesToUrls[filename] = url;
-            });
-        });
-        return organized;
-    }
- 
-    downloadRemoteFiles(files) {
-        const oldRemainingFiles = Object.keys(this.remoteFiles_);
-        Object.entries(files).forEach(([placement, placementData]) => {
-            Object.entries(placementData).forEach(([directory, directoryData]) => {
-                Object.entries(directoryData).forEach(([filename, renamedFile]) => {
-                    if (renamedFile === true) {
-                        renamedFile = filename;
-                    }
-                    if (!(renamedFile in this.remoteFiles_)) {
-                        this.main.components.server.downloadFile(placement, directory, filename, (data) => {
-                            this.newFile("images.blockpy", "{}");
-                            this.remoteFiles_[renamedFile] = makeMockModelFile(renamedFile, data);
-                            delete oldRemainingFiles[renamedFile];
-                        });
-                    }
-                });
-            });
-        });
-        // TODO: Clean up the old files after all the new ones are loaded
-    }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/footer.js.html b/coverage/lcov-report/src/footer.js.html deleted file mode 100644 index a3a4b62ee..000000000 --- a/coverage/lcov-report/src/footer.js.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - Code coverage report for src/footer.js - - - - - - - - - -
-
-

All files / src footer.js

-
- -
- 100% - Statements - 1/1 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 1/1 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
//TODO: Move get link down to footer, remove vertical bar from quick-menu
-export let FOOTER_HTML = `
-<div class="col-md-12 blockpy-panel blockpy-status">
-    <div>
-        <label class="badge" data-bind="class: ui.server.status('loadAssignment')">Load Assignment
-            <!-- ko if: display.instructor -->
-            <input type="file"
-            class="blockpy-force-load-assignment-file blockpy-hidden-file"
-            accept="application/JSON"
-            data-bind="event: {change: ui.server.force.loadAssignment}">
-            <!-- /ko -->
-        </label>, 
-        <span class="badge" data-bind="class: ui.server.status('saveAssignment')">Save Assignment</span>, 
-        <span class="badge" data-bind="class: ui.server.status('loadFile')">Load File</span>, 
-        <span class="badge" data-bind="class: ui.server.status('saveFile')">Save File</span>, 
-        <span class="badge" data-bind="class: ui.server.status('loadDataset')">Load Dataset</span>, 
-        <span class="badge" data-bind="class: ui.server.status('logEvent')">Log Event</span>, 
-        <span class="badge" data-bind="class: ui.server.status('updateSubmission'),
-                                        click: ui.server.force.updateSubmission">Update Submission</span>, 
-        <span class="badge" data-bind="class: ui.server.status('onExecution')">Execution</span>
-    </div>
-    <div
-        <span data-bind="text: ui.server.messages"></span>
-    </div>
-    <div>
-        <span>User: <span data-bind="text: user.id"></span> (<span data-bind="text: user.name"></span>, <span data-bind="text: user.role"></span>)</span>, 
-        <span>Course: <span data-bind="text: user.courseId"></span></span>,
-        <span>Group: <span data-bind="text: user.groupId"></span></span>,
-        <span>Assignment: <span data-bind="text: assignment.id"></span></span>,
-        <span>Assignment Version: <span data-bind="text: assignment.version"></span></span>,
-        <span>Submission: 
-            <span data-bind="text: submission.id"></span>
-            <span data-bind="if: submission.ownerId() != user.id()">
-                (Owner ID: <span data-bind="text: submission.ownerId()"></span>)
-            </span>
-        </span>, 
-        <span>Submission Version: <span data-bind="text: submission.version"></span></span>,
-        <span>Editor Version: <span data-bind="text: display.editorVersion"></span></span>
-    </div>
-</div>
-`;
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/history.js.html b/coverage/lcov-report/src/history.js.html deleted file mode 100644 index a531c1a63..000000000 --- a/coverage/lcov-report/src/history.js.html +++ /dev/null @@ -1,694 +0,0 @@ - - - - - - Code coverage report for src/history.js - - - - - - - - - -
-
-

All files / src history.js

-
- -
- 7.35% - Statements - 5/68 -
- - -
- 0% - Branches - 0/25 -
- - -
- 0% - Functions - 0/18 -
- - -
- 7.35% - Lines - 5/68 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  - 
// TODO: Should disable buttons if we can't activate them.
- 
-export const HISTORY_TOOLBAR_HTML = `
-<div class="blockpy-history-toolbar col-md-12" data-bind="visible: display.historyMode">
- 
-    <form class="form-inline">
-        <button class="blockpy-history-start btn btn-outline-secondary mr-2" type="button"
-            data-bind="click: ui.editors.python.history.start">
-            <span class='fas fa-step-backward'></span> Start
-        </button>
-        <button class="btn btn-outline-secondary mr-2" type="button"
-            data-bind="click: ui.editors.python.history.previous">
-            <span class='fas fa-backward'></span> Previous
-        </button>
-        <select class="blockpy-history-selector form-control custom-select mr-2" aria-title="History Selector">
-        </select>
-        <button class="btn btn-outline-secondary mr-2" type="button"
-            data-bind="click: ui.editors.python.history.use">
-            <span class='fas fa-file-import'></span> Use
-        </button>
-        <button class="btn btn-outline-secondary mr-2" type="button"
-            data-bind="click: ui.editors.python.history.next">
-            <span class='fas fa-forward'></span> Next
-        </button>
-        <button class="btn btn-outline-secondary" type="button"
-            data-bind="click: ui.editors.python.history.mostRecent">
-            <span class='fas fa-step-forward'></span> Most Recent
-        </button>
-    </form>
-</div>
-`;
- 
-/**
- * An object for displaying the user's coding logs (their history).
- * A lightweight component, its only job is to open a dialog.
- *
- * @constructor
- * @this {BlockPyHistory}
- * @param {Object} main - The main BlockPy instance
- */
-export class BlockPyHistory {
-    constructor(main, tag) {
-        this.main = main;
-        this.tag = tag;
-        this.currentId = null;
-        this.history = [];
-        this.editEvents = [];
-    }
- 
-    load(history) {
-        this.history = history;
-        this.editEvents = [];
-        this.selector = $(".blockpy-history-selector").empty();
-        let editId = 0;
-        history
-            .filter((entry) => (
-                !entry.file_path.startsWith("_instructor.") &&
-                    entry.event_type !== "Compile" &&
-                    entry.event_type !== "Intervention" &&
-                    (!this.main.model.assignment.hidden() || entry.event_type !== "X-Submission.LMS")
-            ))
-            .forEach((entry, index) => {
-                let event_type = REMAP_EVENT_TYPES[entry.event_type] || entry.event_type;
-                let displayed = prettyPrintDateTime(entry.client_timestamp) +" - "+event_type;
-                let disable = (entry.event_type !== "File.Edit");
-                let option = $("<option></option>", {text: displayed, disabled: disable});
-                if (this.isEditEvent(entry)) {
-                    option.attr("value", editId);
-                    this.editEvents.push(entry);
-                    editId += 1;
-                }
-                this.selector.append(option);
-            });
-        this.selector.val(Math.max(0, editId-1));
-        this.selector.change((evt) => {
-            this.updateEditor();
-        });
-    }
- 
-    moveToStart() {
-        this.selector.val(0);
-        this.updateEditor();
-    }
- 
-    movePrevious() {
-        let currentId = parseInt(this.selector.val(), 10);
-        this.selector.val(Math.max(0, currentId-1));
-        this.updateEditor();
-    }
- 
-    moveNext() {
-        let currentId = parseInt(this.selector.val(), 10);
-        this.selector.val(Math.min(this.editEvents.length-1, currentId+1));
-        this.updateEditor();
-    }
- 
-    moveToMostRecent() {
-        this.selector.val(this.editEvents.length-1);
-        this.updateEditor();
-    }
- 
-    updateEditor() {
-        if (this.editEvents.length) {
-            let currentId = parseInt(this.selector.val(), 10);
-            this.main.components.pythonEditor.bm.setCode(this.editEvents[currentId].message);
-        }
-    }
- 
-    use() {
-        if (this.editEvents.length) {
-            let currentId = parseInt(this.selector.val(), 10);
-            let code = this.editEvents[currentId].message;
-            this.main.model.ui.editors.python.turnOffHistoryMode();
-            this.main.components.pythonEditor.file.handle(code);
-        }
-    }
- 
-    isEditEvent(entry) {
-        return ((entry.event_type === "File.Edit" ||
-                 entry.event_type === "File.Create") &&
-                this.main.model.display.filename() === entry.file_path);
-    }
- 
-}
- 
-const REMAP_EVENT_TYPES = {
-    "Session.Start": "Began session",
-    "X-IP.Change": "Changed IP address",
-    "File.Edit": "Edited code",
-    "File.Create": "Started assignment",
-    "Run.Program": "Ran program",
-    "Compile.Error": "Syntax error",
-    "X-Submission.LMS": "Updated grade"
-};
- 
-const monthNames = [
-    "Jan", "Feb", "Mar",
-    "Apr", "May", "June", "July",
-    "Aug", "Sept", "Oct",
-    "Nov", "Dec"
-];
-const weekDays = [
-    "Sun", "Mon", "Tue",
-    "Wed", "Thu", "Fri",
-    "Sat"
-];
- 
-function isSameDay(first, second) {
-    return first.getDate() === second.getDate() &&
-        first.getMonth() === second.getMonth() &&
-        first.getFullYear() === second.getFullYear();
-}
- 
-/**
- * Helper function to parse a date/time string and rewrite it as something
- * more human readable.
- * @param {String} timeString - the string representation of time ("YYYYMMDD HHMMSS")
- * @returns {String} - A human-readable time string.
- */
-function prettyPrintDateTime(timeString) {
-    /*let year = timeString.slice(0, 4),
-        month = parseInt(timeString.slice(4, 6), 10)-1,
-        day = timeString.slice(6, 8),
-        hour = timeString.slice(9, 11),
-        minutes = timeString.slice(11, 13),
-        seconds = timeString.slice(13, 15);*/
-    // TODO: Handle timezones correctly
-    if (timeString === undefined) {
-        return "Undefined Time";
-    }
-    let now = new Date();
-    let past = new Date(parseInt(timeString, 10));
-    if (isSameDay(now, past)) {
-        return "Today at "+past.toLocaleTimeString();
-    } else {
-        let dayStr = weekDays[past.getDay()];
-        let monthStr = monthNames[past.getMonth()];
-        let date = dayStr + ", " + monthStr + " " + past.getDate();
-        if (now.getFullYear() === past.getFullYear()) {
-            return date + " at "+past.toLocaleTimeString();
-        } else {
-            return date + ", "+past.getFullYear() + " at "+past.toLocaleTimeString();
-        }
-    }
-}
- 
- 
-/**
- * Opens the history dialog box. This requires a trip to the server and
- * occurs asynchronously. The users' code is shown in preformatted text
- * tags (no code highlighting currently) along with the timestamp.
- */
-BlockPyHistory.prototype.openDialog = function() {
-    var dialog = this.main.components.dialog;
-    var body = "<pre>a = 0</pre>";
-    this.main.components.server.getHistory(function (data) {
-        body = data.reverse().reduce(function (complete, elem) { 
-            var complete_str = prettyPrintDateTime(elem.time);
-            var new_line = "<b>"+complete_str+"</b><br><pre>"+elem.code+"</pre>";
-            return complete+"\n"+new_line;
-        }, "");
-        dialog.show("Work History", body, function() {});
-    });
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/index.html b/coverage/lcov-report/src/index.html deleted file mode 100644 index 32d1619e4..000000000 --- a/coverage/lcov-report/src/index.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - Code coverage report for src - - - - - - - - - -
-
-

All files src

-
- -
- 8% - Statements - 168/2098 -
- - -
- 1.87% - Branches - 18/961 -
- - -
- 3.72% - Functions - 18/483 -
- - -
- 7.94% - Lines - 164/2065 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
blockpy.js -
-
0.23%1/4330%0/3010%0/1340.23%1/432
console.js -
-
1.81%4/2200%0/580%0/571.83%4/218
corgis.js -
-
10%6/600%0/100%0/1410%6/60
dialog.js -
-
40.25%31/770%0/1210.71%3/2840.25%31/77
editors.js -
-
10.2%5/490%0/1812.5%1/88.69%4/46
engine.js -
-
0%0/770%0/240%0/200%0/77
feedback.js -
-
5.23%10/1910%0/967.14%2/284.81%9/187
files.js -
-
6.81%19/2792.63%4/1521.81%1/557.03%19/270
footer.js -
-
100%1/1100%0/0100%0/0100%1/1
history.js -
-
7.35%5/680%0/250%0/187.35%5/68
interface.js -
-
31.81%7/2225%1/433.33%3/931.81%7/22
server.js -
-
8.71%32/3670%0/1310%0/658.79%32/364
storage.js -
-
70.96%22/3125%1/450%6/1270.96%22/31
toolbar.js -
-
0%0/500%0/60%0/120%0/50
trace.js -
-
4.54%2/440%0/460%0/34.54%2/44
utilities.js -
-
17.82%23/12916.21%12/7410%2/2017.79%21/118
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/interface.js.html b/coverage/lcov-report/src/interface.js.html deleted file mode 100644 index 75b2b5868..000000000 --- a/coverage/lcov-report/src/interface.js.html +++ /dev/null @@ -1,784 +0,0 @@ - - - - - - Code coverage report for src/interface.js - - - - - - - - - -
-
-

All files / src interface.js

-
- -
- 31.81% - Statements - 7/22 -
- - -
- 25% - Branches - 1/4 -
- - -
- 33.33% - Functions - 3/9 -
- - -
- 31.81% - Lines - 7/22 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -3x -3x -1x -  -  -1x -1x -  -  -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * @fileoverview Contains main HTML of BlockPy interface, and helper functions.
- * Combines a lot of HTML from components.
- *
- * Here's the layout:
- *  Row 1: Header and Quick Menu
- *  Row 2: Console and Feedback
- *  Row 3: File Navigation
- *  Row 4: View Row
- *  Row 5: Footer Row
- */
- 
-import {TRACE_HTML} from "trace.js";
-import {DIALOG_HTML} from "dialog.js";
-import {FEEDBACK_HTML} from "feedback.js";
-import {FILES_HTML} from "files.js";
-import {FOOTER_HTML} from "footer.js";
-import {EDITORS_HTML} from "editors.js";
-import {CONSOLE_HTML} from "console.js";
- 
-/**
- * The different layout options of the panes in the second row of the layout.
- * @enum {String}
- */
-export let SecondRowSecondPanelOptions = {
-    FEEDBACK: "feedback",
-    TRACE: "trace",
-    NONE: "none"
-};
- 
-/**
- * Setup any additional Knockout subscriptions to fire on interface changes.
- * @param self
- * @param model
- */
-export function makeExtraInterfaceSubscriptions(self, model) {
-    // Highlight Markdown when instructions update
-    let highlightTimeout = null;
-    model.ui.instructions.current.subscribe(() => {
-        Iif (highlightTimeout !== null) {
-            clearTimeout(highlightTimeout);
-        }
-        highlightTimeout = setTimeout(() => {
-            model.configuration.container.find(".blockpy-instructions pre code").map( (i, block) => {
-                window.hljs.highlightBlock(block);
-            });
-        }, 400);
-    });
-    // Provide Fullscreen support
-    model.display.fullscreen.subscribe((isFullscreen) => {
-        self.components.server.logEvent("X-Display.Fullscreen.Request", "", "",
-                                        isFullscreen.toString(), "");
-        if (isFullscreen) {
-            // NOTE: navigationUI could allow us to force controls to show
-            model.configuration.container.parent()[0].requestFullscreen().catch(err => {
-                let message = `Error attempting to enable full-screen mode: ${err.message} (${err.name})`;
-                self.components.server.logEvent("X-Display.Fullscreen.Error", "", "",
-                                                message,  "");
-                alert(message);
-            }).then(() => {
-                self.components.server.logEvent("X-Display.Fullscreen.Success", "", "",
-                                                "", "");
-                model.display.fullscreen(true);
-                model.configuration.container.css("overflow-y", "auto");
-            });
-        } else {
-            document.exitFullscreen().then(() => {
-                self.components.server.logEvent("X-Display.Fullscreen.Exit", "", "",
-                                                isFullscreen.toString(), "");
-                model.display.fullscreen(false);
-            });
-        }
-    });
-}
- 
-// TODO: Get shareable link button
- 
-export function makeInterface(main) {
-    return `
-<div class='blockpy-content container-fluid'>
- 
-    <!-- Dialog -->
-    ${DIALOG_HTML}
-    
-    <!-- Hidden Capture Canvas -->
-    <canvas id='capture-canvas' class='d-none' role="presentation" aria-hidden="true"></canvas>
-    
-    <!-- Row 1: Header and Quick Menu -->
-    <div class='row' data-bind="hidden: ui.smallLayout()">
-         
-         <!-- Description -->
-         <div class='col-md-9 blockpy-panel blockpy-header'
-               role='heading' aria-label='Assignment Description'>
-         
-            <!-- Assignment Name -->
-            <span role='heading' aria-level='1'
-                  class="blockpy-name">
-                <strong>BlockPy: </strong> 
-                <span data-bind='text: assignment.name'></span>
-            </span>
-            
-            <!-- Reset Instructions Button -->
-            <div class="blockpy-instructions-reset"
-                data-bind="visible: ui.instructions.isChanged">
-                <a class="float-right"
-                    data-bind="click: ui.instructions.reset"
-                    href="">
-                    Reset instructions</a>
-            </div>
-            
-            <!-- Instructions -->
-            <div class='blockpy-instructions'
-                 data-bind="html: ui.instructions.current">
-            </div>
-        </div>
-        
-        <div class='col-md-3 blockpy-panel blockpy-quick-menu'
-             role='menubar' aria-label='Quick Menu' title="Quick Menu">
-            <!-- Get Shareable Link -->
-            <!--<button class="btn btn-outline-secondary btn-sm">
-                Get shareable link</button>-->
-            <span data-bind="visible: ui.menu.isSubmitted">
-                Your submission is ready to be reviewed!</span>
-            <button class="btn btn-outline-secondary btn-sm"
-                data-bind="visible: ui.menu.canMarkSubmitted,
-                           text: ui.menu.textMarkSubmitted,
-                           click: ui.menu.clickMarkSubmitted"></button>
-            <!-- View as instructor -->
-            <div class="form-check"
-                 data-bind="visible: ui.role.isGrader">
-                <input class="form-check-input" type="checkbox" value="" id="blockpy-as-instructor"
-                    data-bind="checked: display.instructor">
-                <label class="form-check-label" for="blockpy-as-instructor">
-                    View as instructor
-                </label>
-            </div>
-            <!-- Readonly mode for spying -->
-            <div data-bind="if: submission.ownerId() != user.id()">
-                Owner: <span data-bind="text: submission.ownerId"></span>
-                <div class="form-check">
-                    <input class="form-check-input" type="checkbox" value="blockpy-read-only"
-                        data-bind="checked: display.readOnly">
-                    <label class="form-check-label" for="blockpy-read-only">
-                        Readonly?
-                    </label>
-                </div>
-            </div>
-            
-            
-            <!-- Fullscreen button -->
-            <button class="btn btn-outline-secondary btn-sm"
-                data-bind="click: ui.menu.clickFullscreen"
-                title="Full Screen">
-                <span class='fas' data-bind="class: ui.menu.textFullscreen"></span>
-            </button>
-            <!-- Edit Queued Inputs -->
-            <button class="btn btn-outline-secondary btn-sm"
-                data-bind="click: ui.menu.editInputs, visible: ui.menu.showQueuedInputs" title="Edit Inputs">
-                <span class='fas fa-list-alt'></span>
-            </button>
-            <!-- Toggle Image Rendering -->
-            <button class="btn btn-outline-secondary btn-sm"
-                data-toggle="button"
-                data-bind="click: ui.menu.toggleImages" title="Toggle Images">
-                <span class="fas fa-images"></span>
-            </button>
-            <!-- Get Shareable Link Dialog -->
-            <button class="btn btn-outline-secondary btn-sm"
-                data-bind="click: ()=>ui.menu.startShare(false), visible: ui.menu.canShare"
-                title="Get Shareable Link for Instructors or TAs">
-                <span class="fas fa-link"></span>
-            </button>
-            <!-- Pink Bug for actual errors -->
-            <span class="blockpy-student-error fas fa-bug"></span>
-            <span data-bind="hidden: ui.menu.showClock" class="blockpy-menu-clock"></span>
-        </div>
-         
-    </div>
-    
-    <!-- ko if: ui.smallLayout() -->
-    <!-- Small layout View as instructor -->
-    <div class="form-check"
-         data-bind="visible: ui.role.isGrader">
-        <input class="form-check-input" type="checkbox" value="" id="blockpy-as-instructor"
-            data-bind="checked: display.instructor">
-        <label class="form-check-label" for="blockpy-as-instructor">
-            View as instructor
-        </label>
-    </div>
-    <!-- ko if: ui.files.visible() -->
-    ${FILES_HTML}
-    <!-- /ko -->
-    <!-- /ko -->
-    
-    <div class='row'>
-    <!-- Row 2: Console and Feedback -->
-    <!-- ko if: ui.secondRow.isAllVisible -->
-    <div data-bind="class: ui.secondRow.width">
-    <div class='row'>
-        <!-- Console -->
-        ${CONSOLE_HTML}
-        <!-- Feedback -->
-        <!-- ko if: ui.secondRow.isFeedbackVisible -->
-        ${FEEDBACK_HTML}
-        <!-- /ko -->
-        <!-- Trace -->
-        <!-- ko if: ui.secondRow.isTraceVisible -->
-        ${TRACE_HTML}
-        <!-- /ko -->
-    </div>
-    </div>
-    <!-- /ko -->
-    
-    <!-- Row 3: File Navigation -->
-    <!-- ko if: ui.files.visible() && !ui.smallLayout() -->
-    ${FILES_HTML}
-    <!-- /ko -->
-    
-    <!-- Row 4: View Row -->
-    ${EDITORS_HTML}
-    
-    </div>
-    
-    
-    <!-- Row 5: Footer Row -->    
-    <!-- ko if: ui.footer.visible -->
-    <div class="row">
-        ${FOOTER_HTML}
-    </div>
-    <!-- /ko -->
-    
-</div>
-    `;
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/server.js.html b/coverage/lcov-report/src/server.js.html deleted file mode 100644 index 9236d665b..000000000 --- a/coverage/lcov-report/src/server.js.html +++ /dev/null @@ -1,2164 +0,0 @@ - - - - - - Code coverage report for src/server.js - - - - - - - - - -
-
-

All files / src server.js

-
- -
- 8.71% - Statements - 32/367 -
- - -
- 0% - Branches - 0/131 -
- - -
- 0% - Functions - 0/65 -
- - -
- 8.79% - Lines - 32/364 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  - 
import {LocalStorageWrapper} from "./storage";
-import {loadAssignmentSettings, saveAssignmentSettings} from "./editor/assignment_settings";
- 
-/**
- *
- * @enum {string}
- */
-export let StatusState = {
-    READY: "ready",
-    ACTIVE: "active",
-    RETRYING: "retrying",
-    FAILED: "failed",
-    OFFLINE: "offline"
-};
- 
-/**
- * Object for communicating with the external servers. This includes functionality for
- * saving and loading files, logging events, saving completions, and retrieving history.
- *
- * @constructor
- * @this {BlockPyServer}
- * @param {Object} main - The main BlockPy instance
- */
-export function BlockPyServer(main) {
-    this.main = main;
- 
-    // Save URLs locally for quicker access
-    this.urls = main.model.configuration.urls;
- 
-    // Add the LocalStorage connection
-    this.storage = new LocalStorageWrapper("BLOCKPY");
- 
-    // FaultResistantCache
-    this.queue = {
-        "logEvent": JSON.parse(this.storage.getDefault("logEvent", "[]")),
-        "updateSubmission": JSON.parse(this.storage.getDefault("updateSubmission", "[]"))
-    };
-    this.MAX_QUEUE_SIZE = {
-        "logEvent": 200,
-        "updateSubmission": 50
-    };
- 
-    this.TIMER_DELAY = 1000;
-    this.FAIL_DELAY = 2000;
- 
-    this.timers = {};
- 
-    this.overlay = null;
-    this.blockingAttempts = 0;
- 
-    this.cachedFilenames = [];
-    this.createSubscriptions();
-    this.checkCaches();
- 
-    this.altLogEntry = null;
-}
- 
-/**
- * Checks whether the IP address has changed, logging an event if that occurs.
- * @param response
- */
-BlockPyServer.prototype.checkIP = function (response) {
-    if (response.success) {
-        if (this.storage.has("IP")) {
-            let oldIP = this.storage.get("IP");
-            if (oldIP !== response.ip) {
-                let message = JSON.stringify({
-                    "old": oldIP,
-                    "new": response.ip
-                });
-                if (this.altLogEntry) {
-                    this.altLogEntry("X-IP.Change", undefined, undefined, message);
-                } else {
-                    this.logEvent("X-IP.Change", undefined, undefined, message);
-                }
-                this.storage.set("IP", response.ip);
-            }
-        } else {
-            this.storage.set("IP", response.ip);
-        }
-    }
-};
- 
-/**
- * Determines if there have been previous failures cached, and if so retries them.
- * TODO: update
- */
-BlockPyServer.prototype.checkCaches = function () {
-    if (this.storage.has("saveAssignment")) {
-        let data = JSON.parse(this.storage.get("saveAssignment"));
-        this._postLatestRetry(data, "assignment",
-                              "saveAssignment", this.TIMER_DELAY);
-    }
-    this.cachedFilenames.forEach((filename) => {
-        if (this.storage.has("saveFile" + filename)) {
-            let data = JSON.parse(this.storage.get("saveFile" + filename));
-            this._postLatestRetry(data, filename, "saveFile", this.TIMER_DELAY);
-        }
-    });
-    var server = this;
-    Object.keys(this.queue).forEach(function (endpoint) {
-        (function pushAnyQueued(response) {
-            if (response.success) {
-                if (server.queue[endpoint].length) {
-                    var data = JSON.parse(server.queue[endpoint].pop());
-                    var url = server.urls[endpoint];
-                    server._postRetry(data, endpoint, 1000, pushAnyQueued);
-                }
-            }
-        })({"success": true});
-    });
-};
- 
-BlockPyServer.prototype.createFileSubscription = function (model, filename) {
-    model.subscribe((contents) =>
-        this.main.model.display.autoSave() ? this.saveFile(filename, contents) : false, this);
-    this.cachedFilenames.push(filename);
-};
- 
-/**
- * TODO: fix
- */
-BlockPyServer.prototype.createSubscriptions = function () {
-    let model = this.main.model;
-    this.createFileSubscription(model.submission.code, "answer.py");
-    this.createFileSubscription(model.assignment.onRun, "!on_run.py");
-    this.createFileSubscription(model.assignment.onEval, "!on_eval.py");
-    this.createFileSubscription(model.assignment.onChange, "!on_change.py");
-    this.createFileSubscription(model.assignment.instructions, "!instructions.md");
-    this.createFileSubscription(model.assignment.startingCode, "^starting_code.py");
-    this.createFileSubscription(model.ui.files.extraStudentFiles, "#extra_student_files.blockpy");
-    this.createFileSubscription(model.ui.files.extraStartingFiles, "#extra_starting_files.blockpy");
-    this.createFileSubscription(model.ui.files.extraInstructorFiles, "#extra_instructor_files.blockpy");
-};
- 
-BlockPyServer.prototype.createEventLogs = function() {
-    window.onblur = () => {
-        this.logEvent("Session.End", undefined, undefined, undefined);
-    };
-    window.onfocus = () => {
-        this.logEvent("Session.Start", undefined, undefined, undefined);
-    };
- 
-    // TODO: Add in beacon?
-};
- 
-/**
- *
- * Some subscriptions have to happen after other things have been loaded.
- * Right now this is just after CORGIS libraries have been loaded, but maybe
- * we'll add more later and this will need to be refactored.
- *
- * TODO: fix
- *
- */
-BlockPyServer.prototype.finalizeSubscriptions = function () {
-    //this.main.model.assignment.settings.datasets.subscribe(this.saveAssignment.bind(this));
-};
- 
-BlockPyServer.prototype.authorizeHeader = function(currentSettings) {
-    if (!currentSettings) {
-        currentSettings = {};
-    }
-    const accessToken = this.main.model.configuration.accessToken();
-    if (accessToken) {
-        if (!currentSettings.headers) {
-            currentSettings.headers = {};
-        }
-        currentSettings.headers["Authorization"] = "Bearer " + accessToken;
-    }
-    return currentSettings;
-};
- 
-/**
- * Creates the default payload for any communication with the server API
- * @returns {{assignment_id: *, course_id: *, group_id: *, user_id: *, timezone: *, version: *, timestamp: *}}
- */
-BlockPyServer.prototype.createServerData = function () {
-    let assignment = this.main.model.assignment;
-    let user = this.main.model.user;
-    let submission = this.main.model.submission;
-    let display = this.main.model.display;
-    const configuration = this.main.model.configuration;
-    let now = new Date();
-    let microseconds = now.getTime();
-    let result = {
-        "assignment_id": assignment.id(),
-        "assignment_group_id": user.groupId(),
-        "course_id": user.courseId(),
-        "submission_id": submission.id(),
-        "user_id": user.id(),
-        "version": assignment.version(),
-        "timestamp": microseconds,
-        "timezone": now.getTimezoneOffset(),
-        "passcode": display.passcode(),
-        "part_id": configuration.partId()
-    };
-    return result;
-};
- 
-/**
- * Updates the status and message for the relevant endpoint.
- * @param endpoint {string} one of the URL endpoints
- * @param status {StatusState}
- * @param message {string?}
- */
-BlockPyServer.prototype.setStatus = function (endpoint, status, message) {
-    if (endpoint in this.main.model.status) {
-        this.main.model.status[endpoint](status);
-        this.main.model.status[endpoint + "Message"](message || "");
-    }
-};
- 
-/**
- * Renders an overlay on the screen that blocks operation until the system is ready.
- * The overlay gets progressively darker to indicate repeated failures.
- */
-BlockPyServer.prototype.showOverlay = function (attempt) {
-    this.blockingAttempts += 1;
-    if (!document.getElementsByClassName("blockpy-overlay").length) {
-        this.overlay = $('<div class="blockpy-overlay"> </div>');
-        this.overlay.appendTo(document.body);
-    }
-    switch (attempt) {
-        case 0:
-            this.overlay.css("background-color", "#988");
-            break;
-        case 1:
-            this.overlay.css("background-color", "#655");
-            break;
-        case 2:
-            this.overlay.css("background-color", "#333");
-            break;
-        default:
-            this.overlay.css("background-color", "black");
-            break;
-    }
-};
- 
-/**
- * Undo a level of overlay; if this was the last level, removes it from the screen.
- */
-BlockPyServer.prototype.hideOverlay = function () {
-    this.blockingAttempts -= 1;
-    if (this.blockingAttempts <= 0) {
-        this.overlay.remove();
-    }
-};
- 
-BlockPyServer.prototype._enqueueData = function (cache, data) {
-    // Ensure we have not overfilled the queue
-    let length = this.queue[cache].length;
-    let max = this.MAX_QUEUE_SIZE[cache];
-    if (length > max) {
-        this.queue[cache] = this.queue[cache].slice(length - max, max);
-    }
-    // Only add the element if it's new
-    let key = JSON.stringify(data);
-    let index = this.queue[cache].indexOf(key);
-    if (index === -1) {
-        this.queue[cache].push(key);
-        this.storage.set(cache, JSON.stringify(this.queue[cache]));
-    }
-};
- 
-BlockPyServer.prototype._dequeueData = function (cache, data) {
-    let key = JSON.stringify(data);
-    let index = this.queue[cache].indexOf(key);
-    if (index >= 0) {
-        this.queue[cache].splice(index);
-        this.storage.set(cache, JSON.stringify(this.queue[cache]));
-    }
-};
- 
- 
-BlockPyServer.prototype._postRetry = function (data, endpoint, delay, callback) {
-    // Trigger request
-    let postRequest = () => {
-        // Make a backup of the current post
-        this._enqueueData(endpoint, data);
-        $.ajax({url: this.urls[endpoint], type: "post", data: data, ...this.authorizeHeader()})
-            .done((response) => {
-                this._dequeueData(endpoint, data);
-                if (response.success) {
-                    this.setStatus(endpoint, StatusState.READY);
-                } else {
-                    console.error(response);
-                    this.setStatus(endpoint, StatusState.FAILED, response.message);
-                }
-                if (callback) {
-                    callback(response);
-                }
-                if (response.success) {
-                    this.checkIP(response.ip);
-                }
-            })
-            // If server request is the latest one, then let's try it again in a bit
-            .fail((error, textStatus) => {
-                this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
-                this._postRetry(data, endpoint, delay + this.FAIL_DELAY, callback);
-            });
-    };
-    if (delay === null) {
-        postRequest();
-    } else {
-        setTimeout(postRequest, delay);
-    }
-};
- 
-/**
- * Make a AJAX request that, upon failure, will check to see if this was the
- * latest attempt for this `cache` marker. If so, it will attempt again until
- * successful; otherwise, it gives up the request.
- *
- * @param {Object} data - The AJAX-ready data to be posted
- * @param {String} filename - The unique name given to the relevant timer
- * @param {String} endpoint - The unique name given to the relevant cache entry
- * @param {Integer} delay - The current number of milliseconds to wait before
- trying the request again.
- */
-BlockPyServer.prototype._postLatestRetry = function (data, filename, endpoint, delay, failureFunction, doneFunction) {
-    let cache = endpoint + filename;
-    let request = () => {
-        // Make a backup of the current post
-        this.storage.set(cache, JSON.stringify(data));
-        let time = this.storage.getTime(cache);
-        // Send the request
-        $.ajax({url: this.urls[endpoint], data: data, type: "post", ...this.authorizeHeader()})
-            .done((response) => {
-                if (response.success) {
-                    this.checkIP(response);
-                    // If server request is the latest one, clear it from the cache
-                    let cachedTime = this.storage.getTime(cache);
-                    if (time >= cachedTime) {
-                        this.storage.remove(cache);
-                    }
-                    this.setStatus(endpoint, StatusState.READY);
-                } else {
-                    // This connected but failed, don't try again but let the user know why.
-                    this.setStatus(endpoint, StatusState.FAILED, response.message);
-                    if (response.success === false) {
-                        // If we're the latest one, clear it from the cache
-                        let cachedTime = this.storage.getTime(cache);
-                        if (time >= cachedTime) {
-                            this.storage.remove(cache);
-                        }
-                        if (failureFunction) {
-                            failureFunction(response);
-                        }
-                    }
-                }
-            })
-            .fail((error, textStatus) => {
-                this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
-                // If server request is the latest one, then let's try it again in a bit
-                let cachedTime = this.storage.getTime(cache);
-                if (time >= cachedTime) {
-                    this._postLatestRetry(data, filename, endpoint, delay + this.FAIL_DELAY);
-                }
-            })
-            .done(doneFunction);
-    };
-    clearTimeout(this.timers[cache]);
-    if (delay === null) {
-        return request();
-    } else {
-        this.timers[cache] = setTimeout(request, delay);
-    }
-};
- 
-BlockPyServer.prototype._postBlocking = function (endpoint, data, attempts, success, failure, extraSettings={}) {
-    this.showOverlay(attempts);
-    return $.ajax({
-        type: "POST",
-        url: this.urls[endpoint],
-        data: data,
-        ...this.authorizeHeader(extraSettings)
-    })
-        .done((response) => {
-            this.hideOverlay();
-            this.setStatus(endpoint, StatusState.READY);
-            success(response);
-            this.checkIP(response);
-        })
-        .fail((e, textStatus, errorThrown) => {
-            if (attempts <= 0) {
-                this.hideOverlay();
-                this.setStatus(endpoint, StatusState.FAILED, textStatus.toString());
-                if (failure) {
-                    failure(e, textStatus, errorThrown);
-                }
-            } else {
-                setTimeout(() => {
-                    this.hideOverlay();
-                    this.setStatus(endpoint, StatusState.RETRYING, textStatus.toString());
-                    this._postBlocking(endpoint, data, attempts - 1, success, failure, extraSettings);
-                }, this.FAIL_DELAY);
-            }
-        });
-};
- 
- 
-BlockPyServer.prototype.loadAssignment = function (assignment_id) {
-    let model = this.main.model;
-    if (model.ui.server.isEndpointConnected("loadAssignment")) {
-        let data = this.createServerData();
-        data["assignment_id"] = assignment_id;
-        this._postBlocking("loadAssignment", data, 4,
-                           (response) => {
-                               if (response.success) {
-                                   this.main.loadAssignmentData_(response);
-                               } else {
-                                   this.setStatus("loadAssignment", StatusState.FAILED, response.message);
-                                   this.main.components.dialog.ERROR_LOADING_ASSIGNMNENT(response.message);
-                               }
-                           },
-                           (e, textStatus, errorThrown) => {
-                               this.main.components.dialog.ERROR_LOADING_ASSIGNMNENT(textStatus);
-                               console.error(e, textStatus, errorThrown);
-                           });
-    } else {
-        this.setStatus("loadAssignment", StatusState.OFFLINE);
-    }
-};
- 
-BlockPyServer.prototype.saveAssignment = function () {
-    let model = this.main.model;
-    if (model.ui.server.isEndpointConnected("saveAssignment")) {
-        let data = this.createServerData();
-        data["hidden"] = model.assignment.hidden();
-        data["reviewed"] = model.assignment.reviewed();
-        data["public"] = model.assignment.public();
-        data["url"] = model.assignment.url();
-        data["points"] = model.assignment.points();
-        data["ip_ranges"] = model.assignment.ipRanges();
-        data["name"] = model.assignment.name();
-        data["settings"] = saveAssignmentSettings(model);
- 
-        this._postBlocking("saveAssignment", data, 3,
-                           this.startPossibleFork.bind(this),
-                           (e, textStatus, errorThrown) => {
-                               this.main.components.dialog.ERROR_SAVING_ASSIGNMNENT(textStatus);
-                               console.error(e, textStatus, errorThrown);
-                           });
-    } else {
-        this.setStatus("saveAssignment", StatusState.OFFLINE, "Server is not connected! (Save Assignment)");
-    }
-};
- 
-BlockPyServer.prototype.loadHistory = function (callback) {
-    if (this.main.model.ui.server.isEndpointConnected("loadHistory")) {
-        let model = this.main.model;
-        let data = this.createServerData();
-        this._postBlocking("loadHistory", data, 2, callback,
-                           (e, textStatus, errorThrown) => {
-                               this.main.components.dialog.ERROR_LOADING_HISTORY();
-                               console.error(e, textStatus, errorThrown);
-                           });
-    }
-};
- 
-BlockPyServer.prototype.listUploadedFiles = function (callback) {
-    if (this.main.model.ui.server.isEndpointConnected("listUploadedFiles")) {
-        let model = this.main.model;
-        let data = this.createServerData();
-        this._postBlocking("listUploadedFiles", data, 2, callback,
-                           (e, textStatus, errorThrown) => {
-                               this.main.components.dialog.ERROR_LISTING_UPLOADED_FILES(textStatus);
-                               console.error(e, textStatus, errorThrown);
-                           });
-    }
-};
- 
-BlockPyServer.prototype.uploadFile = function (placement, directory, filename, contents, callback, deleteInstead=false) {
-    let model = this.main.model;
-    if (model.ui.server.isEndpointConnected("uploadFile")) {
-        let data = this.createServerData();
-        data["placement"] = placement;
-        data["directory"] = directory;
-        data["filename"] = filename;
-        data["contents"] = contents;
-        if (deleteInstead) {
-            data["delete"] = true;
-        }
-        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
-        return this._postBlocking("uploadFile", fd, 3,
-                                  callback,
-                                  (e, textStatus, errorThrown) => {
-                                      if (deleteInstead) {
-                                          this.main.components.dialog.ERROR_DELETING_FILE(textStatus);
-                                      } else {
-                                          this.main.components.dialog.ERROR_UPLOADING_FILE(textStatus);
-                                      }
-                                      console.error(e, textStatus, errorThrown);
-                                  }, {processData: false, contentType: false});
-    } else {
-        this.setStatus("uploadFile", StatusState.OFFLINE, "Server is not connected! (Upload File)");
-    }
-};
- 
-BlockPyServer.prototype.downloadFile = function (placement, directory, filename, callback) {
-    let model = this.main.model;
-    if (model.ui.server.isEndpointConnected("downloadFile")) {
-        let data = this.createServerData();
-        data["placement"] = placement;
-        data["directory"] = directory;
-        data["filename"] = filename;
-        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
-        return this._postBlocking("downloadFile", fd, 3,
-                                  callback,
-                                  (e, textStatus, errorThrown) => {
-                                      this.main.components.dialog.ERROR_DOWNLOADING_FILE(textStatus);
-                                      console.error(e, textStatus, errorThrown);
-                                  }, {processData: false, contentType: false, dataType: "text"});
-    } else {
-        this.setStatus("uploadFile", StatusState.OFFLINE, "Server is not connected! (Upload File)");
-    }
-};
- 
-BlockPyServer.prototype.renameFile = function (placement, directory, old_filename, new_filename, callback) {
-    let model = this.main.model;
-    if (model.ui.server.isEndpointConnected("renameFile")) {
-        let data = this.createServerData();
-        data["placement"] = placement;
-        data["directory"] = directory;
-        data["old_filename"] = old_filename;
-        data["new_filename"] = new_filename;
-        let fd = Object.entries(data).reduce((d,e) => (d.append(...e), d), new FormData());
-        return this._postBlocking("renameFile", fd, 3,
-                                  callback,
-                                  (e, textStatus, errorThrown) => {
-                                      this.main.components.dialog.ERROR_UPLOADING_FILE(textStatus);
-                                      console.error(e, textStatus, errorThrown);
-                                  }, {processData: false, contentType: false});
-    } else {
-        this.setStatus("renameFile", StatusState.OFFLINE, "Server is not connected! (Rename File)");
-    }
-};
- 
-BlockPyServer.prototype.logEvent = function (event_type, category, label, message, file_path) {
-    if (this.main.model.display.readOnly()) {
-        this.setStatus("logEvent", StatusState.OFFLINE);
-        return;
-    }
-    if (this.main.model.ui.server.isEndpointConnected("logEvent")) {
-        let data = this.createServerData();
-        data["event_type"] = event_type;
-        data["category"] = category;
-        data["label"] = label;
-        data["message"] = message;
-        data["file_path"] = file_path;
-        this.setStatus("logEvent", StatusState.ACTIVE);
-        // Trigger request
-        this._postRetry(data, "logEvent", 0, () => {
-        });
-    } else {
-        this.setStatus("logEvent", StatusState.OFFLINE);
-    }
-};
- 
-BlockPyServer.prototype.saveImage = function (directory, image) {
-    if (this.main.model.display.readOnly()) {
-        this.setStatus("saveImage", StatusState.OFFLINE);
-        return;
-    }
-    if (this.main.model.ui.server.isEndpointConnected("saveImage")) {
-        let data = this.createServerData();
-        data["directory"] = directory;
-        data["image"] = image;
-        this.setStatus("saveImage", StatusState.ACTIVE);
-        // Trigger request
-        this._postLatestRetry(data, "turtle_output", "saveImage", 0);
-    } else {
-        this.setStatus("saveImage", StatusState.OFFLINE);
-    }
-};
- 
-BlockPyServer.prototype.updateSubmissionStatus = function(newStatus) {
-    if (this.main.model.display.readOnly()) {
-        this.setStatus("updateSubmissionStatus", StatusState.OFFLINE);
-        return;
-    }
-    if (this.main.model.ui.server.isEndpointConnected("updateSubmissionStatus")) {
-        let data = this.createServerData();
-        data["status"] = newStatus;
-        let postStatusChange = (data) => {
-            if (data.success) {
-                this.main.model.submission.submissionStatus(newStatus);
-            }
-        };
-        this._postBlocking("updateSubmissionStatus", data, 2, postStatusChange,
-                           (e, textStatus, errorThrown) => {
-                               this.main.components.dialog.ERROR_UPDATING_SUBMISSION_STATUS();
-                               console.error(e, textStatus, errorThrown);
-                           });
-    }
-};
- 
-/**
- * This function can be used to load files and web resources.
- *
- * DEPRECATED
- */
-BlockPyServer.prototype.loadFile = function (filename, type, callback, errorCallback) {
-    var model = this.main.model;
-    var server = this;
-    if (model.ui.server.isEndpointConnected("load_file")) {
-        var data = this.createServerData();
-        data["filename"] = filename;
-        data["type"] = type;
-        this._postBlocking(this.urls.load_file, data, 5,
-                           function (response) {
-                               if (response.success) {
-                                   callback(response.data);
-                               } else {
-                                   errorCallback(response.message);
-                                   server.setStatus("loadFile", StatusState.FAILED, response.message);
-                               }
-                           },
-                           function (e, textStatus, errorThrown) {
-                               errorCallback("Server failure! Report to instructor");
-                               console.error(errorThrown);
-                           });
-    } else {
-        errorCallback("No file server available.");
-        this.setStatus("loadFile", StatusState.OFFLINE, "Server is not connected! (Load File)");
-    }
-};
- 
-BlockPyServer.prototype.saveFile = function (filename, contents, delay) {
-    if (delay === undefined) {
-        delay = this.TIMER_DELAY;
-    }
-    let model = this.main.model;
-    if (model.display.readOnly()) {
-        this.setStatus("saveFile", StatusState.OFFLINE);
-        return;
-    }
-    if (model.ui.server.isEndpointConnected("saveFile")) {
-        let data = this.createServerData();
-        data["filename"] = filename;
-        data["code"] = contents;
-        this.setStatus("saveFile", StatusState.ACTIVE);
-        return this._postLatestRetry(data, filename, "saveFile", delay, this.startPossibleFork.bind(this));
-    } else {
-        return this.setStatus("saveFile", StatusState.OFFLINE);
-    }
-};
- 
-BlockPyServer.prototype.startPossibleFork = function (response) {
-    if (!response.success && response.forkable) {
-        this.main.components.dialog.OFFER_FORK();
-    }
-};
- 
-BlockPyServer.prototype.updateSubmission = function (score, correct, hiddenOverride, forceUpdate) {
-    if (this.main.model.display.readOnly()) {
-        this.setStatus("updateSubmission", StatusState.OFFLINE);
-        return;
-    }
-    let callback = this.main.model.configuration.callbacks.success;
-    if (this.main.model.ui.server.isEndpointConnected("updateSubmission")) {
-        let data = this.createServerData();
-        data["score"] = score;
-        data["correct"] = correct;
-        data["hidden_override"] = hiddenOverride;
-        data["force_update"] = forceUpdate;
-        this.main.components.pythonEditor.bm.blockEditor.getPngFromBlocks((pngData, img) => {
-            data["image"] = pngData;
-            if (img.remove) {
-                img.remove();
-            }
-            this._postRetry(data, "updateSubmission", 0,
-                            (response) => {
-                                if (response.success) {
-                                    this.setStatus("updateSubmission", StatusState.READY);
-                                } else {
-                                    this.setStatus("updateSubmission", StatusState.FAILED, response.message);
-                                }
-                                if (!hiddenOverride && correct && callback) {
-                                    callback(data["assignment_id"]);
-                                }
-                            });
-        });
-    }
-};
- 
-BlockPyServer.prototype.openaiProxy = function (openai_data) {
-    var model = this.main.model;
-    var server = this;
-    var data = this.createServerData();
-    data["openai_data"] = openai_data;
-    return this._postBlocking(this.urls.openai_proxy, data);
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/storage.js.html b/coverage/lcov-report/src/storage.js.html deleted file mode 100644 index 22efc8ce8..000000000 --- a/coverage/lcov-report/src/storage.js.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - Code coverage report for src/storage.js - - - - - - - - - -
-
-

All files / src storage.js

-
- -
- 70.96% - Statements - 22/31 -
- - -
- 25% - Branches - 1/4 -
- - -
- 50% - Functions - 6/12 -
- - -
- 70.96% - Lines - 22/31 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110  -3x -3x -3x -3x -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -3x -2x -2x -  -  -  -  -  -  -  -3x -1x -1x -  -  -  -  -  -  -  -3x -1x -  -  -  -  -  -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -3x -1x -  -  -1x -1x -  -  -  -  -  -  -  -  -3x -2x -  -  -  -  -  -  -  -  -  -  -3x -  -  -  - 
let LOCAL_STORAGE_REF;
-try {
-    LOCAL_STORAGE_REF = localStorage;
-    let mod = "BLOCKPY_LOCALSTORAGE_TEST";
-    LOCAL_STORAGE_REF.setItem(mod, mod);
-    LOCAL_STORAGE_REF.removeItem(mod);
-} catch(e) {
-    LOCAL_STORAGE_REF = {
-        _data       : {},
-        setItem     : function(id, val) { return this._data[id] = String(val); },
-        getItem     : function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : null; },
-        removeItem  : function(id) { return delete this._data[id]; },
-        clear       : function() { return this._data = {}; }
-    };
-}
- 
-/**
- * Helper object for interfacing with the LocalStorage. The LocalStorage
- * browser API allows for offline storage. That API is very unsophisticated,
- * and is essentially a lame key-value store. This object sits on top
- * and provides a number of useful utilities, including rudimentarycache
- * cache expiration.
- *
- * @constructor
- * @this {LocalStorageWrapper}
- * @param {String} namespace - A namespace to use in grouping access to localstorage. This keeps access clean and organized, while also making it possible to have multiple LocalStorage connections.
- */
-export function LocalStorageWrapper(namespace) {
-    this.namespace = namespace;
-}
-/**
- * A method for adding a key/value pair to LocalStorage.
- * Note that both parameters must be strings (JSON.stringify is your friend).
- *
- * @param {String} key - The name of the key.
- * @param {String} value - The value.
- */
-LocalStorageWrapper.prototype.set =  function(key, value) {
-    LOCAL_STORAGE_REF.setItem(this.namespace+"_"+key+"_value", value);
-    LOCAL_STORAGE_REF.setItem(this.namespace+"_"+key+"_timestamp", $.now());
-};
- 
-/**
- * A method for removing a key from LocalStorage.
- *
- * @param {String} key - The name of the key to remove.
- */
-LocalStorageWrapper.prototype.remove = function(key) {
-    LOCAL_STORAGE_REF.removeItem(this.namespace+"_"+key+"_value");
-    LOCAL_STORAGE_REF.removeItem(this.namespace+"_"+key+"_timestamp");
-};
- 
-/**
- * A method for retrieving the value associated with the given key.
- *
- * @param {String} key - The name of the key to retrieve the value for.
- */
-LocalStorageWrapper.prototype.get = function(key) {
-    return LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_value");
-};
- 
-/**
- * A method for retrieving the time associated with the given key.
- *
- * @param {String} key - The name of the key to retrieve the time for.
- * @returns {Integer} - The timestamp (local epoch) when the key was last set.
- */
-LocalStorageWrapper.prototype.getTime = function(key) {
-    return parseInt(LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_timestamp"));
-};
- 
-/**
- * A method for retrieving the value associated with the given key.
- * If the key does not exist, then the default value is used instead.
- * This default will be set.
- *
- * @param {String} key - The name of the key to retrieve the value for.
- * @param {String} defaultValue - The default value to use. Must be a string.
- */
-LocalStorageWrapper.prototype.getDefault = function(key, defaultValue) {
-    Iif (this.has(key)) {
-        return this.get(key);
-    } else {
-        this.set(key, defaultValue);
-        return defaultValue;
-    }
-};
- 
-/**
- * A test for whether the given key is in LocalStorage.
- *
- * @param {String} key - The key to test existence for.
- */
-LocalStorageWrapper.prototype.has = function(key) {
-    return LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_value") !== null;
-};
- 
-/**
- * A test for whether the server has the newer version. This function
- * assumes that the server trip takes about 5 seconds. This method
- * is largely deprecated.
- *
- * @param {String} key - The key to check.
- * @param {Integer} server_time - The server's time as an epoch (in milliseconds)
- */
-LocalStorageWrapper.prototype.is_new = function(key, server_time) {
-    var stored_time = LOCAL_STORAGE_REF.getItem(this.namespace+"_"+key+"_timestamp");
-    return (server_time >= stored_time+5000);
-};
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/toolbar.js.html b/coverage/lcov-report/src/toolbar.js.html deleted file mode 100644 index 3edb7aa77..000000000 --- a/coverage/lcov-report/src/toolbar.js.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - Code coverage report for src/toolbar.js - - - - - - - - - -
-
-

All files / src toolbar.js

-
- -
- 0% - Statements - 0/50 -
- - -
- 0% - Branches - 0/6 -
- - -
- 0% - Functions - 0/12 -
- - -
- 0% - Lines - 0/50 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * An object that manages the main toolbar, including the different mode buttons.
- * This doesn't actually have many responsibilities after the initial load.
- *
- * @constructor
- * @this {BlockPyToolbar}
- * @param {Object} main - The main BlockPy instance
- * @param {HTMLElement} tag - The HTML object this is attached to.
- */
-function BlockPyToolbar(main, tag) {
-    this.main = main;
-    this.tag = tag;
-    
-    // Holds the HTMLElement tags for each of the toolbar items
-    this.tags = {};
-    this.tags.mode_set_text = this.tag.find(".blockpy-mode-set-text");
-    this.tags.filename_picker = this.tag.find(".blockpy-toolbar-filename-picker");
-    
-    // Actually set up the toolbar!
-    this.activateToolbar();
-}
- 
- 
- 
-/**
- * Register click events for more complex toolbar actions.
- *
- * Note: Pretty sure these are all deprecated!
- */
-BlockPyToolbar.prototype.activateToolbar = function() {
-    var main = this.main;
-    this.tag.find(".blockpy-run").click(function(e) {
-        //main.components.server.logEvent('editor', 'run')
-        var backup = this;
-        main.components.feedback.clear();
-        $(this).removeClass("btn-success").addClass("btn-warning")
-        //.html("Running")
-        ;
-        //setTimeout(function() {
-        main.components.engine.on_run();
-        $(backup)
-            //.html('<span class="glyphicon glyphicon-play"></span> Run')
-            .removeClass("btn-warning")
-            .addClass("btn-success");
-        //}, 20);
-    });
-    this.tags.mode_set_text.click(function() {
-        main.components.server.logEvent("editor", "text");
-        main.model.settings.editor("Text");
-    });
-    this.tag.find(".blockpy-toolbar-reset").click(function() {
-        main.model.programs["__main__"](main.model.programs["starting_code"]());
-        //main.components.editor.updateBlocks();
-        main.components.server.logEvent("editor", "reset");
-        if (main.model.assignment.parsons()) {
-            main.components.editor.blockly.shuffle();
-        }
-    });
-    this.tag.find(".blockpy-mode-set-blocks").click(function(event) {
-        if (main.model.areBlocksUpdating()) {
-            main.components.server.logEvent("editor", "blocks");
-            main.model.settings.editor("Blocks");
-        } else {
-            event.preventDefault();
-            return false;
-        }
-    });
-    /*this.tag.find('.blockpy-mode-set-instructor').click(function() {
-        main.model.settings.editor("Instructor");
-        main.components.server.logEvent('editor', 'instructor')
-    });*/
-    this.tag.find(".blockpy-mode-set-split").click(function(event) {
-        if (main.model.areBlocksUpdating()) {
-            main.model.settings.editor("Split");
-            main.components.server.logEvent("editor", "split");
-        } else {
-            event.preventDefault();
-            return false;
-        }
-    });
-    this.tag.find(".blockpy-toolbar-import").click(function() {
-        main.components.corgis.openDialog();
-        main.components.server.logEvent("editor", "import");
-    });
-    this.tag.find(".blockpy-toolbar-history").click(function() {
-        main.components.history.openDialog();
-        main.components.server.logEvent("editor", "history");
-    });
-    var instructorDialog = this.main.model.constants.container.find(".blockpy-instructor-popup");
-    this.tag.find(".blockpy-toolbar-instructor").click(function() {
-        instructorDialog.modal({"backdrop": false}).modal("show");
-        instructorDialog.draggable({
-            "handle": ".modal-title"
-        });
-        main.components.server.logEvent("editor", "instructor");
-    });
-    this.tag.find(".blockpy-toolbar-english").click(function() {
-        main.components.english.openDialog();
-        main.components.server.logEvent("editor", "english");
-    });
-    /*
-    var uploadButton = this.tag.find(".blockpy-toolbar-upload");
-    uploadButton.change(function() {
-        var fr = new FileReader();
-        var files = uploadButton[0].files;
-        fr.onload = function(e) {
-            fn = e.target.fileName;
-            var code = e.target.result;
-            if (fn.endsWith(".ipynb")) {
-                ipynb = JSON.parse(code);
-                var makePython = function(cell) {
-                    if (cell.cell_type == "code") {
-                        return cell.source.join("\n");
-                    } else if (cell.cell_type == "markdown" ||
-                               cell.cell_type == "raw") {
-                        return "'''"+cell.source.join("\n")+"'''";
-                    }
-                };
-                var isUsable = function(cell) {
-                    if (cell.cell_type == "code") {
-                        return cell.source.length > 0 && 
-                               !cell.source[0].startsWith("%");
-                    } else {
-                        return cell.cell_type == "markdown" ||
-                               cell.cell_type == "raw";
-                    }
-                };
-                code = ipynb.cells.filter(isUsable).map(makePython).join("\n");
-            }
-            main.setCode(code);
-            main.components.server.logEvent("editor", "upload", code);
-            main.components.engine.on_run();
-        };
-        fr.fileName = files[0].name;
-        fr.readAsText(files[0]);
-        uploadButton.val("");
-    });*/
- 
-    /*
-    var downloadButton = this.tag.find(".blockpy-toolbar-download");
-    downloadButton.click(function() {
-        var data = main.model.programs["__main__"]();
-        var filename="blockpy_"+main.model.assignment.name();
-        // Make safe
-        filename = filename.replace(/[^a-z0-9]/gi, "_").toLowerCase();
-        // Make the data download as a file
-        var blob = new Blob([data], {type: "text/plain"});
-        if(window.navigator.msSaveOrOpenBlob) {
-            window.navigator.msSaveBlob(blob, filename);
-        } else{
-            var elem = window.document.createElement("a");
-            elem.href = window.URL.createObjectURL(blob);
-            elem.download = filename;        
-            document.body.appendChild(elem);
-            elem.click();        
-            document.body.removeChild(elem);
-        }
-        main.components.server.logEvent("editor", "download");
-    });*/
-    
-    this.tag.find(".blockpy-toolbar-filename-picker label").click(function() {
-        main.model.settings.filename($(this).data("filename"));
-    });
-};
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/trace.js.html b/coverage/lcov-report/src/trace.js.html deleted file mode 100644 index 90d241ecd..000000000 --- a/coverage/lcov-report/src/trace.js.html +++ /dev/null @@ -1,1114 +0,0 @@ - - - - - - Code coverage report for src/trace.js - - - - - - - - - -
-
-

All files / src trace.js

-
- -
- 4.54% - Statements - 2/44 -
- - -
- 0% - Branches - 0/46 -
- - -
- 0% - Functions - 0/3 -
- - -
- 4.54% - Lines - 2/44 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -3444x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
export const TRACE_HTML = `
- 
-<div class="blockpy-trace col-md-6 blockpy-panel"
-            role="region" aria-label="Trace">
-    
-    <div class="clearfix">
-        <strong>Trace: </strong>
-        
-        <!-- Feedback/Trace Visibility Control -->
-        <button type='button'
-                class='btn btn-sm btn-outline-secondary float-right blockpy-hide-trace'
-                data-bind="click: ui.secondRow.advanceState">
-            <span class='fas fa-eye'></span> Hide Trace
-        </button>
-    </div>
- 
-    <div class="input-group mb-3 blockpy-trace-controls">
-        <div class="input-group-prepend">
-            <button type='button' class='btn btn-outline-secondary'
-                data-bind="click: ui.trace.first">
-                <span class='fas fa-step-backward'></span>
-            </button>
-            <button type='button' class='btn btn-outline-secondary'
-                data-bind="click: ui.trace.backward">
-                <span class='fas fa-backward'></span>
-            </button>
-            <span class="input-group-text">Step:</span>
-            <span class="input-group-text">
-                <span data-bind='text: execution.student.currentTraceStep'></span>
-                / <span data-bind='text: execution.student.lastStep'></span>
-            </span>
-        </div>
-        <div class="input-group-append">
-            <button type='button' class='btn btn-outline-secondary'
-                data-bind="click: ui.trace.forward">
-                <span class='fas fa-forward'></span>
-            </button>
-            <button type='button' class='btn btn-outline-secondary'
-                data-bind="click: ui.trace.last">
-                <span class='fas fa-step-forward'></span>
-            </button>
-            <span class="input-group-text">
-                <span data-bind='text: ui.trace.line'></span>
-            </span>
-        </div>
-    </div>
-    <p data-bind="text: ui.trace.ast"></p>
-    <p>Variables after this step:</p>
-    <table class='table table-sm table-striped table-bordered table-hover'>
-        <thead>
-            <tr><th>Name</th><th>Type</th><th>Value</th></tr>
-        </thead>
-        <tbody data-bind="foreach: ui.trace.data().properties">
-            <tr data-bind="visible: name != '__file__' && name != '__path__'">
-                <td data-bind="text: name"></td>
-                <td data-bind="text: type"></td>
-                <td>
-                    <code data-bind="text: value"></code>
-                    <!-- ko if: type == "List" -->
-                    
-                    <a href="" data-bind="click: //$root.viewExactValue(type, exact_value)">
-                    <span class='glyphicon glyphicon-new-window'></span>
-                    </a>
-                    <!-- /ko -->
-                </td>
-            </tr>
-        </tbody>
-    </table>
-    
-</div>
-`;
- 
-export const AST_DESCRIPTIONS = {
-    "Add": "An addition operator",
-    "And": "A boolean AND operator",
-    "AnnAssign": "An annotated assignment",
-    "Assert": "An assert statement",
-    "Assign": "An assignment statement",
-    "AsyncFor": "An asychronous for loop",
-    "AsyncFunctionDef": "An asychronous function definition",
-    "AsyncWith": "An asychronous with statement",
-    "Attribute": "An attribute lookup (access a field)",
-    "AugAssign": "An augmented assignment",
-    "AugLoad": "An augmented load",
-    "AugStore": "An augmented store",
-    "Await": "An await statement",
-    "BinOp": "A binary operator",
-    "BitAnd": "A bitwise AND operator",
-    "BitOr": "A bitwise OR operator",
-    "BitXor": "A bitwise XOR operator",
-    "BoolOp": "A boolean operator",
-    "Break": "A break statement",
-    "Bytes": "A literal bytes string",
-    "Call": "A function call",
-    "ClassDef": "A class definition",
-    "Compare": "A boolean comparison",
-    "Constant": "A literal value",
-    "Continue": "A continue statement",
-    "Del": "A delete statement",
-    "Delete": "A deletion",
-    "Dict": "A dictionary literal",
-    "DictComp": "A dictionary comprehension",
-    "Div": "A division operator",
-    "Ellipsis": "An ellipsis",
-    "Eq": "An equality comparison operator",
-    "ExceptHandler": "An except handler",
-    "Expr": "An expression used as a statement",
-    "Expression": "An evaluated expression",
-    "ExtSlice": "A multi-dimensional slice",
-    "FloorDiv": "An integer division operator",
-    "For": "A FOR loop",
-    "FormattedValue": "A formatted value in an f-string",
-    "FunctionDef": "A function definition",
-    "GeneratorExp": "A generator expression",
-    "Global": "A global statement",
-    "Gt": "A greater than comparison operator",
-    "GtE": "A greater than or equal to comparison operator",
-    "If": "An IF statement",
-    "IfExp": "An IF expression",
-    "Import": "An import statement",
-    "ImportFrom": "An import/from statement",
-    "In": "An IN operator",
-    "Index": "An index",
-    "Interactive": "An interactive expression",
-    "Invert": "An invert operator",
-    "Is": "An IS operator",
-    "IsNot": "An IS NOT operator",
-    "JoinedStr": "An f-string",
-    "LShift": "A left shift operator",
-    "Lambda": "A lambda expression",
-    "List": "A list literal",
-    "ListComp": "A list comprehension",
-    "Load": "A load",
-    "Lt": "A less than comparison operator",
-    "LtE": "A less than or equal to comparison operator",
-    "MatMult": "A matrix multiplication operator",
-    "Mod": "A modulo operator",
-    "Module": "A module",
-    "Mult": "A multiplication operator",
-    "Name": "A name",
-    "NameConstant": "A name constant",
-    "Nonlocal": "A nonlocal statement",
-    "Not": "A not operator",
-    "NotEq": "A not equal to comparison operator",
-    "NotIn": "A NOT IN operator",
-    "Num": "A numeric literal",
-    "Or": "A boolean OR operator",
-    "Param": "A parameter",
-    "Pass": "A pass statement",
-    "Pow": "A power operator",
-    "RShift": "A right shift operator",
-    "Raise": "A raise statement",
-    "Return": "A return statement",
-    "Set": "A set literal",
-    "SetComp": "A set comprehension",
-    "Slice": "A slice",
-    "Starred": "A starred argument",
-    "Store": "A store",
-    "Str": "A string literal",
-    "Sub": "A subtraction operator",
-    "Subscript": "A subscript",
-    "Suite": "A suite",
-    "Try": "A try statement",
-    "Tuple": "A tuple literal",
-    "TypeIgnore": " a type ignore",
-    "UAdd": "A unary addition operator",
-    "USub": "A unary subtraction operator",
-    "UnaryOp": "A unary operator",
-    "While": "A while loop",
-    "With": "A with statement",
-    "Yield": "A yield statement",
-    "YieldFrom": "A yield/from statement"
-};
- 
-export class BlockPyTrace {
- 
-    constructor(main, tag) {
-        this.main = main;
-        this.tag = tag;
- 
-        this.IGNORED_GLOBALS = ["__name__", "__doc__", "__package__",
-                                "classmethod", "property", "staticmethod", "$free", "$cell"];
- 
-        // this.trace.click(this.buildTraceTable.bind(this));
-    }
- 
-    /**
-     * Consume a set of variables traced from the execution and parse out any
-     * global variables and modules.
-     *
-     * @param {Object} variables - a mapping of variable names to their Skupt value.
-     */
-    parseGlobals(variables) {
-        let result = [];
-        let modules = [];
-        //console.log(variables);
-        if (!this.main.model.display.traceExecution()) {
-            /*if ("$cell" in variables) {
-                variables = {...variables, ...variables.$cell};
-            }*/
-            /*if ("$free" in variables) {
-                variables = {...variables, ...variables.$free};
-            }*/
-            for (let property in variables) {
-                let value = variables[property];
-                if (this.IGNORED_GLOBALS.indexOf(property) === -1 && value !== undefined) {
-                    property = property.replace("_$rw$", "")
-                        .replace("_$rn$", "");
-                    let parsed;
-                    try {
-                        parsed = BlockPyTrace.parseValue(property, value);
-                    } catch {
-                        parsed = {"name": property, "type": "Unknown", "value": value.toString()};
-                    }
-                    if (parsed !== null) {
-                        result.push(parsed);
-                    } else if (value.constructor === Sk.builtin.module) {
-                        modules.push(value.$d.__name__.v);
-                    }
-                }
-            }
-        }
-        return {"properties": result, "modules": modules};
-    };
- 
-    /**
-     * Convert a Skulpt value into a more easily printable object.
-     *
-     * @param {String} property
-     * @param {Object} value - the skulpt value
-     */
-    static parseValue(property, value, fullLength) {
-        if (value === undefined) {
-            return {"name": property,
-                "type": "Unknown",
-                "value": "Undefined"
-            };
-        }
-        switch (property) {
-            case "dataclass":
-                return {
-                    name: property,
-                    type: "Decorator",
-                    value: "<dataclass decorator>"
-                };
-        }
-        switch (value.constructor) {
-            case Sk.builtin.func:
-                return {"name": property,
-                    "type": "Function",
-                    "value":
-                        (value.func_code.co_varnames !== undefined ?
-                            " Parameters: "+value.func_code.co_varnames.join(", ") :
-                            " No parameters")
-                };
-            case Sk.builtin.module: return null;
-            case Sk.builtin.str:
-                if (fullLength || value.v.length <= 32) {
-                    return {"name": property,
-                        "type": "String",
-                        "value": value.$r().v
-                    };
-                } else {
-                    return {"name": property,
-                        "type": "String",
-                        "value": "["+value.sq$length()+" characters not shown]"
-                    };
-                }
-            case Sk.builtin.none:
-                return {"name": property,
-                    "type": "None",
-                    "value": "None"
-                };
-            case Sk.builtin.bool:
-                return {"name": property,
-                    "type": "Boolean",
-                    "value": value.$r().v
-                };
-            case Sk.builtin.nmber:
-                return {"name": property,
-                    "type": "int" === value.skType ? "Integer": "Float",
-                    "value": value.$r().v
-                };
-            case Sk.builtin.int_:
-                return {"name": property,
-                    "type": "Integer",
-                    "value": value.$r().v
-                };
-            case Sk.builtin.float_:
-                return {"name": property,
-                    "type": "Float",
-                    "value": value.$r().v
-                };
-            case Sk.builtin.tuple:
-                return {"name": property,
-                    "type": "Tuple",
-                    "value": value.$r().v
-                };
-            case Sk.builtin.list:
-                if (value.v.length <= 20) {
-                    return {"name": property,
-                        "type": "List",
-                        "value": value.$r().v,
-                        "exact_value": value
-                    };
-                } else {
-                    return {"name": property,
-                        "type": "List",
-                        "value": "[... "+value.v.length+" elements ...]",
-                        "exact_value": value
-                    };
-                }
-            case Sk.builtin.dict:
-                return {"name": property,
-                    "type": "Dictionary",
-                    "value": value.$r().v
-                };
-            case Number:
-                return {"name": property,
-                    "type": value % 1 === 0 ? "Integer" : "Float",
-                    "value": value
-                };
-            case String:
-                return {"name": property,
-                    "type": "String",
-                    "value": value
-                };
-            case Boolean:
-                return {"name": property,
-                    "type": "Boolean",
-                    "value": (value ? "True": "False")
-                };
-            default:
-                return {"name": property,
-                    "type": value.tp$name === undefined ? value : value.tp$name,
-                    "value": value.$r === undefined ? value : value.$r().v
-                };
-        }
-    };
- 
- 
-}
- 
-// TODO: viewExactValue
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/src/utilities.js.html b/coverage/lcov-report/src/utilities.js.html deleted file mode 100644 index d7c48f72d..000000000 --- a/coverage/lcov-report/src/utilities.js.html +++ /dev/null @@ -1,1123 +0,0 @@ - - - - - - Code coverage report for src/utilities.js - - - - - - - - - -
-
-

All files / src utilities.js

-
- -
- 17.82% - Statements - 23/129 -
- - -
- 16.21% - Branches - 12/74 -
- - -
- 10% - Functions - 2/20 -
- - -
- 17.79% - Lines - 21/118 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347  -  -  -  -  -  -  -  -  -  -  -5x -5x -  -5x -2x -  -  -3x -11x -8x -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -6x -6x -6x -6x -  -6x -6x -6x -6x -6x -6x
/**
- * Move an element from index in an array to a new index.
- * O(n)
- * Courtesy:
- * https://stackoverflow.com/a/73877680/1718155
- * @param arr
- * @param oldIndex
- * @param newIndex
- * @returns {*}
- */
-export function arrayMove(arr, oldIndex, newIndex) {
-    const length = arr.length;
-    const itemToMove = arr[oldIndex];
- 
-    if (oldIndex === newIndex || oldIndex > length || newIndex > length) {
-        return arr;
-    }
- 
-    return arr.reduce((acc, item, index) => {
-        if (index === oldIndex) {return acc;}
-        if (index === newIndex) {return oldIndex < newIndex ? [...acc, item, itemToMove] : [...acc, itemToMove, item];}
-        return [...acc, item];
-    }, []);
-}
- 
-/**
- * Determines if the element is in the list.
- * @param {anything} needle - The element to look for.
- * @param {Array} haystack - The list to search.
- * @return {Boolean} Whether the element exists
- */
-function arrayContains(needle, haystack) {
-    return haystack.indexOf(needle) > -1;
-}
- 
-/**
- * Remove duplicate values from an array, preserving order.
- * Creates a new array, so is non-destructive.
- * Courtesy:
- * https://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript-and-de-duplicate-items
- *
- * @param {Array} array - The array to uniquify. Elements compared with ===.
- */
-function arrayUnique(array) {
-    var a = array.concat();
-    for(var i=0; i<a.length; ++i) {
-        for(var j=i+1; j<a.length; ++j) {
-            if(a[i] === a[j]) {a.splice(j--, 1);}
-        }
-    }
- 
-    return a;
-}
- 
-/**
- * A helper function for extending an array based
- * on an "addArray" and "removeArray". Any element
- * found in removeArray is removed from the first array
- * and all the elements of addArray are added.
- * Any duplicate items are removed.
- * Creates a new array, so is non-destructive.
- *
- * @param {Array} array - the array to manipulate
- * @param {Array} addArray - the elements to add to the array
- * @param {Array} removeArray - the elements to remove from the array
- * @return {Array} The modified array
- */
-function expandArray(array, addArray, removeArray) {
-    var copyArray = array.filter(function(item) {
-        return removeArray.indexOf(item) === -1;
-    });
-    return arrayUnique(copyArray.concat(addArray));
-}
- 
-/**
- * Deeply clones a node
- * @param {Node} node A node to clone
- * @return {Node} A clone of the given node and all its children
- */
-function cloneNode(node) {
-    // If the node is a text node, then re-create it rather than clone it
-    var clone = node.nodeType == 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false);
- 
-    // Recurse     
-    var child = node.firstChild;
-    while(child) {
-        clone.appendChild(cloneNode(child));
-        child = child.nextSibling;
-    }
-     
-    return clone;
-}
- 
-/**
- * Indents the given string by 4 spaces. This correctly handles multi-line strings.
- *
- * @param {String} str - The string to be manipulated.
- * @returns {String} The string with four spaces added at the start of every new line.
- */
-export function indent(str) {
-    return str.replace(/^(?=.)/gm, "    ");
-}
- 
-/**
- * Turns spaces into underscores in the string, makes it lowercase.
- * @param {String} str - the string to be manipulated
- * @returns {string}
- */
-export function slug(str) {
-    return str.replace(/\s/g, "_").toLowerCase();
-}
- 
-/**
- * Capitalize the first letter of a string.
- * @param {String} s - The string to be capitalized.
- * @returns {string}
- */
-export function capitalize(s) {
-    if (typeof s !== "string") {
-        return "";
-    }
-    return s.charAt(0).toUpperCase() + s.slice(1);
-}
- 
-/**
- * Return a random integer between [`min`, `max`].
- * 
- * @param {number} min - The lowest possible integer.
- * @param {number} max - The highest possible integer (inclusive).
- * @returns {number} A random integer.
- */
-function randomInteger(min,max) {
-    return Math.floor(Math.random()*(max-min+1)+min);
-}
- 
-/**
- * Encodes some text so that it can be safely written into an HTML box.
- * This includes replacing special HTML characters (&, <, >, etc.).
- *
- * @param {string} str - The text to be converted.
- * @return {string} The HTML-safe text.
- */
-export function encodeHTML(str) {
-    return str.replace(/&/g, "&amp;")
-        .replace(/</g, "&lt;")
-        .replace(/>/g, "&gt;")
-        .replace(/"/g, "&quot;")
-        .replace(/'/g, "&apos;");
-}
- 
-/**
- * Shuffle the blocks in the workspace
- */
-Iif (typeof Blockly !== "undefined") {
-    Blockly.WorkspaceSvg.prototype.shuffle = function() {
-        var metrics = this.getMetrics();
-        var width = metrics.viewWidth / 2,
-            height = metrics.viewHeight;
-        var blocks = this.getTopBlocks(false);
-        var y = 5, x = 0,
-            maximal_increase = height/blocks.length;
-        for (var i = 0; i < blocks.length; i++){
-            // Get a block
-            var block = blocks[i];
-            var properties = block.getRelativeToSurfaceXY();
-            if (i == 0) {
-                x = 5;
-            } else {
-                x = -properties.x+randomInteger(10, width);
-            }
-            block.moveBy(x, 
-                         -properties.y+y);
-            y = y + randomInteger(5, maximal_increase);
-        }
-    };
-}
- 
-/**
- * Move elements from one array to another based on a conditional check.
- * https://stackoverflow.com/questions/31887967/javascript-move-objects-from-one-array-to-another-best-approach
- */
-function moveElements(source, target, moveCheck) {
-    for (var i = 0; i < source.length; i++) {
-        var element = source[i];
-        if (moveCheck(element)) {
-            source.splice(i, 1);
-            target.push(element);
-            i--;
-        }
-    } 
-}
- 
- 
-export function firstDefinedValue() {
-    for (var i = 0; i < arguments.length; i++) {
-        if (arguments[i] != null) {
-            return arguments[i];
-        }
-    }
-    return undefined;
-}
- 
-/**
- * This function checks if the given object is one of the Sk.builtin objects
- * TODO: make this so we don't have to explicitly put out every option
- *          one possible thing we could do is get a string version of the 
- *          of the constructor and look for the substring "return new Sk.builtin"
- *          But I don't know how reliable that is.  Rather, it's kind of hackish.
- *          Should tehoretically belong in Sk.ffi
- * @param {object} obj - the object to be examined
- * @return {boolean} true if the object is one of the Sk.builtin types
-**/
-function isSkBuiltin(obj){
-    return (obj instanceof Sk.builtin.dict) ||
-        (obj instanceof Sk.builtin.list) ||
-        (obj instanceof Sk.builtin.tuple) ||
-        (obj instanceof Sk.builtin.bool) ||
-        (obj instanceof Sk.builtin.int_) ||
-        (obj instanceof Sk.builtin.float_) ||
-        (obj instanceof Sk.builtin.str) ||
-        (obj instanceof Sk.builtin.lng);
-    //var cons_str = obj.constructor + "";
-    //return cons_str.indexOf("return new Sk.builtin") !== -1;
-}
- 
-function isAstNode(obj){
-    return obj instanceof Object && "_astname" in obj;
-}
- 
-const DEFAULT_SECTION_PATTERN = /^(##### Part (.+))$/gm;
- 
-/**
- * Finds the given Part ID using the pattern `#### Part whatever` (on its own separate line). If the pattern
- * is not found, then null is returned. If no pattern is given (empty string or null), then the original text
- * is returned without modifications.
- * @param text
- * @param partId
- * @returns {null|*}
- */
-export function extractPart(text, partId) {
-    if (partId === "" || partId == null) {
-        return text;
-    }
-    const parts = text.split(DEFAULT_SECTION_PATTERN);
-    for (let i=2; i < parts.length; i+=3) {
-        /* // Unnecessary assertion, but not bad to think about
-        if (!parts[i-1].startsWith("#### Part ")) {
-            throw "Error: part format is broken!";
-        }*/
-        if (parts[i] === partId) {
-            let body = parts[i+1];
-            if (body && body[0] === "\n") {
-                body = body.slice(1);
-            }
-            if (i !== parts.length - 3 && body && body.slice(-1) === "\n") {
-                body = body.slice(0, -1);
-            }
-            return body;
-        }
-    }
-    return null;
-}
- 
-/**
- * Should theoretically belong in Sk.ffi, but I put it here instead to not mess up the skulpt files
- * like the normal Sk.ffi.remapToPy, it doesn't work for functions or more complex objects, but it handles
- * cases where the types in obj are a mix of python SIMPLE objects and SIMPLE normal javascript objects
- * @param {object} obj - the object to be converted
- * @return {Sk.builtin.???} - returns the corresponding python object, dropping all functions and things it can't convert
-**/
-function mixedRemapToPy(obj){
-    var k;
-    var kvs;
-    var i;
-    var arr;
-    //@TODO: should theoretically check if the object is a pyhon dict or array with js objects
-    if (isSkBuiltin(obj)){
-        //object is already python ready
-        return obj;
-    } else if (Object.prototype.toString.call(obj) === "[object Array]") {
-        //object is actually a javascript array
-        arr = [];
-        for (i = 0; i < obj.length; ++i) {
-            //for each object, convert it to a python object if it isn't one already
-            var subval = obj[i];
-            if(!isSkBuiltin(subval)){
-                arr.push(mixedRemapToPy(subval));
-            }else{
-                arr.push(subval);
-            }
-        }
-        return new Sk.builtin.list(arr);
-    } else if (obj === null) {//null object
-        return Sk.builtin.none.none$;
-    } else if (typeof obj === "object") {
-        if(!isSkBuiltin(obj)){
-            //assuming it's a standard dictionary
-            kvs = [];//Sk.builtin.dict uses an array of key-value,key-value...
-            for (k in obj) {
-                //convert the key if it needs to be converted
-                kvs.push(mixedRemapToPy(k));
-                //covert corresponding value if it needs to be converted
-                kvs.push(mixedRemapToPy(obj[k]));
-            }
-            //create the new dictionary
-            return new Sk.builtin.dict(kvs);
-        }else{
-            return obj;
-        }
-    } else if (typeof obj === "string") {
-        return new Sk.builtin.str(obj);
-    } else if (typeof obj === "number") {
-        return Sk.builtin.assk$(obj);
-    } else if (typeof obj === "boolean") {
-        return new Sk.builtin.bool(obj);
-    } else if(typeof obj === "function") {
-        return new Sk.builtin.str(obj.name);
-    }
-}
- 
- 
-export function getCurrentTime() {
-    const today = new Date();
-    let h = Math.floor(today.getHours()%12);
-    let m = today.getMinutes();
-    //let s = today.getSeconds();
-    if (m < 10) {m = "0" + m;}
-    //if (s < 10) {s = "0" + s;}
-    let p = "am";
-    if (today.getHours()>=12) {
-        p = "pm";
-    }
-    return `${h}:${m}${p}`;
-}
- 
-export const pyInt = Sk.builtin.int_;
-export const pyNone = Sk.builtin.none.none$;
-export const pyStr = Sk.builtin.str;
-export const pyTuple = Sk.builtin.tuple;
-export const pyCallOrSuspend = Sk.misceval.callsimOrSuspendArray;
- 
-export const { isTrue, richCompareBool, chain } = Sk.misceval;
-export const { typeName, setUpModuleMethods, buildNativeClass } = Sk.abstr;
-export const { TypeError, ValueError, KeyError, IndexError, checkString, asnum$ } = Sk.builtin;
-export const { remapToPy, remapToJs } = Sk.ffi;
-export const { getAttr, setAttr } = Sk.generic;
-export const chainOrSuspend = chain;
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index 6e040291d..000000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,6030 +0,0 @@ -TN: -SF:src/blockpy.js -FN:57,(anonymous_0) -FN:70,(anonymous_1) -FN:86,(anonymous_2) -FN:108,(anonymous_3) -FN:422,(anonymous_4) -FN:428,(anonymous_5) -FN:432,(anonymous_6) -FN:436,(anonymous_7) -FN:440,(anonymous_8) -FN:445,(anonymous_9) -FN:467,(anonymous_10) -FN:515,(anonymous_11) -FN:519,(anonymous_12) -FN:522,(anonymous_13) -FN:526,(anonymous_14) -FN:529,(anonymous_15) -FN:534,(anonymous_16) -FN:539,(anonymous_17) -FN:542,(anonymous_18) -FN:545,(anonymous_19) -FN:548,(anonymous_20) -FN:551,(anonymous_21) -FN:559,(anonymous_22) -FN:563,(anonymous_23) -FN:578,(anonymous_24) -FN:589,(anonymous_25) -FN:593,(anonymous_26) -FN:596,(anonymous_27) -FN:599,(anonymous_28) -FN:602,(anonymous_29) -FN:605,(anonymous_30) -FN:622,(anonymous_31) -FN:630,(anonymous_32) -FN:634,(anonymous_33) -FN:637,(anonymous_34) -FN:640,(anonymous_35) -FN:643,(anonymous_36) -FN:646,(anonymous_37) -FN:649,(anonymous_38) -FN:653,(anonymous_39) -FN:665,(anonymous_40) -FN:670,(anonymous_41) -FN:679,(anonymous_42) -FN:685,(anonymous_43) -FN:691,(anonymous_44) -FN:721,(anonymous_45) -FN:751,(anonymous_46) -FN:756,(anonymous_47) -FN:759,(anonymous_48) -FN:764,(anonymous_49) -FN:769,(anonymous_50) -FN:775,(anonymous_51) -FN:782,(anonymous_52) -FN:785,(anonymous_53) -FN:792,(anonymous_54) -FN:795,(anonymous_55) -FN:810,(anonymous_56) -FN:826,(anonymous_57) -FN:845,(anonymous_58) -FN:848,(anonymous_59) -FN:852,(anonymous_60) -FN:856,(anonymous_61) -FN:859,(anonymous_62) -FN:877,(anonymous_63) -FN:880,(anonymous_64) -FN:883,(anonymous_65) -FN:887,(anonymous_66) -FN:893,(anonymous_67) -FN:895,(anonymous_68) -FN:897,(anonymous_69) -FN:899,(anonymous_70) -FN:901,(anonymous_71) -FN:908,(anonymous_72) -FN:952,(anonymous_73) -FN:955,(anonymous_74) -FN:958,(anonymous_75) -FN:973,(anonymous_76) -FN:996,(anonymous_77) -FN:999,(anonymous_78) -FN:1003,(anonymous_79) -FN:1009,(anonymous_80) -FN:1013,(anonymous_81) -FN:1019,(anonymous_82) -FN:1021,(anonymous_83) -FN:1024,(anonymous_84) -FN:1029,(anonymous_85) -FN:1033,(anonymous_86) -FN:1037,(anonymous_87) -FN:1044,(anonymous_88) -FN:1046,(anonymous_89) -FN:1051,(anonymous_90) -FN:1052,(anonymous_91) -FN:1062,(anonymous_92) -FN:1070,(anonymous_93) -FN:1071,(anonymous_94) -FN:1072,(anonymous_95) -FN:1073,(anonymous_96) -FN:1074,(anonymous_97) -FN:1078,(anonymous_98) -FN:1079,(anonymous_99) -FN:1080,(anonymous_100) -FN:1081,(anonymous_101) -FN:1082,(anonymous_102) -FN:1083,(anonymous_103) -FN:1086,(anonymous_104) -FN:1089,(anonymous_105) -FN:1096,(anonymous_106) -FN:1099,(anonymous_107) -FN:1102,(anonymous_108) -FN:1112,(anonymous_109) -FN:1115,(anonymous_110) -FN:1125,(anonymous_111) -FN:1129,(anonymous_112) -FN:1132,(anonymous_113) -FN:1136,(anonymous_114) -FN:1150,(anonymous_115) -FN:1158,(anonymous_116) -FN:1166,(anonymous_117) -FN:1177,(anonymous_118) -FN:1185,(anonymous_119) -FN:1196,(anonymous_120) -FN:1200,(anonymous_121) -FN:1203,(anonymous_122) -FN:1207,(anonymous_123) -FN:1227,(anonymous_124) -FN:1232,(anonymous_125) -FN:1236,(anonymous_126) -FN:1237,(anonymous_127) -FN:1243,(anonymous_128) -FN:1248,(anonymous_129) -FN:1262,(anonymous_130) -FN:1266,(anonymous_131) -FN:1272,(anonymous_132) -FN:1277,(anonymous_133) -FNF:134 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -FNDA:0,(anonymous_28) -FNDA:0,(anonymous_29) -FNDA:0,(anonymous_30) -FNDA:0,(anonymous_31) -FNDA:0,(anonymous_32) -FNDA:0,(anonymous_33) -FNDA:0,(anonymous_34) -FNDA:0,(anonymous_35) -FNDA:0,(anonymous_36) -FNDA:0,(anonymous_37) -FNDA:0,(anonymous_38) -FNDA:0,(anonymous_39) -FNDA:0,(anonymous_40) -FNDA:0,(anonymous_41) -FNDA:0,(anonymous_42) -FNDA:0,(anonymous_43) -FNDA:0,(anonymous_44) -FNDA:0,(anonymous_45) -FNDA:0,(anonymous_46) -FNDA:0,(anonymous_47) -FNDA:0,(anonymous_48) -FNDA:0,(anonymous_49) -FNDA:0,(anonymous_50) -FNDA:0,(anonymous_51) -FNDA:0,(anonymous_52) -FNDA:0,(anonymous_53) -FNDA:0,(anonymous_54) -FNDA:0,(anonymous_55) -FNDA:0,(anonymous_56) -FNDA:0,(anonymous_57) -FNDA:0,(anonymous_58) -FNDA:0,(anonymous_59) -FNDA:0,(anonymous_60) -FNDA:0,(anonymous_61) -FNDA:0,(anonymous_62) -FNDA:0,(anonymous_63) -FNDA:0,(anonymous_64) -FNDA:0,(anonymous_65) -FNDA:0,(anonymous_66) -FNDA:0,(anonymous_67) -FNDA:0,(anonymous_68) -FNDA:0,(anonymous_69) -FNDA:0,(anonymous_70) -FNDA:0,(anonymous_71) -FNDA:0,(anonymous_72) -FNDA:0,(anonymous_73) -FNDA:0,(anonymous_74) -FNDA:0,(anonymous_75) -FNDA:0,(anonymous_76) -FNDA:0,(anonymous_77) -FNDA:0,(anonymous_78) -FNDA:0,(anonymous_79) -FNDA:0,(anonymous_80) -FNDA:0,(anonymous_81) -FNDA:0,(anonymous_82) -FNDA:0,(anonymous_83) -FNDA:0,(anonymous_84) -FNDA:0,(anonymous_85) -FNDA:0,(anonymous_86) -FNDA:0,(anonymous_87) -FNDA:0,(anonymous_88) -FNDA:0,(anonymous_89) -FNDA:0,(anonymous_90) -FNDA:0,(anonymous_91) -FNDA:0,(anonymous_92) -FNDA:0,(anonymous_93) -FNDA:0,(anonymous_94) -FNDA:0,(anonymous_95) -FNDA:0,(anonymous_96) -FNDA:0,(anonymous_97) -FNDA:0,(anonymous_98) -FNDA:0,(anonymous_99) -FNDA:0,(anonymous_100) -FNDA:0,(anonymous_101) -FNDA:0,(anonymous_102) -FNDA:0,(anonymous_103) -FNDA:0,(anonymous_104) -FNDA:0,(anonymous_105) -FNDA:0,(anonymous_106) -FNDA:0,(anonymous_107) -FNDA:0,(anonymous_108) -FNDA:0,(anonymous_109) -FNDA:0,(anonymous_110) -FNDA:0,(anonymous_111) -FNDA:0,(anonymous_112) -FNDA:0,(anonymous_113) -FNDA:0,(anonymous_114) -FNDA:0,(anonymous_115) -FNDA:0,(anonymous_116) -FNDA:0,(anonymous_117) -FNDA:0,(anonymous_118) -FNDA:0,(anonymous_119) -FNDA:0,(anonymous_120) -FNDA:0,(anonymous_121) -FNDA:0,(anonymous_122) -FNDA:0,(anonymous_123) -FNDA:0,(anonymous_124) -FNDA:0,(anonymous_125) -FNDA:0,(anonymous_126) -FNDA:0,(anonymous_127) -FNDA:0,(anonymous_128) -FNDA:0,(anonymous_129) -FNDA:0,(anonymous_130) -FNDA:0,(anonymous_131) -FNDA:0,(anonymous_132) -FNDA:0,(anonymous_133) -DA:40,1 -DA:58,0 -DA:59,0 -DA:60,0 -DA:62,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:92,0 -DA:110,0 -DA:111,0 -DA:114,0 -DA:423,0 -DA:424,0 -DA:425,0 -DA:429,0 -DA:441,0 -DA:442,0 -DA:446,0 -DA:448,0 -DA:449,0 -DA:452,0 -DA:453,0 -DA:454,0 -DA:455,0 -DA:456,0 -DA:457,0 -DA:458,0 -DA:459,0 -DA:460,0 -DA:461,0 -DA:462,0 -DA:463,0 -DA:464,0 -DA:468,0 -DA:469,0 -DA:470,0 -DA:471,0 -DA:472,0 -DA:473,0 -DA:474,0 -DA:475,0 -DA:476,0 -DA:477,0 -DA:478,0 -DA:479,0 -DA:480,0 -DA:481,0 -DA:482,0 -DA:483,0 -DA:484,0 -DA:485,0 -DA:486,0 -DA:487,0 -DA:488,0 -DA:489,0 -DA:490,0 -DA:492,0 -DA:493,0 -DA:494,0 -DA:496,0 -DA:497,0 -DA:498,0 -DA:499,0 -DA:500,0 -DA:501,0 -DA:502,0 -DA:503,0 -DA:504,0 -DA:505,0 -DA:506,0 -DA:507,0 -DA:508,0 -DA:509,0 -DA:510,0 -DA:512,0 -DA:516,0 -DA:517,0 -DA:518,0 -DA:520,0 -DA:523,0 -DA:527,0 -DA:530,0 -DA:535,0 -DA:540,0 -DA:543,0 -DA:546,0 -DA:549,0 -DA:552,0 -DA:553,0 -DA:555,0 -DA:557,0 -DA:560,0 -DA:564,0 -DA:565,0 -DA:566,0 -DA:567,0 -DA:568,0 -DA:569,0 -DA:571,0 -DA:572,0 -DA:574,0 -DA:579,0 -DA:580,0 -DA:581,0 -DA:582,0 -DA:583,0 -DA:584,0 -DA:586,0 -DA:590,0 -DA:594,0 -DA:597,0 -DA:600,0 -DA:603,0 -DA:606,0 -DA:614,0 -DA:617,0 -DA:619,0 -DA:620,0 -DA:623,0 -DA:631,0 -DA:635,0 -DA:638,0 -DA:641,0 -DA:644,0 -DA:647,0 -DA:650,0 -DA:654,0 -DA:655,0 -DA:656,0 -DA:657,0 -DA:658,0 -DA:659,0 -DA:660,0 -DA:662,0 -DA:666,0 -DA:667,0 -DA:668,0 -DA:671,0 -DA:672,0 -DA:673,0 -DA:674,0 -DA:680,0 -DA:686,0 -DA:692,0 -DA:693,0 -DA:695,0 -DA:698,0 -DA:700,0 -DA:702,0 -DA:704,0 -DA:706,0 -DA:709,0 -DA:712,0 -DA:714,0 -DA:716,0 -DA:718,0 -DA:722,0 -DA:723,0 -DA:725,0 -DA:728,0 -DA:730,0 -DA:732,0 -DA:734,0 -DA:736,0 -DA:739,0 -DA:742,0 -DA:744,0 -DA:746,0 -DA:748,0 -DA:752,0 -DA:753,0 -DA:754,0 -DA:757,0 -DA:760,0 -DA:761,0 -DA:762,0 -DA:765,0 -DA:769,0 -DA:770,0 -DA:771,0 -DA:773,0 -DA:774,0 -DA:775,0 -DA:776,0 -DA:777,0 -DA:778,0 -DA:783,0 -DA:786,0 -DA:787,0 -DA:793,0 -DA:796,0 -DA:797,0 -DA:799,0 -DA:800,0 -DA:801,0 -DA:802,0 -DA:803,0 -DA:804,0 -DA:805,0 -DA:807,0 -DA:811,0 -DA:812,0 -DA:813,0 -DA:814,0 -DA:815,0 -DA:817,0 -DA:818,0 -DA:819,0 -DA:820,0 -DA:823,0 -DA:827,0 -DA:828,0 -DA:829,0 -DA:830,0 -DA:831,0 -DA:833,0 -DA:835,0 -DA:837,0 -DA:838,0 -DA:840,0 -DA:842,0 -DA:846,0 -DA:849,0 -DA:850,0 -DA:853,0 -DA:854,0 -DA:857,0 -DA:860,0 -DA:861,0 -DA:862,0 -DA:863,0 -DA:864,0 -DA:866,0 -DA:868,0 -DA:870,0 -DA:872,0 -DA:878,0 -DA:881,0 -DA:884,0 -DA:888,0 -DA:889,0 -DA:890,0 -DA:891,0 -DA:892,0 -DA:893,0 -DA:894,0 -DA:895,0 -DA:896,0 -DA:897,0 -DA:898,0 -DA:899,0 -DA:900,0 -DA:901,0 -DA:902,0 -DA:903,0 -DA:904,0 -DA:905,0 -DA:909,0 -DA:915,0 -DA:916,0 -DA:918,0 -DA:919,0 -DA:921,0 -DA:922,0 -DA:923,0 -DA:924,0 -DA:926,0 -DA:927,0 -DA:928,0 -DA:930,0 -DA:931,0 -DA:932,0 -DA:935,0 -DA:936,0 -DA:937,0 -DA:939,0 -DA:940,0 -DA:942,0 -DA:943,0 -DA:945,0 -DA:946,0 -DA:950,0 -DA:953,0 -DA:956,0 -DA:959,0 -DA:960,0 -DA:961,0 -DA:962,0 -DA:963,0 -DA:965,0 -DA:966,0 -DA:968,0 -DA:974,0 -DA:975,0 -DA:977,0 -DA:978,0 -DA:980,0 -DA:981,0 -DA:983,0 -DA:984,0 -DA:986,0 -DA:987,0 -DA:989,0 -DA:990,0 -DA:992,0 -DA:997,0 -DA:1000,0 -DA:1004,0 -DA:1010,0 -DA:1011,0 -DA:1012,0 -DA:1014,0 -DA:1015,0 -DA:1020,0 -DA:1022,0 -DA:1025,0 -DA:1030,0 -DA:1034,0 -DA:1035,0 -DA:1038,0 -DA:1039,0 -DA:1040,0 -DA:1041,0 -DA:1045,0 -DA:1047,0 -DA:1048,0 -DA:1049,0 -DA:1052,0 -DA:1053,0 -DA:1054,0 -DA:1055,0 -DA:1056,0 -DA:1058,0 -DA:1063,0 -DA:1064,0 -DA:1066,0 -DA:1070,0 -DA:1071,0 -DA:1072,0 -DA:1073,0 -DA:1074,0 -DA:1078,0 -DA:1079,0 -DA:1080,0 -DA:1081,0 -DA:1082,0 -DA:1083,0 -DA:1086,0 -DA:1090,0 -DA:1091,0 -DA:1097,0 -DA:1100,0 -DA:1103,0 -DA:1104,0 -DA:1105,0 -DA:1107,0 -DA:1109,0 -DA:1113,0 -DA:1116,0 -DA:1117,0 -DA:1118,0 -DA:1120,0 -DA:1122,0 -DA:1126,0 -DA:1130,0 -DA:1133,0 -DA:1137,0 -DA:1152,0 -DA:1154,0 -DA:1156,0 -DA:1157,0 -DA:1158,0 -DA:1159,0 -DA:1160,0 -DA:1162,0 -DA:1163,0 -DA:1164,0 -DA:1167,0 -DA:1168,0 -DA:1171,0 -DA:1178,0 -DA:1182,0 -DA:1187,0 -DA:1197,0 -DA:1201,0 -DA:1202,0 -DA:1203,0 -DA:1208,0 -DA:1209,0 -DA:1210,0 -DA:1213,0 -DA:1214,0 -DA:1215,0 -DA:1216,0 -DA:1217,0 -DA:1218,0 -DA:1219,0 -DA:1221,0 -DA:1222,0 -DA:1223,0 -DA:1224,0 -DA:1228,0 -DA:1233,0 -DA:1237,0 -DA:1238,0 -DA:1241,0 -DA:1242,0 -DA:1243,0 -DA:1244,0 -DA:1245,0 -DA:1248,0 -DA:1249,0 -DA:1250,0 -DA:1251,0 -DA:1252,0 -DA:1255,0 -DA:1256,0 -DA:1263,0 -DA:1267,0 -DA:1269,0 -DA:1273,0 -DA:1274,0 -LF:432 -LH:1 -BRDA:59,0,0,0 -BRDA:59,0,1,0 -BRDA:87,1,0,0 -BRDA:87,1,1,0 -BRDA:89,2,0,0 -BRDA:89,2,1,0 -BRDA:144,3,0,0 -BRDA:144,3,1,0 -BRDA:145,4,0,0 -BRDA:145,4,1,0 -BRDA:146,5,0,0 -BRDA:146,5,1,0 -BRDA:147,6,0,0 -BRDA:147,6,1,0 -BRDA:148,7,0,0 -BRDA:148,7,1,0 -BRDA:165,8,0,0 -BRDA:165,8,1,0 -BRDA:165,9,0,0 -BRDA:165,9,1,0 -BRDA:281,10,0,0 -BRDA:281,10,1,0 -BRDA:407,11,0,0 -BRDA:407,11,1,0 -BRDA:413,12,0,0 -BRDA:413,12,1,0 -BRDA:414,13,0,0 -BRDA:414,13,1,0 -BRDA:446,14,0,0 -BRDA:446,14,1,0 -BRDA:454,15,0,0 -BRDA:454,15,1,0 -BRDA:460,16,0,0 -BRDA:460,16,1,0 -BRDA:461,17,0,0 -BRDA:461,17,1,0 -BRDA:488,18,0,0 -BRDA:488,18,1,0 -BRDA:489,19,0,0 -BRDA:489,19,1,0 -BRDA:492,20,0,0 -BRDA:492,20,1,0 -BRDA:493,21,0,0 -BRDA:493,21,1,0 -BRDA:520,22,0,0 -BRDA:520,22,1,0 -BRDA:523,23,0,0 -BRDA:523,23,1,0 -BRDA:530,24,0,0 -BRDA:530,24,1,0 -BRDA:540,25,0,0 -BRDA:540,25,1,0 -BRDA:543,26,0,0 -BRDA:543,26,1,0 -BRDA:552,27,0,0 -BRDA:552,27,1,0 -BRDA:560,28,0,0 -BRDA:560,28,1,0 -BRDA:560,28,2,0 -BRDA:564,29,0,0 -BRDA:564,29,1,0 -BRDA:565,30,0,0 -BRDA:565,30,1,0 -BRDA:566,31,0,0 -BRDA:566,31,1,0 -BRDA:568,32,0,0 -BRDA:568,32,1,0 -BRDA:571,33,0,0 -BRDA:571,33,1,0 -BRDA:571,34,0,0 -BRDA:571,34,1,0 -BRDA:579,35,0,0 -BRDA:579,35,1,0 -BRDA:581,36,0,0 -BRDA:581,36,1,0 -BRDA:583,37,0,0 -BRDA:583,37,1,0 -BRDA:590,38,0,0 -BRDA:590,38,1,0 -BRDA:590,38,2,0 -BRDA:620,39,0,0 -BRDA:620,39,1,0 -BRDA:631,40,0,0 -BRDA:631,40,1,0 -BRDA:631,41,0,0 -BRDA:631,41,1,0 -BRDA:635,42,0,0 -BRDA:635,42,1,0 -BRDA:647,43,0,0 -BRDA:647,43,1,0 -BRDA:650,44,0,0 -BRDA:650,44,1,0 -BRDA:655,45,0,0 -BRDA:655,45,1,0 -BRDA:657,46,0,0 -BRDA:657,46,1,0 -BRDA:659,47,0,0 -BRDA:659,47,1,0 -BRDA:672,48,0,0 -BRDA:672,48,1,0 -BRDA:680,49,0,0 -BRDA:680,49,1,0 -BRDA:680,50,0,0 -BRDA:680,50,1,0 -BRDA:680,50,2,0 -BRDA:686,51,0,0 -BRDA:686,51,1,0 -BRDA:686,51,2,0 -BRDA:692,52,0,0 -BRDA:692,52,1,0 -BRDA:695,53,0,0 -BRDA:695,53,1,0 -BRDA:695,53,2,0 -BRDA:695,53,3,0 -BRDA:695,53,4,0 -BRDA:695,53,5,0 -BRDA:695,53,6,0 -BRDA:695,53,7,0 -BRDA:695,53,8,0 -BRDA:695,53,9,0 -BRDA:695,53,10,0 -BRDA:695,53,11,0 -BRDA:695,53,12,0 -BRDA:722,54,0,0 -BRDA:722,54,1,0 -BRDA:725,55,0,0 -BRDA:725,55,1,0 -BRDA:725,55,2,0 -BRDA:725,55,3,0 -BRDA:725,55,4,0 -BRDA:725,55,5,0 -BRDA:725,55,6,0 -BRDA:725,55,7,0 -BRDA:725,55,8,0 -BRDA:725,55,9,0 -BRDA:725,55,10,0 -BRDA:725,55,11,0 -BRDA:725,55,12,0 -BRDA:764,56,0,0 -BRDA:777,57,0,0 -BRDA:777,57,1,0 -BRDA:783,58,0,0 -BRDA:783,58,1,0 -BRDA:786,59,0,0 -BRDA:786,59,1,0 -BRDA:786,60,0,0 -BRDA:786,60,1,0 -BRDA:796,61,0,0 -BRDA:796,61,1,0 -BRDA:802,62,0,0 -BRDA:802,62,1,0 -BRDA:802,63,0,0 -BRDA:802,63,1,0 -BRDA:804,64,0,0 -BRDA:804,64,1,0 -BRDA:814,65,0,0 -BRDA:814,65,1,0 -BRDA:814,66,0,0 -BRDA:814,66,1,0 -BRDA:817,67,0,0 -BRDA:817,67,1,0 -BRDA:819,68,0,0 -BRDA:819,68,1,0 -BRDA:830,69,0,0 -BRDA:830,69,1,0 -BRDA:833,70,0,0 -BRDA:833,70,1,0 -BRDA:833,70,2,0 -BRDA:837,71,0,0 -BRDA:837,71,1,0 -BRDA:863,72,0,0 -BRDA:863,72,1,0 -BRDA:866,73,0,0 -BRDA:866,73,1,0 -BRDA:866,73,2,0 -BRDA:878,74,0,0 -BRDA:878,74,1,0 -BRDA:878,74,2,0 -BRDA:881,75,0,0 -BRDA:881,75,1,0 -BRDA:884,76,0,0 -BRDA:884,76,1,0 -BRDA:884,77,0,0 -BRDA:884,77,1,0 -BRDA:888,78,0,0 -BRDA:888,78,1,0 -BRDA:888,78,2,0 -BRDA:888,78,3,0 -BRDA:888,78,4,0 -BRDA:888,78,5,0 -BRDA:888,78,6,0 -BRDA:888,78,7,0 -BRDA:888,78,8,0 -BRDA:888,78,9,0 -BRDA:888,78,10,0 -BRDA:888,78,11,0 -BRDA:909,79,0,0 -BRDA:909,79,1,0 -BRDA:909,79,2,0 -BRDA:909,79,3,0 -BRDA:909,79,4,0 -BRDA:909,79,5,0 -BRDA:909,79,6,0 -BRDA:909,79,7,0 -BRDA:909,79,8,0 -BRDA:909,79,9,0 -BRDA:909,79,10,0 -BRDA:909,79,11,0 -BRDA:909,79,12,0 -BRDA:909,79,13,0 -BRDA:962,80,0,0 -BRDA:962,80,1,0 -BRDA:962,81,0,0 -BRDA:962,81,1,0 -BRDA:962,81,2,0 -BRDA:965,82,0,0 -BRDA:965,82,1,0 -BRDA:965,83,0,0 -BRDA:965,83,1,0 -BRDA:965,83,2,0 -BRDA:974,84,0,0 -BRDA:974,84,1,0 -BRDA:977,85,0,0 -BRDA:977,85,1,0 -BRDA:980,86,0,0 -BRDA:980,86,1,0 -BRDA:983,87,0,0 -BRDA:983,87,1,0 -BRDA:986,88,0,0 -BRDA:986,88,1,0 -BRDA:989,89,0,0 -BRDA:989,89,1,0 -BRDA:1000,90,0,0 -BRDA:1000,90,1,0 -BRDA:1000,91,0,0 -BRDA:1000,91,1,0 -BRDA:1004,92,0,0 -BRDA:1004,92,1,0 -BRDA:1004,93,0,0 -BRDA:1004,93,1,0 -BRDA:1004,93,2,0 -BRDA:1007,94,0,0 -BRDA:1007,94,1,0 -BRDA:1022,95,0,0 -BRDA:1022,95,1,0 -BRDA:1022,95,2,0 -BRDA:1025,96,0,0 -BRDA:1025,96,1,0 -BRDA:1025,96,2,0 -BRDA:1040,97,0,0 -BRDA:1040,97,1,0 -BRDA:1053,98,0,0 -BRDA:1053,98,1,0 -BRDA:1063,99,0,0 -BRDA:1063,99,1,0 -BRDA:1083,100,0,0 -BRDA:1083,100,1,0 -BRDA:1083,100,2,0 -BRDA:1100,101,0,0 -BRDA:1100,101,1,0 -BRDA:1103,102,0,0 -BRDA:1103,102,1,0 -BRDA:1104,103,0,0 -BRDA:1104,103,1,0 -BRDA:1104,104,0,0 -BRDA:1104,104,1,0 -BRDA:1113,105,0,0 -BRDA:1113,105,1,0 -BRDA:1116,106,0,0 -BRDA:1116,106,1,0 -BRDA:1117,107,0,0 -BRDA:1117,107,1,0 -BRDA:1117,108,0,0 -BRDA:1117,108,1,0 -BRDA:1133,109,0,0 -BRDA:1133,109,1,0 -BRDA:1133,109,2,0 -BRDA:1137,110,0,0 -BRDA:1137,110,1,0 -BRDA:1137,110,2,0 -BRDA:1137,110,3,0 -BRDA:1137,110,4,0 -BRDA:1137,110,5,0 -BRDA:1137,110,6,0 -BRDA:1137,110,7,0 -BRDA:1137,110,8,0 -BRDA:1137,110,9,0 -BRDA:1137,110,10,0 -BRDA:1137,110,11,0 -BRDA:1178,111,0,0 -BRDA:1178,111,1,0 -BRDA:1203,112,0,0 -BRDA:1203,112,1,0 -BRDA:1244,113,0,0 -BRDA:1244,113,1,0 -BRDA:1249,114,0,0 -BRDA:1249,114,1,0 -BRDA:1250,115,0,0 -BRDA:1250,115,1,0 -BRDA:1255,116,0,0 -BRDA:1255,116,1,0 -BRF:301 -BRH:0 -end_of_record -TN: -SF:src/console.js -FN:65,(anonymous_0) -FN:120,(anonymous_1) -FN:127,(anonymous_2) -FN:134,(anonymous_3) -FN:139,(anonymous_4) -FN:152,(anonymous_5) -FN:159,(anonymous_6) -FN:167,(anonymous_7) -FN:171,(anonymous_8) -FN:177,(anonymous_9) -FN:188,(anonymous_10) -FN:197,(anonymous_11) -FN:201,(anonymous_12) -FN:202,(anonymous_13) -FN:206,(anonymous_14) -FN:208,(anonymous_15) -FN:214,(anonymous_16) -FN:219,(anonymous_17) -FN:230,(anonymous_18) -FN:235,(anonymous_19) -FN:245,(anonymous_20) -FN:249,(anonymous_21) -FN:265,(anonymous_22) -FN:269,(anonymous_23) -FN:281,(anonymous_24) -FN:290,(anonymous_25) -FN:319,(anonymous_26) -FN:321,(anonymous_27) -FN:325,(anonymous_28) -FN:336,(anonymous_29) -FN:347,(anonymous_30) -FN:359,(anonymous_31) -FN:365,(anonymous_32) -FN:368,(anonymous_33) -FN:374,(anonymous_34) -FN:389,(anonymous_35) -FN:411,(anonymous_36) -FN:435,(anonymous_37) -FN:439,(anonymous_38) -FN:454,(anonymous_39) -FN:467,(anonymous_40) -FN:484,(anonymous_41) -FN:488,(anonymous_42) -FN:492,(anonymous_43) -FN:496,(anonymous_44) -FN:507,(anonymous_45) -FN:508,(anonymous_46) -FN:521,(anonymous_47) -FN:550,(anonymous_48) -FN:556,(anonymous_49) -FN:564,(anonymous_50) -FN:572,(anonymous_51) -FN:579,(anonymous_52) -FN:590,(anonymous_53) -FN:596,(anonymous_54) -FN:601,(anonymous_55) -FN:610,(anonymous_56) -FNF:57 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -FNDA:0,(anonymous_28) -FNDA:0,(anonymous_29) -FNDA:0,(anonymous_30) -FNDA:0,(anonymous_31) -FNDA:0,(anonymous_32) -FNDA:0,(anonymous_33) -FNDA:0,(anonymous_34) -FNDA:0,(anonymous_35) -FNDA:0,(anonymous_36) -FNDA:0,(anonymous_37) -FNDA:0,(anonymous_38) -FNDA:0,(anonymous_39) -FNDA:0,(anonymous_40) -FNDA:0,(anonymous_41) -FNDA:0,(anonymous_42) -FNDA:0,(anonymous_43) -FNDA:0,(anonymous_44) -FNDA:0,(anonymous_45) -FNDA:0,(anonymous_46) -FNDA:0,(anonymous_47) -FNDA:0,(anonymous_48) -FNDA:0,(anonymous_49) -FNDA:0,(anonymous_50) -FNDA:0,(anonymous_51) -FNDA:0,(anonymous_52) -FNDA:0,(anonymous_53) -FNDA:0,(anonymous_54) -FNDA:0,(anonymous_55) -FNDA:0,(anonymous_56) -DA:7,4 -DA:16,4 -DA:22,4 -DA:45,4 -DA:71,0 -DA:76,0 -DA:81,0 -DA:86,0 -DA:96,0 -DA:108,0 -DA:113,0 -DA:121,0 -DA:128,0 -DA:135,0 -DA:136,0 -DA:140,0 -DA:141,0 -DA:143,0 -DA:145,0 -DA:153,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:172,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:181,0 -DA:182,0 -DA:183,0 -DA:184,0 -DA:189,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:202,0 -DA:203,0 -DA:207,0 -DA:208,0 -DA:215,0 -DA:216,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:223,0 -DA:231,0 -DA:232,0 -DA:236,0 -DA:237,0 -DA:246,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:253,0 -DA:255,0 -DA:256,0 -DA:257,0 -DA:258,0 -DA:266,0 -DA:270,0 -DA:271,0 -DA:272,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:282,0 -DA:283,0 -DA:292,0 -DA:294,0 -DA:296,0 -DA:298,0 -DA:299,0 -DA:300,0 -DA:302,0 -DA:303,0 -DA:304,0 -DA:305,0 -DA:306,0 -DA:308,0 -DA:311,0 -DA:312,0 -DA:314,0 -DA:316,0 -DA:321,0 -DA:322,0 -DA:324,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:328,0 -DA:329,0 -DA:330,0 -DA:331,0 -DA:332,0 -DA:333,0 -DA:335,0 -DA:336,0 -DA:337,0 -DA:338,0 -DA:341,0 -DA:342,0 -DA:343,0 -DA:344,0 -DA:345,0 -DA:346,0 -DA:347,0 -DA:348,0 -DA:349,0 -DA:350,0 -DA:351,0 -DA:354,0 -DA:360,0 -DA:366,0 -DA:367,0 -DA:368,0 -DA:369,0 -DA:370,0 -DA:375,0 -DA:390,0 -DA:391,0 -DA:392,0 -DA:394,0 -DA:395,0 -DA:396,0 -DA:397,0 -DA:399,0 -DA:401,0 -DA:402,0 -DA:412,0 -DA:414,0 -DA:415,0 -DA:416,0 -DA:418,0 -DA:419,0 -DA:420,0 -DA:423,0 -DA:424,0 -DA:431,0 -DA:432,0 -DA:436,0 -DA:440,0 -DA:441,0 -DA:442,0 -DA:444,0 -DA:445,0 -DA:446,0 -DA:447,0 -DA:448,0 -DA:451,0 -DA:456,0 -DA:458,0 -DA:459,0 -DA:462,0 -DA:463,0 -DA:468,0 -DA:469,0 -DA:470,0 -DA:471,0 -DA:472,0 -DA:473,0 -DA:474,0 -DA:475,0 -DA:476,0 -DA:485,0 -DA:489,0 -DA:493,0 -DA:497,0 -DA:508,0 -DA:509,0 -DA:510,0 -DA:512,0 -DA:524,0 -DA:525,0 -DA:527,0 -DA:528,0 -DA:529,0 -DA:531,0 -DA:532,0 -DA:533,0 -DA:535,0 -DA:537,0 -DA:538,0 -DA:539,0 -DA:540,0 -DA:542,0 -DA:543,0 -DA:544,0 -DA:545,0 -DA:551,0 -DA:552,0 -DA:553,0 -DA:557,0 -DA:558,0 -DA:559,0 -DA:561,0 -DA:565,0 -DA:566,0 -DA:567,0 -DA:569,0 -DA:573,0 -DA:574,0 -DA:575,0 -DA:576,0 -DA:580,0 -DA:581,0 -DA:582,0 -DA:591,0 -DA:592,0 -DA:597,0 -DA:598,0 -DA:602,0 -DA:603,0 -DA:611,0 -LF:218 -LH:4 -BRDA:140,0,0,0 -BRDA:140,0,1,0 -BRDA:160,1,0,0 -BRDA:160,1,1,0 -BRDA:189,2,0,0 -BRDA:189,2,1,0 -BRDA:220,3,0,0 -BRDA:220,3,1,0 -BRDA:236,4,0,0 -BRDA:236,4,1,0 -BRDA:250,5,0,0 -BRDA:250,5,1,0 -BRDA:252,6,0,0 -BRDA:252,6,1,0 -BRDA:252,7,0,0 -BRDA:252,7,1,0 -BRDA:270,8,0,0 -BRDA:270,8,1,0 -BRDA:292,9,0,0 -BRDA:292,9,1,0 -BRDA:303,10,0,0 -BRDA:303,10,1,0 -BRDA:337,11,0,0 -BRDA:337,11,1,0 -BRDA:343,12,0,0 -BRDA:343,12,1,0 -BRDA:418,13,0,0 -BRDA:418,13,1,0 -BRDA:440,14,0,0 -BRDA:440,14,1,0 -BRDA:444,15,0,0 -BRDA:444,15,1,0 -BRDA:456,16,0,0 -BRDA:456,16,1,0 -BRDA:456,17,0,0 -BRDA:456,17,1,0 -BRDA:462,18,0,0 -BRDA:462,18,1,0 -BRDA:468,19,0,0 -BRDA:468,19,1,0 -BRDA:469,20,0,0 -BRDA:469,20,1,0 -BRDA:473,21,0,0 -BRDA:473,21,1,0 -BRDA:509,22,0,0 -BRDA:509,22,1,0 -BRDA:524,23,0,0 -BRDA:524,23,1,0 -BRDA:528,24,0,0 -BRDA:528,24,1,0 -BRDA:532,25,0,0 -BRDA:532,25,1,0 -BRDA:542,26,0,0 -BRDA:542,26,1,0 -BRDA:557,27,0,0 -BRDA:557,27,1,0 -BRDA:565,28,0,0 -BRDA:565,28,1,0 -BRF:58 -BRH:0 -end_of_record -TN: -SF:src/corgis.js -FN:14,(anonymous_0) -FN:33,BlockPyCorgis -FN:40,(anonymous_2) -FN:46,(anonymous_3) -FN:53,(anonymous_4) -FN:57,(anonymous_5) -FN:60,(anonymous_6) -FN:77,(anonymous_7) -FN:86,(anonymous_8) -FN:91,(anonymous_9) -FN:110,(anonymous_10) -FN:113,(anonymous_11) -FN:119,(anonymous_12) -FN:127,(anonymous_13) -FNF:14 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,BlockPyCorgis -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -DA:5,1 -DA:6,1 -DA:14,1 -DA:15,0 -DA:34,0 -DA:36,0 -DA:37,0 -DA:40,1 -DA:42,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:53,0 -DA:55,0 -DA:56,0 -DA:58,0 -DA:59,0 -DA:61,0 -DA:77,1 -DA:78,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:83,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:91,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:98,0 -DA:100,0 -DA:110,1 -DA:111,0 -DA:112,0 -DA:113,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:133,0 -DA:140,0 -DA:142,0 -LF:60 -LH:6 -BRDA:47,0,0,0 -BRDA:47,0,1,0 -BRDA:47,1,0,0 -BRDA:47,1,1,0 -BRDA:79,2,0,0 -BRDA:79,2,1,0 -BRDA:111,3,0,0 -BRDA:111,3,1,0 -BRDA:124,4,0,0 -BRDA:124,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/dialog.js -FN:39,BlockPyDialog -FN:49,(anonymous_1) -FN:50,(anonymous_2) -FN:51,(anonymous_3) -FN:55,(anonymous_4) -FN:61,(anonymous_5) -FN:73,(anonymous_6) -FN:82,(anonymous_7) -FN:89,(anonymous_8) -FN:100,(anonymous_9) -FN:104,(anonymous_10) -FN:109,(anonymous_11) -FN:114,(anonymous_12) -FN:119,(anonymous_13) -FN:124,(anonymous_14) -FN:129,(anonymous_15) -FN:134,(anonymous_16) -FN:139,(anonymous_17) -FN:143,(anonymous_18) -FN:147,(anonymous_19) -FN:151,(anonymous_20) -FN:156,(anonymous_21) -FN:161,(anonymous_22) -FN:192,(anonymous_23) -FN:195,(anonymous_24) -FN:218,(anonymous_25) -FN:238,(anonymous_26) -FN:240,(anonymous_27) -FNF:28 -FNH:3 -FNDA:6,BlockPyDialog -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -DA:3,5 -DA:40,6 -DA:41,6 -DA:43,6 -DA:44,6 -DA:45,6 -DA:46,6 -DA:47,6 -DA:49,6 -DA:50,6 -DA:51,6 -DA:52,0 -DA:53,0 -DA:55,6 -DA:56,0 -DA:61,5 -DA:62,0 -DA:73,5 -DA:74,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:82,0 -DA:83,0 -DA:84,0 -DA:89,5 -DA:90,0 -DA:91,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:100,5 -DA:101,0 -DA:104,5 -DA:105,0 -DA:109,5 -DA:110,0 -DA:114,5 -DA:115,0 -DA:119,5 -DA:120,0 -DA:124,5 -DA:125,0 -DA:129,5 -DA:130,0 -DA:134,5 -DA:135,0 -DA:139,5 -DA:140,0 -DA:143,5 -DA:144,0 -DA:147,5 -DA:151,5 -DA:152,0 -DA:156,5 -DA:157,0 -DA:161,5 -DA:162,0 -DA:163,0 -DA:164,0 -DA:192,5 -DA:193,0 -DA:194,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:201,0 -DA:218,5 -DA:219,0 -DA:224,0 -DA:238,0 -DA:240,0 -DA:241,0 -LF:77 -LH:31 -BRDA:83,0,0,0 -BRDA:83,0,1,0 -BRDA:83,1,0,0 -BRDA:83,1,1,0 -BRDA:90,2,0,0 -BRDA:90,2,1,0 -BRDA:163,3,0,0 -BRDA:163,3,1,0 -BRDA:194,4,0,0 -BRDA:194,4,1,0 -BRDA:219,5,0,0 -BRDA:219,5,1,0 -BRF:12 -BRH:0 -end_of_record -TN: -SF:src/editors.js -FN:49,(anonymous_0) -FN:65,(anonymous_1) -FN:72,(anonymous_2) -FN:76,(anonymous_3) -FN:87,(anonymous_4) -FN:91,(anonymous_5) -FN:101,(anonymous_6) -FN:113,(anonymous_7) -FNF:8 -FNH:1 -FNDA:40,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -DA:30,4 -DA:42,4 -DA:44,4 -DA:49,40 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:88,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:97,0 -DA:98,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:106,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:124,0 -DA:125,0 -DA:129,0 -DA:130,0 -DA:132,0 -LF:46 -LH:4 -BRDA:94,0,0,0 -BRDA:94,0,1,0 -BRDA:103,1,0,0 -BRDA:103,1,1,0 -BRDA:115,2,0,0 -BRDA:115,2,1,0 -BRDA:115,3,0,0 -BRDA:115,3,1,0 -BRDA:119,4,0,0 -BRDA:119,4,1,0 -BRDA:120,5,0,0 -BRDA:120,5,1,0 -BRDA:120,6,0,0 -BRDA:120,6,1,0 -BRDA:121,7,0,0 -BRDA:121,7,1,0 -BRDA:129,8,0,0 -BRDA:129,8,1,0 -BRF:18 -BRH:0 -end_of_record -TN: -SF:src/engine.js -FN:23,(anonymous_0) -FN:52,(anonymous_1) -FN:61,(anonymous_2) -FN:73,(anonymous_3) -FN:84,(anonymous_4) -FN:98,(anonymous_5) -FN:105,(anonymous_6) -FN:109,(anonymous_7) -FN:116,(anonymous_8) -FN:126,(anonymous_9) -FN:136,(anonymous_10) -FN:140,(anonymous_11) -FN:158,(anonymous_12) -FN:168,(anonymous_13) -FN:172,(anonymous_14) -FN:174,(anonymous_15) -FN:184,(anonymous_16) -FN:198,(anonymous_17) -FN:218,(anonymous_18) -FN:227,(anonymous_19) -FNF:20 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -DA:24,0 -DA:25,0 -DA:27,0 -DA:36,0 -DA:39,0 -DA:45,0 -DA:46,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:74,0 -DA:87,0 -DA:89,0 -DA:91,0 -DA:93,0 -DA:95,0 -DA:101,0 -DA:110,0 -DA:111,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:121,0 -DA:123,0 -DA:127,0 -DA:128,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:140,0 -DA:141,0 -DA:142,0 -DA:146,0 -DA:148,0 -DA:149,0 -DA:151,0 -DA:154,0 -DA:159,0 -DA:160,0 -DA:169,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:185,0 -DA:187,0 -DA:188,0 -DA:190,0 -DA:191,0 -DA:193,0 -DA:194,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:202,0 -DA:204,0 -DA:206,0 -DA:207,0 -DA:210,0 -DA:219,0 -DA:220,0 -DA:228,0 -DA:229,0 -LF:77 -LH:0 -BRDA:98,0,0,0 -BRDA:109,1,0,0 -BRDA:115,2,0,0 -BRDA:115,2,1,0 -BRDA:115,3,0,0 -BRDA:115,3,1,0 -BRDA:146,4,0,0 -BRDA:146,4,1,0 -BRDA:146,5,0,0 -BRDA:146,5,1,0 -BRDA:187,6,0,0 -BRDA:187,6,1,0 -BRDA:199,7,0,0 -BRDA:199,7,1,0 -BRDA:202,8,0,0 -BRDA:202,8,1,0 -BRDA:202,9,0,0 -BRDA:202,9,1,0 -BRDA:203,10,0,0 -BRDA:203,10,1,0 -BRDA:219,11,0,0 -BRDA:219,11,1,0 -BRDA:228,12,0,0 -BRDA:228,12,1,0 -BRF:24 -BRH:0 -end_of_record -TN: -SF:src/feedback.js -FN:88,(anonymous_0) -FN:100,(anonymous_1) -FN:106,(anonymous_2) -FN:116,(anonymous_3) -FN:133,(anonymous_4) -FN:145,(anonymous_5) -FN:164,(anonymous_6) -FN:172,(anonymous_7) -FN:205,(anonymous_8) -FN:227,(anonymous_9) -FN:237,(anonymous_10) -FN:241,(anonymous_11) -FN:246,(anonymous_12) -FN:260,(anonymous_13) -FN:268,(anonymous_14) -FN:282,(anonymous_15) -FN:313,(anonymous_16) -FN:324,(anonymous_17) -FN:327,(anonymous_18) -FN:347,(anonymous_19) -FN:350,(anonymous_20) -FN:356,(anonymous_21) -FN:365,(anonymous_22) -FN:369,(anonymous_23) -FN:390,(anonymous_24) -FN:391,(anonymous_25) -FN:411,(anonymous_26) -FN:440,(anonymous_27) -FNF:28 -FNH:2 -FNDA:5,(anonymous_0) -FNDA:1,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -DA:3,5 -DA:89,5 -DA:90,5 -DA:92,5 -DA:94,5 -DA:95,5 -DA:96,5 -DA:97,5 -DA:100,5 -DA:107,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:124,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:140,0 -DA:141,0 -DA:142,0 -DA:146,0 -DA:147,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:151,0 -DA:155,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:178,0 -DA:179,0 -DA:182,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:190,0 -DA:191,0 -DA:195,0 -DA:196,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:203,0 -DA:205,0 -DA:206,0 -DA:210,0 -DA:213,0 -DA:216,0 -DA:217,0 -DA:218,0 -DA:219,0 -DA:223,0 -DA:224,0 -DA:225,0 -DA:226,0 -DA:227,0 -DA:228,0 -DA:229,0 -DA:232,0 -DA:235,0 -DA:236,0 -DA:237,0 -DA:242,0 -DA:243,0 -DA:247,0 -DA:248,0 -DA:249,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:254,0 -DA:256,0 -DA:257,0 -DA:258,0 -DA:260,0 -DA:261,0 -DA:269,0 -DA:271,0 -DA:272,0 -DA:273,0 -DA:279,0 -DA:283,0 -DA:284,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:289,0 -DA:290,0 -DA:291,0 -DA:292,0 -DA:293,0 -DA:294,0 -DA:298,0 -DA:314,0 -DA:315,0 -DA:316,0 -DA:318,0 -DA:319,0 -DA:320,0 -DA:321,0 -DA:323,0 -DA:324,0 -DA:325,0 -DA:327,0 -DA:328,0 -DA:330,0 -DA:331,0 -DA:332,0 -DA:333,0 -DA:334,0 -DA:335,0 -DA:336,0 -DA:338,0 -DA:340,0 -DA:341,0 -DA:343,0 -DA:346,0 -DA:347,0 -DA:348,0 -DA:350,0 -DA:351,0 -DA:357,0 -DA:358,0 -DA:359,0 -DA:360,0 -DA:366,0 -DA:370,0 -DA:371,0 -DA:374,0 -DA:375,0 -DA:376,0 -DA:378,0 -DA:379,0 -DA:381,0 -DA:382,0 -DA:383,0 -DA:384,0 -DA:385,0 -DA:386,0 -DA:391,0 -DA:392,0 -DA:393,0 -DA:395,0 -DA:396,0 -DA:397,0 -DA:399,0 -DA:400,0 -DA:401,0 -DA:403,0 -DA:404,0 -DA:405,0 -DA:407,0 -DA:412,0 -DA:413,0 -DA:414,0 -DA:415,0 -DA:416,0 -DA:417,0 -DA:418,0 -DA:419,0 -DA:420,0 -DA:421,0 -DA:425,0 -DA:427,0 -DA:430,0 -DA:431,0 -DA:433,0 -DA:434,0 -DA:437,0 -DA:441,0 -DA:442,0 -DA:443,0 -DA:445,0 -DA:446,0 -DA:448,0 -DA:449,0 -DA:451,0 -DA:453,0 -LF:187 -LH:9 -BRDA:125,0,0,0 -BRDA:125,0,1,0 -BRDA:133,1,0,0 -BRDA:146,2,0,0 -BRDA:146,2,1,0 -BRDA:148,3,0,0 -BRDA:148,3,1,0 -BRDA:150,4,0,0 -BRDA:150,4,1,0 -BRDA:183,5,0,0 -BRDA:183,5,1,0 -BRDA:183,6,0,0 -BRDA:183,6,1,0 -BRDA:190,7,0,0 -BRDA:190,7,1,0 -BRDA:190,8,0,0 -BRDA:190,8,1,0 -BRDA:195,9,0,0 -BRDA:195,9,1,0 -BRDA:195,10,0,0 -BRDA:195,10,1,0 -BRDA:218,11,0,0 -BRDA:218,11,1,0 -BRDA:218,12,0,0 -BRDA:218,12,1,0 -BRDA:225,13,0,0 -BRDA:225,13,1,0 -BRDA:228,14,0,0 -BRDA:228,14,1,0 -BRDA:251,15,0,0 -BRDA:251,15,1,0 -BRDA:257,16,0,0 -BRDA:257,16,1,0 -BRDA:272,17,0,0 -BRDA:272,17,1,0 -BRDA:289,18,0,0 -BRDA:289,18,1,0 -BRDA:294,19,0,0 -BRDA:294,19,1,0 -BRDA:295,20,0,0 -BRDA:295,20,1,0 -BRDA:299,21,0,0 -BRDA:299,21,1,0 -BRDA:301,22,0,0 -BRDA:301,22,1,0 -BRDA:304,23,0,0 -BRDA:304,23,1,0 -BRDA:315,24,0,0 -BRDA:315,24,1,0 -BRDA:320,25,0,0 -BRDA:320,25,1,0 -BRDA:334,26,0,0 -BRDA:334,26,1,0 -BRDA:335,27,0,0 -BRDA:335,27,1,0 -BRDA:340,28,0,0 -BRDA:340,28,1,0 -BRDA:357,29,0,0 -BRDA:357,29,1,0 -BRDA:359,30,0,0 -BRDA:359,30,1,0 -BRDA:370,31,0,0 -BRDA:370,31,1,0 -BRDA:378,32,0,0 -BRDA:378,32,1,0 -BRDA:385,33,0,0 -BRDA:385,33,1,0 -BRDA:385,34,0,0 -BRDA:385,34,1,0 -BRDA:392,35,0,0 -BRDA:392,35,1,0 -BRDA:396,36,0,0 -BRDA:396,36,1,0 -BRDA:401,37,0,0 -BRDA:401,37,1,0 -BRDA:401,38,0,0 -BRDA:401,38,1,0 -BRDA:404,39,0,0 -BRDA:404,39,1,0 -BRDA:416,40,0,0 -BRDA:416,40,1,0 -BRDA:417,41,0,0 -BRDA:417,41,1,0 -BRDA:417,42,0,0 -BRDA:417,42,1,0 -BRDA:417,42,2,0 -BRDA:420,43,0,0 -BRDA:420,43,1,0 -BRDA:430,44,0,0 -BRDA:430,44,1,0 -BRDA:433,45,0,0 -BRDA:433,45,1,0 -BRDA:433,46,0,0 -BRDA:433,46,1,0 -BRDA:441,47,0,0 -BRDA:441,47,1,0 -BRF:96 -BRH:0 -end_of_record -TN: -SF:src/files.js -FN:5,(anonymous_0) -FN:212,chompSpecialFile -FN:242,(anonymous_2) -FN:251,makeModelFile -FN:255,makeMockModelFile -FN:256,(anonymous_5) -FN:256,(anonymous_6) -FN:259,loadConcatenatedFile -FN:283,createConcatenatedFile -FN:284,(anonymous_9) -FN:292,observeConcatenatedFile -FN:293,(anonymous_11) -FN:295,(anonymous_12) -FN:305,(anonymous_13) -FN:322,(anonymous_14) -FN:329,(anonymous_15) -FN:333,(anonymous_16) -FN:337,(anonymous_17) -FN:338,(anonymous_18) -FN:339,(anonymous_19) -FN:340,(anonymous_20) -FN:375,(anonymous_21) -FN:415,(anonymous_22) -FN:430,(anonymous_23) -FN:438,(anonymous_24) -FN:450,(anonymous_25) -FN:477,(anonymous_26) -FN:482,(anonymous_27) -FN:486,(anonymous_28) -FN:495,(anonymous_29) -FN:504,(anonymous_30) -FN:509,(anonymous_31) -FN:513,(anonymous_32) -FN:518,(anonymous_33) -FN:525,(anonymous_34) -FN:530,(anonymous_35) -FN:532,(anonymous_36) -FN:536,(anonymous_37) -FN:603,(anonymous_38) -FN:612,(anonymous_39) -FN:636,(anonymous_40) -FN:642,(anonymous_41) -FN:648,(anonymous_42) -FN:661,(anonymous_43) -FN:666,(anonymous_44) -FN:669,(anonymous_45) -FN:692,(anonymous_46) -FN:698,(anonymous_47) -FN:700,(anonymous_48) -FN:701,(anonymous_49) -FN:718,(anonymous_50) -FN:720,(anonymous_51) -FN:721,(anonymous_52) -FN:722,(anonymous_53) -FN:727,(anonymous_54) -FNF:55 -FNH:1 -FNDA:36,(anonymous_0) -FNDA:0,chompSpecialFile -FNDA:0,(anonymous_2) -FNDA:0,makeModelFile -FNDA:0,makeMockModelFile -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,loadConcatenatedFile -FNDA:0,createConcatenatedFile -FNDA:0,(anonymous_9) -FNDA:0,observeConcatenatedFile -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -FNDA:0,(anonymous_28) -FNDA:0,(anonymous_29) -FNDA:0,(anonymous_30) -FNDA:0,(anonymous_31) -FNDA:0,(anonymous_32) -FNDA:0,(anonymous_33) -FNDA:0,(anonymous_34) -FNDA:0,(anonymous_35) -FNDA:0,(anonymous_36) -FNDA:0,(anonymous_37) -FNDA:0,(anonymous_38) -FNDA:0,(anonymous_39) -FNDA:0,(anonymous_40) -FNDA:0,(anonymous_41) -FNDA:0,(anonymous_42) -FNDA:0,(anonymous_43) -FNDA:0,(anonymous_44) -FNDA:0,(anonymous_45) -FNDA:0,(anonymous_46) -FNDA:0,(anonymous_47) -FNDA:0,(anonymous_48) -FNDA:0,(anonymous_49) -FNDA:0,(anonymous_50) -FNDA:0,(anonymous_51) -FNDA:0,(anonymous_52) -FNDA:0,(anonymous_53) -FNDA:0,(anonymous_54) -DA:5,4 -DA:6,36 -DA:7,4 -DA:9,36 -DA:10,36 -DA:11,36 -DA:12,32 -DA:13,32 -DA:15,36 -DA:26,4 -DA:136,4 -DA:190,4 -DA:201,4 -DA:213,0 -DA:214,0 -DA:216,0 -DA:220,4 -DA:221,4 -DA:223,4 -DA:229,4 -DA:231,4 -DA:234,4 -DA:243,0 -DA:244,0 -DA:245,0 -DA:246,0 -DA:247,0 -DA:252,0 -DA:256,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:269,0 -DA:270,0 -DA:272,0 -DA:275,0 -DA:276,0 -DA:278,0 -DA:284,0 -DA:285,0 -DA:293,0 -DA:294,0 -DA:295,0 -DA:296,0 -DA:297,0 -DA:306,0 -DA:307,0 -DA:308,0 -DA:310,0 -DA:311,0 -DA:313,0 -DA:314,0 -DA:323,0 -DA:324,0 -DA:326,0 -DA:330,0 -DA:334,0 -DA:335,0 -DA:338,0 -DA:339,0 -DA:341,0 -DA:342,0 -DA:344,0 -DA:345,0 -DA:346,0 -DA:348,0 -DA:349,0 -DA:350,0 -DA:376,0 -DA:377,0 -DA:378,0 -DA:379,0 -DA:380,0 -DA:381,0 -DA:382,0 -DA:383,0 -DA:384,0 -DA:385,0 -DA:386,0 -DA:387,0 -DA:388,0 -DA:389,0 -DA:390,0 -DA:391,0 -DA:392,0 -DA:393,0 -DA:394,0 -DA:395,0 -DA:396,0 -DA:397,0 -DA:398,0 -DA:399,0 -DA:400,0 -DA:401,0 -DA:402,0 -DA:403,0 -DA:404,0 -DA:405,0 -DA:406,0 -DA:409,0 -DA:411,0 -DA:416,0 -DA:417,0 -DA:418,0 -DA:419,0 -DA:420,0 -DA:423,0 -DA:424,0 -DA:425,0 -DA:426,0 -DA:431,0 -DA:432,0 -DA:433,0 -DA:434,0 -DA:435,0 -DA:439,0 -DA:440,0 -DA:441,0 -DA:442,0 -DA:443,0 -DA:451,0 -DA:453,0 -DA:454,0 -DA:455,0 -DA:457,0 -DA:459,0 -DA:460,0 -DA:463,0 -DA:464,0 -DA:465,0 -DA:466,0 -DA:468,0 -DA:470,0 -DA:471,0 -DA:473,0 -DA:478,0 -DA:479,0 -DA:483,0 -DA:487,0 -DA:496,0 -DA:497,0 -DA:498,0 -DA:499,0 -DA:500,0 -DA:501,0 -DA:504,0 -DA:505,0 -DA:510,0 -DA:511,0 -DA:512,0 -DA:513,0 -DA:515,0 -DA:519,0 -DA:520,0 -DA:521,0 -DA:522,0 -DA:525,0 -DA:526,0 -DA:531,0 -DA:532,0 -DA:558,0 -DA:559,0 -DA:561,0 -DA:563,0 -DA:564,0 -DA:565,0 -DA:568,0 -DA:569,0 -DA:570,0 -DA:571,0 -DA:572,0 -DA:575,0 -DA:576,0 -DA:577,0 -DA:579,0 -DA:580,0 -DA:581,0 -DA:584,0 -DA:585,0 -DA:586,0 -DA:587,0 -DA:588,0 -DA:589,0 -DA:590,0 -DA:592,0 -DA:593,0 -DA:594,0 -DA:595,0 -DA:597,0 -DA:598,0 -DA:604,0 -DA:605,0 -DA:606,0 -DA:609,0 -DA:613,0 -DA:614,0 -DA:615,0 -DA:617,0 -DA:619,0 -DA:621,0 -DA:623,0 -DA:625,0 -DA:627,0 -DA:629,0 -DA:631,0 -DA:633,0 -DA:637,0 -DA:638,0 -DA:639,0 -DA:640,0 -DA:641,0 -DA:642,0 -DA:643,0 -DA:644,0 -DA:646,0 -DA:648,0 -DA:649,0 -DA:650,0 -DA:651,0 -DA:652,0 -DA:653,0 -DA:656,0 -DA:657,0 -DA:658,0 -DA:661,0 -DA:662,0 -DA:663,0 -DA:664,0 -DA:666,0 -DA:675,0 -DA:677,0 -DA:678,0 -DA:679,0 -DA:681,0 -DA:682,0 -DA:683,0 -DA:685,0 -DA:686,0 -DA:688,0 -DA:689,0 -DA:690,0 -DA:692,0 -DA:693,0 -DA:699,0 -DA:700,0 -DA:701,0 -DA:702,0 -DA:703,0 -DA:704,0 -DA:705,0 -DA:706,0 -DA:708,0 -DA:709,0 -DA:711,0 -DA:712,0 -DA:715,0 -DA:719,0 -DA:720,0 -DA:721,0 -DA:722,0 -DA:723,0 -DA:724,0 -DA:726,0 -DA:727,0 -DA:728,0 -DA:729,0 -DA:730,0 -LF:270 -LH:19 -BRDA:6,0,0,4 -BRDA:6,0,1,32 -BRDA:11,1,0,32 -BRDA:11,1,1,4 -BRDA:213,2,0,0 -BRDA:213,2,1,0 -BRDA:245,3,0,0 -BRDA:245,3,1,0 -BRDA:252,4,0,0 -BRDA:252,4,1,0 -BRDA:260,5,0,0 -BRDA:260,5,1,0 -BRDA:264,6,0,0 -BRDA:264,6,1,0 -BRDA:269,7,0,0 -BRDA:269,7,1,0 -BRDA:275,8,0,0 -BRDA:275,8,1,0 -BRDA:323,9,0,0 -BRDA:323,9,1,0 -BRDA:342,10,0,0 -BRDA:342,10,1,0 -BRDA:346,11,0,0 -BRDA:346,11,1,0 -BRDA:349,12,0,0 -BRDA:349,12,1,0 -BRDA:376,13,0,0 -BRDA:376,13,1,0 -BRDA:378,14,0,0 -BRDA:378,14,1,0 -BRDA:380,15,0,0 -BRDA:380,15,1,0 -BRDA:382,16,0,0 -BRDA:382,16,1,0 -BRDA:384,17,0,0 -BRDA:384,17,1,0 -BRDA:386,18,0,0 -BRDA:386,18,1,0 -BRDA:388,19,0,0 -BRDA:388,19,1,0 -BRDA:390,20,0,0 -BRDA:390,20,1,0 -BRDA:392,21,0,0 -BRDA:392,21,1,0 -BRDA:394,22,0,0 -BRDA:394,22,1,0 -BRDA:396,23,0,0 -BRDA:396,23,1,0 -BRDA:398,24,0,0 -BRDA:398,24,1,0 -BRDA:400,25,0,0 -BRDA:400,25,1,0 -BRDA:402,26,0,0 -BRDA:402,26,1,0 -BRDA:404,27,0,0 -BRDA:404,27,1,0 -BRDA:406,28,0,0 -BRDA:406,28,1,0 -BRDA:406,29,0,0 -BRDA:406,29,1,0 -BRDA:406,29,2,0 -BRDA:419,30,0,0 -BRDA:419,30,1,0 -BRDA:423,31,0,0 -BRDA:423,31,1,0 -BRDA:440,32,0,0 -BRDA:440,32,1,0 -BRDA:441,33,0,0 -BRDA:441,33,1,0 -BRDA:451,34,0,0 -BRDA:451,34,1,0 -BRDA:454,35,0,0 -BRDA:454,35,1,0 -BRDA:459,36,0,0 -BRDA:459,36,1,0 -BRDA:465,37,0,0 -BRDA:465,37,1,0 -BRDA:470,38,0,0 -BRDA:470,38,1,0 -BRDA:478,39,0,0 -BRDA:478,39,1,0 -BRDA:496,40,0,0 -BRDA:496,40,1,0 -BRDA:500,41,0,0 -BRDA:500,41,1,0 -BRDA:505,42,0,0 -BRDA:505,42,1,0 -BRDA:512,43,0,0 -BRDA:512,43,1,0 -BRDA:519,44,0,0 -BRDA:519,44,1,0 -BRDA:521,45,0,0 -BRDA:521,45,1,0 -BRDA:526,46,0,0 -BRDA:526,46,1,0 -BRDA:531,47,0,0 -BRDA:531,47,1,0 -BRDA:558,48,0,0 -BRDA:558,48,1,0 -BRDA:563,49,0,0 -BRDA:563,49,1,0 -BRDA:568,50,0,0 -BRDA:568,50,1,0 -BRDA:571,51,0,0 -BRDA:571,51,1,0 -BRDA:580,52,0,0 -BRDA:580,52,1,0 -BRDA:589,53,0,0 -BRDA:589,53,1,0 -BRDA:594,54,0,0 -BRDA:594,54,1,0 -BRDA:597,55,0,0 -BRDA:597,55,1,0 -BRDA:605,56,0,0 -BRDA:605,56,1,0 -BRDA:613,57,0,0 -BRDA:613,57,1,0 -BRDA:614,58,0,0 -BRDA:614,58,1,0 -BRDA:619,59,0,0 -BRDA:619,59,1,0 -BRDA:619,59,2,0 -BRDA:619,59,3,0 -BRDA:619,59,4,0 -BRDA:619,59,5,0 -BRDA:644,60,0,0 -BRDA:644,60,1,0 -BRDA:650,61,0,0 -BRDA:650,61,1,0 -BRDA:652,62,0,0 -BRDA:652,62,1,0 -BRDA:656,63,0,0 -BRDA:656,63,1,0 -BRDA:669,64,0,0 -BRDA:677,65,0,0 -BRDA:677,65,1,0 -BRDA:678,66,0,0 -BRDA:678,66,1,0 -BRDA:678,67,0,0 -BRDA:678,67,1,0 -BRDA:681,68,0,0 -BRDA:681,68,1,0 -BRDA:689,69,0,0 -BRDA:689,69,1,0 -BRDA:705,70,0,0 -BRDA:705,70,1,0 -BRDA:708,71,0,0 -BRDA:708,71,1,0 -BRDA:723,72,0,0 -BRDA:723,72,1,0 -BRDA:726,73,0,0 -BRDA:726,73,1,0 -BRF:152 -BRH:4 -end_of_record -TN: -SF:src/footer.js -FNF:0 -FNH:0 -DA:2,4 -LF:1 -LH:1 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/history.js -FN:42,(anonymous_0) -FN:50,(anonymous_1) -FN:56,(anonymous_2) -FN:62,(anonymous_3) -FN:75,(anonymous_4) -FN:80,(anonymous_5) -FN:85,(anonymous_6) -FN:91,(anonymous_7) -FN:97,(anonymous_8) -FN:102,(anonymous_9) -FN:109,(anonymous_10) -FN:118,(anonymous_11) -FN:148,isSameDay -FN:160,prettyPrintDateTime -FN:193,(anonymous_14) -FN:196,(anonymous_15) -FN:197,(anonymous_16) -FN:202,(anonymous_17) -FNF:18 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,isSameDay -FNDA:0,prettyPrintDateTime -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -DA:3,4 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:57,0 -DA:63,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:72,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:81,0 -DA:82,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:98,0 -DA:99,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:110,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:119,0 -DA:126,4 -DA:136,4 -DA:142,4 -DA:149,0 -DA:168,0 -DA:169,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:176,0 -DA:177,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:182,0 -DA:193,4 -DA:194,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:200,0 -DA:202,0 -LF:68 -LH:5 -BRDA:57,0,0,0 -BRDA:57,0,1,0 -BRDA:57,0,2,0 -BRDA:57,0,3,0 -BRDA:57,0,4,0 -BRDA:63,1,0,0 -BRDA:63,1,1,0 -BRDA:67,2,0,0 -BRDA:67,2,1,0 -BRDA:103,3,0,0 -BRDA:103,3,1,0 -BRDA:110,4,0,0 -BRDA:110,4,1,0 -BRDA:119,5,0,0 -BRDA:119,5,1,0 -BRDA:119,5,2,0 -BRDA:149,6,0,0 -BRDA:149,6,1,0 -BRDA:149,6,2,0 -BRDA:168,7,0,0 -BRDA:168,7,1,0 -BRDA:173,8,0,0 -BRDA:173,8,1,0 -BRDA:179,9,0,0 -BRDA:179,9,1,0 -BRF:25 -BRH:0 -end_of_record -TN: -SF:src/interface.js -FN:36,makeExtraInterfaceSubscriptions -FN:39,(anonymous_1) -FN:43,(anonymous_2) -FN:44,(anonymous_3) -FN:50,(anonymous_4) -FN:55,(anonymous_5) -FN:60,(anonymous_6) -FN:67,(anonymous_7) -FN:78,makeInterface -FNF:9 -FNH:3 -FNDA:3,makeExtraInterfaceSubscriptions -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,makeInterface -DA:25,4 -DA:38,3 -DA:39,3 -DA:40,1 -DA:41,0 -DA:43,1 -DA:44,1 -DA:45,0 -DA:50,3 -DA:51,0 -DA:53,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:59,0 -DA:61,0 -DA:63,0 -DA:64,0 -DA:67,0 -DA:68,0 -DA:70,0 -DA:79,0 -LF:22 -LH:7 -BRDA:40,0,0,0 -BRDA:40,0,1,1 -BRDA:53,1,0,0 -BRDA:53,1,1,0 -BRF:4 -BRH:1 -end_of_record -TN: -SF:src/server.js -FN:24,BlockPyServer -FN:62,(anonymous_1) -FN:88,(anonymous_2) -FN:94,(anonymous_3) -FN:101,(anonymous_4) -FN:102,pushAnyQueued -FN:114,(anonymous_6) -FN:115,(anonymous_7) -FN:123,(anonymous_8) -FN:136,(anonymous_9) -FN:137,(anonymous_10) -FN:140,(anonymous_11) -FN:156,(anonymous_12) -FN:160,(anonymous_13) -FN:178,(anonymous_14) -FN:207,(anonymous_15) -FN:218,(anonymous_16) -FN:243,(anonymous_17) -FN:250,(anonymous_18) -FN:266,(anonymous_19) -FN:276,(anonymous_20) -FN:278,(anonymous_21) -FN:282,(anonymous_22) -FN:298,(anonymous_23) -FN:321,(anonymous_24) -FN:323,(anonymous_25) -FN:329,(anonymous_26) -FN:353,(anonymous_27) -FN:371,(anonymous_28) -FN:379,(anonymous_29) -FN:385,(anonymous_30) -FN:393,(anonymous_31) -FN:403,(anonymous_32) -FN:409,(anonymous_33) -FN:417,(anonymous_34) -FN:426,(anonymous_35) -FN:441,(anonymous_36) -FN:450,(anonymous_37) -FN:455,(anonymous_38) -FN:462,(anonymous_39) -FN:467,(anonymous_40) -FN:474,(anonymous_41) -FN:485,(anonymous_42) -FN:488,(anonymous_43) -FN:501,(anonymous_44) -FN:508,(anonymous_45) -FN:511,(anonymous_46) -FN:520,(anonymous_47) -FN:528,(anonymous_48) -FN:531,(anonymous_49) -FN:540,(anonymous_50) -FN:554,(anonymous_51) -FN:561,(anonymous_52) -FN:578,(anonymous_53) -FN:586,(anonymous_54) -FN:592,(anonymous_55) -FN:604,(anonymous_56) -FN:612,(anonymous_57) -FN:620,(anonymous_58) -FN:630,(anonymous_59) -FN:650,(anonymous_60) -FN:656,(anonymous_61) -FN:668,(anonymous_62) -FN:674,(anonymous_63) -FN:688,(anonymous_64) -FNF:65 -FNH:0 -FNDA:0,BlockPyServer -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,pushAnyQueued -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -FNDA:0,(anonymous_28) -FNDA:0,(anonymous_29) -FNDA:0,(anonymous_30) -FNDA:0,(anonymous_31) -FNDA:0,(anonymous_32) -FNDA:0,(anonymous_33) -FNDA:0,(anonymous_34) -FNDA:0,(anonymous_35) -FNDA:0,(anonymous_36) -FNDA:0,(anonymous_37) -FNDA:0,(anonymous_38) -FNDA:0,(anonymous_39) -FNDA:0,(anonymous_40) -FNDA:0,(anonymous_41) -FNDA:0,(anonymous_42) -FNDA:0,(anonymous_43) -FNDA:0,(anonymous_44) -FNDA:0,(anonymous_45) -FNDA:0,(anonymous_46) -FNDA:0,(anonymous_47) -FNDA:0,(anonymous_48) -FNDA:0,(anonymous_49) -FNDA:0,(anonymous_50) -FNDA:0,(anonymous_51) -FNDA:0,(anonymous_52) -FNDA:0,(anonymous_53) -FNDA:0,(anonymous_54) -FNDA:0,(anonymous_55) -FNDA:0,(anonymous_56) -FNDA:0,(anonymous_57) -FNDA:0,(anonymous_58) -FNDA:0,(anonymous_59) -FNDA:0,(anonymous_60) -FNDA:0,(anonymous_61) -FNDA:0,(anonymous_62) -FNDA:0,(anonymous_63) -FNDA:0,(anonymous_64) -DA:8,1 -DA:25,0 -DA:28,0 -DA:31,0 -DA:34,0 -DA:38,0 -DA:43,0 -DA:44,0 -DA:46,0 -DA:48,0 -DA:49,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:55,0 -DA:62,1 -DA:63,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:71,0 -DA:72,0 -DA:74,0 -DA:76,0 -DA:79,0 -DA:88,1 -DA:89,0 -DA:90,0 -DA:91,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:114,1 -DA:115,0 -DA:116,0 -DA:117,0 -DA:123,1 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:136,1 -DA:137,0 -DA:138,0 -DA:140,0 -DA:141,0 -DA:156,1 -DA:160,1 -DA:161,0 -DA:162,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:169,0 -DA:171,0 -DA:178,1 -DA:179,0 -DA:180,0 -DA:181,0 -DA:182,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:198,0 -DA:207,1 -DA:208,0 -DA:209,0 -DA:210,0 -DA:218,1 -DA:219,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:224,0 -DA:226,0 -DA:227,0 -DA:229,0 -DA:230,0 -DA:232,0 -DA:233,0 -DA:235,0 -DA:236,0 -DA:243,1 -DA:244,0 -DA:245,0 -DA:246,0 -DA:250,1 -DA:252,0 -DA:253,0 -DA:254,0 -DA:255,0 -DA:258,0 -DA:259,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:266,1 -DA:267,0 -DA:268,0 -DA:269,0 -DA:270,0 -DA:271,0 -DA:276,1 -DA:278,0 -DA:280,0 -DA:281,0 -DA:283,0 -DA:284,0 -DA:285,0 -DA:287,0 -DA:288,0 -DA:290,0 -DA:291,0 -DA:293,0 -DA:294,0 -DA:299,0 -DA:300,0 -DA:303,0 -DA:304,0 -DA:306,0 -DA:321,1 -DA:322,0 -DA:323,0 -DA:325,0 -DA:326,0 -DA:328,0 -DA:330,0 -DA:331,0 -DA:333,0 -DA:334,0 -DA:335,0 -DA:337,0 -DA:340,0 -DA:341,0 -DA:343,0 -DA:344,0 -DA:345,0 -DA:347,0 -DA:348,0 -DA:354,0 -DA:356,0 -DA:357,0 -DA:358,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:367,0 -DA:371,1 -DA:372,0 -DA:373,0 -DA:380,0 -DA:381,0 -DA:382,0 -DA:383,0 -DA:386,0 -DA:387,0 -DA:388,0 -DA:389,0 -DA:390,0 -DA:393,0 -DA:394,0 -DA:395,0 -DA:396,0 -DA:403,1 -DA:404,0 -DA:405,0 -DA:406,0 -DA:407,0 -DA:408,0 -DA:410,0 -DA:411,0 -DA:413,0 -DA:414,0 -DA:418,0 -DA:419,0 -DA:422,0 -DA:426,1 -DA:427,0 -DA:428,0 -DA:429,0 -DA:430,0 -DA:431,0 -DA:432,0 -DA:433,0 -DA:434,0 -DA:435,0 -DA:436,0 -DA:437,0 -DA:439,0 -DA:442,0 -DA:443,0 -DA:446,0 -DA:450,1 -DA:451,0 -DA:452,0 -DA:453,0 -DA:454,0 -DA:456,0 -DA:457,0 -DA:462,1 -DA:463,0 -DA:464,0 -DA:465,0 -DA:466,0 -DA:468,0 -DA:469,0 -DA:474,1 -DA:475,0 -DA:476,0 -DA:477,0 -DA:478,0 -DA:479,0 -DA:480,0 -DA:481,0 -DA:482,0 -DA:483,0 -DA:485,0 -DA:486,0 -DA:489,0 -DA:490,0 -DA:492,0 -DA:494,0 -DA:497,0 -DA:501,1 -DA:502,0 -DA:503,0 -DA:504,0 -DA:505,0 -DA:506,0 -DA:507,0 -DA:508,0 -DA:509,0 -DA:512,0 -DA:513,0 -DA:516,0 -DA:520,1 -DA:521,0 -DA:522,0 -DA:523,0 -DA:524,0 -DA:525,0 -DA:526,0 -DA:527,0 -DA:528,0 -DA:529,0 -DA:532,0 -DA:533,0 -DA:536,0 -DA:540,1 -DA:541,0 -DA:542,0 -DA:543,0 -DA:545,0 -DA:546,0 -DA:547,0 -DA:548,0 -DA:549,0 -DA:550,0 -DA:551,0 -DA:552,0 -DA:554,0 -DA:557,0 -DA:561,1 -DA:562,0 -DA:563,0 -DA:564,0 -DA:566,0 -DA:567,0 -DA:568,0 -DA:569,0 -DA:570,0 -DA:572,0 -DA:574,0 -DA:578,1 -DA:579,0 -DA:580,0 -DA:581,0 -DA:583,0 -DA:584,0 -DA:585,0 -DA:586,0 -DA:587,0 -DA:588,0 -DA:591,0 -DA:593,0 -DA:594,0 -DA:604,1 -DA:605,0 -DA:606,0 -DA:607,0 -DA:608,0 -DA:609,0 -DA:610,0 -DA:611,0 -DA:613,0 -DA:614,0 -DA:616,0 -DA:617,0 -DA:621,0 -DA:622,0 -DA:625,0 -DA:626,0 -DA:630,1 -DA:631,0 -DA:632,0 -DA:634,0 -DA:635,0 -DA:636,0 -DA:637,0 -DA:639,0 -DA:640,0 -DA:641,0 -DA:642,0 -DA:643,0 -DA:644,0 -DA:646,0 -DA:650,1 -DA:651,0 -DA:652,0 -DA:656,1 -DA:657,0 -DA:658,0 -DA:659,0 -DA:661,0 -DA:662,0 -DA:663,0 -DA:664,0 -DA:665,0 -DA:666,0 -DA:667,0 -DA:668,0 -DA:669,0 -DA:670,0 -DA:671,0 -DA:673,0 -DA:675,0 -DA:676,0 -DA:678,0 -DA:680,0 -DA:681,0 -DA:688,1 -DA:689,0 -DA:690,0 -DA:691,0 -DA:692,0 -DA:693,0 -LF:364 -LH:32 -BRDA:63,0,0,0 -BRDA:63,0,1,0 -BRDA:64,1,0,0 -BRDA:64,1,1,0 -BRDA:66,2,0,0 -BRDA:66,2,1,0 -BRDA:71,3,0,0 -BRDA:71,3,1,0 -BRDA:89,4,0,0 -BRDA:89,4,1,0 -BRDA:95,5,0,0 -BRDA:95,5,1,0 -BRDA:103,6,0,0 -BRDA:103,6,1,0 -BRDA:104,7,0,0 -BRDA:104,7,1,0 -BRDA:116,8,0,0 -BRDA:116,8,1,0 -BRDA:161,9,0,0 -BRDA:161,9,1,0 -BRDA:165,10,0,0 -BRDA:165,10,1,0 -BRDA:166,11,0,0 -BRDA:166,11,1,0 -BRDA:208,12,0,0 -BRDA:208,12,1,0 -BRDA:210,13,0,0 -BRDA:210,13,1,0 -BRDA:220,14,0,0 -BRDA:220,14,1,0 -BRDA:224,15,0,0 -BRDA:224,15,1,0 -BRDA:224,15,2,0 -BRDA:224,15,3,0 -BRDA:245,16,0,0 -BRDA:245,16,1,0 -BRDA:254,17,0,0 -BRDA:254,17,1,0 -BRDA:260,18,0,0 -BRDA:260,18,1,0 -BRDA:269,19,0,0 -BRDA:269,19,1,0 -BRDA:284,20,0,0 -BRDA:284,20,1,0 -BRDA:290,21,0,0 -BRDA:290,21,1,0 -BRDA:293,22,0,0 -BRDA:293,22,1,0 -BRDA:303,23,0,0 -BRDA:303,23,1,0 -BRDA:330,24,0,0 -BRDA:330,24,1,0 -BRDA:334,25,0,0 -BRDA:334,25,1,0 -BRDA:341,26,0,0 -BRDA:341,26,1,0 -BRDA:344,27,0,0 -BRDA:344,27,1,0 -BRDA:347,28,0,0 -BRDA:347,28,1,0 -BRDA:357,29,0,0 -BRDA:357,29,1,0 -BRDA:364,30,0,0 -BRDA:364,30,1,0 -BRDA:371,31,0,0 -BRDA:386,32,0,0 -BRDA:386,32,1,0 -BRDA:389,33,0,0 -BRDA:389,33,1,0 -BRDA:405,34,0,0 -BRDA:405,34,1,0 -BRDA:410,35,0,0 -BRDA:410,35,1,0 -BRDA:428,36,0,0 -BRDA:428,36,1,0 -BRDA:451,37,0,0 -BRDA:451,37,1,0 -BRDA:463,38,0,0 -BRDA:463,38,1,0 -BRDA:474,39,0,0 -BRDA:476,40,0,0 -BRDA:476,40,1,0 -BRDA:482,41,0,0 -BRDA:482,41,1,0 -BRDA:489,42,0,0 -BRDA:489,42,1,0 -BRDA:503,43,0,0 -BRDA:503,43,1,0 -BRDA:522,44,0,0 -BRDA:522,44,1,0 -BRDA:541,45,0,0 -BRDA:541,45,1,0 -BRDA:545,46,0,0 -BRDA:545,46,1,0 -BRDA:562,47,0,0 -BRDA:562,47,1,0 -BRDA:566,48,0,0 -BRDA:566,48,1,0 -BRDA:579,49,0,0 -BRDA:579,49,1,0 -BRDA:583,50,0,0 -BRDA:583,50,1,0 -BRDA:587,51,0,0 -BRDA:587,51,1,0 -BRDA:607,52,0,0 -BRDA:607,52,1,0 -BRDA:613,53,0,0 -BRDA:613,53,1,0 -BRDA:631,54,0,0 -BRDA:631,54,1,0 -BRDA:635,55,0,0 -BRDA:635,55,1,0 -BRDA:639,56,0,0 -BRDA:639,56,1,0 -BRDA:651,57,0,0 -BRDA:651,57,1,0 -BRDA:651,58,0,0 -BRDA:651,58,1,0 -BRDA:657,59,0,0 -BRDA:657,59,1,0 -BRDA:662,60,0,0 -BRDA:662,60,1,0 -BRDA:670,61,0,0 -BRDA:670,61,1,0 -BRDA:675,62,0,0 -BRDA:675,62,1,0 -BRDA:680,63,0,0 -BRDA:680,63,1,0 -BRDA:680,64,0,0 -BRDA:680,64,1,0 -BRDA:680,64,2,0 -BRF:131 -BRH:0 -end_of_record -TN: -SF:src/storage.js -FN:10,(anonymous_0) -FN:11,(anonymous_1) -FN:12,(anonymous_2) -FN:13,(anonymous_3) -FN:28,LocalStorageWrapper -FN:38,(anonymous_5) -FN:48,(anonymous_6) -FN:58,(anonymous_7) -FN:68,(anonymous_8) -FN:80,(anonymous_9) -FN:94,(anonymous_10) -FN:106,(anonymous_11) -FNF:12 -FNH:6 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:6,LocalStorageWrapper -FNDA:2,(anonymous_5) -FNDA:1,(anonymous_6) -FNDA:1,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:1,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:0,(anonymous_11) -DA:2,3 -DA:3,3 -DA:4,3 -DA:5,3 -DA:6,3 -DA:8,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:13,0 -DA:29,6 -DA:38,3 -DA:39,2 -DA:40,2 -DA:48,3 -DA:49,1 -DA:50,1 -DA:58,3 -DA:59,1 -DA:68,3 -DA:69,0 -DA:80,3 -DA:81,1 -DA:82,0 -DA:84,1 -DA:85,1 -DA:94,3 -DA:95,2 -DA:106,3 -DA:107,0 -DA:108,0 -LF:31 -LH:22 -BRDA:11,0,0,0 -BRDA:11,0,1,0 -BRDA:81,1,0,0 -BRDA:81,1,1,1 -BRF:4 -BRH:1 -end_of_record -TN: -SF:src/toolbar.js -FN:10,BlockPyToolbar -FN:30,(anonymous_1) -FN:32,(anonymous_2) -FN:47,(anonymous_3) -FN:51,(anonymous_4) -FN:59,(anonymous_5) -FN:72,(anonymous_6) -FN:81,(anonymous_7) -FN:85,(anonymous_8) -FN:90,(anonymous_9) -FN:97,(anonymous_10) -FN:161,(anonymous_11) -FNF:12 -FNH:0 -FNDA:0,BlockPyToolbar -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -DA:11,0 -DA:12,0 -DA:15,0 -DA:16,0 -DA:17,0 -DA:20,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:34,0 -DA:35,0 -DA:36,0 -DA:40,0 -DA:41,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:51,0 -DA:52,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:64,0 -DA:65,0 -DA:72,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:77,0 -DA:78,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:95,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:161,0 -DA:162,0 -LF:50 -LH:0 -BRDA:55,0,0,0 -BRDA:55,0,1,0 -BRDA:60,1,0,0 -BRDA:60,1,1,0 -BRDA:73,2,0,0 -BRDA:73,2,1,0 -BRF:6 -BRH:0 -end_of_record -TN: -SF:src/trace.js -FN:177,(anonymous_0) -FN:193,(anonymous_1) -FN:232,(anonymous_2) -FNF:3 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -DA:1,4 -DA:73,4 -DA:178,0 -DA:179,0 -DA:181,0 -DA:194,0 -DA:195,0 -DA:197,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:210,0 -DA:211,0 -DA:213,0 -DA:215,0 -DA:216,0 -DA:217,0 -DA:218,0 -DA:223,0 -DA:233,0 -DA:234,0 -DA:239,0 -DA:241,0 -DA:247,0 -DA:249,0 -DA:256,0 -DA:258,0 -DA:259,0 -DA:264,0 -DA:270,0 -DA:275,0 -DA:280,0 -DA:285,0 -DA:290,0 -DA:295,0 -DA:300,0 -DA:301,0 -DA:307,0 -DA:314,0 -DA:319,0 -DA:324,0 -DA:329,0 -DA:334,0 -LF:44 -LH:2 -BRDA:197,0,0,0 -BRDA:197,0,1,0 -BRDA:206,1,0,0 -BRDA:206,1,1,0 -BRDA:206,2,0,0 -BRDA:206,2,1,0 -BRDA:215,3,0,0 -BRDA:215,3,1,0 -BRDA:217,4,0,0 -BRDA:217,4,1,0 -BRDA:233,5,0,0 -BRDA:233,5,1,0 -BRDA:239,6,0,0 -BRDA:247,7,0,0 -BRDA:247,7,1,0 -BRDA:247,7,2,0 -BRDA:247,7,3,0 -BRDA:247,7,4,0 -BRDA:247,7,5,0 -BRDA:247,7,6,0 -BRDA:247,7,7,0 -BRDA:247,7,8,0 -BRDA:247,7,9,0 -BRDA:247,7,10,0 -BRDA:247,7,11,0 -BRDA:247,7,12,0 -BRDA:247,7,13,0 -BRDA:247,7,14,0 -BRDA:252,8,0,0 -BRDA:252,8,1,0 -BRDA:258,9,0,0 -BRDA:258,9,1,0 -BRDA:258,10,0,0 -BRDA:258,10,1,0 -BRDA:281,11,0,0 -BRDA:281,11,1,0 -BRDA:300,12,0,0 -BRDA:300,12,1,0 -BRDA:320,13,0,0 -BRDA:320,13,1,0 -BRDA:331,14,0,0 -BRDA:331,14,1,0 -BRDA:335,15,0,0 -BRDA:335,15,1,0 -BRDA:336,16,0,0 -BRDA:336,16,1,0 -BRF:46 -BRH:0 -end_of_record -TN: -SF:src/utilities.js -FN:11,arrayMove -FN:19,(anonymous_1) -FN:32,arrayContains -FN:44,arrayUnique -FN:68,expandArray -FN:69,(anonymous_5) -FN:80,cloneNode -FN:100,indent -FN:109,slug -FN:118,capitalize -FN:132,randomInteger -FN:143,encodeHTML -FN:155,(anonymous_12) -FN:182,moveElements -FN:194,firstDefinedValue -FN:213,isSkBuiltin -FN:226,isAstNode -FN:240,extractPart -FN:271,mixedRemapToPy -FN:322,getCurrentTime -FNF:20 -FNH:2 -FNDA:5,arrayMove -FNDA:11,(anonymous_1) -FNDA:0,arrayContains -FNDA:0,arrayUnique -FNDA:0,expandArray -FNDA:0,(anonymous_5) -FNDA:0,cloneNode -FNDA:0,indent -FNDA:0,slug -FNDA:0,capitalize -FNDA:0,randomInteger -FNDA:0,encodeHTML -FNDA:0,(anonymous_12) -FNDA:0,moveElements -FNDA:0,firstDefinedValue -FNDA:0,isSkBuiltin -FNDA:0,isAstNode -FNDA:0,extractPart -FNDA:0,mixedRemapToPy -FNDA:0,getCurrentTime -DA:12,5 -DA:13,5 -DA:15,5 -DA:16,2 -DA:19,3 -DA:20,11 -DA:21,8 -DA:22,5 -DA:33,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:52,0 -DA:69,0 -DA:70,0 -DA:72,0 -DA:82,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:91,0 -DA:101,0 -DA:110,0 -DA:119,0 -DA:120,0 -DA:122,0 -DA:133,0 -DA:144,0 -DA:154,6 -DA:155,0 -DA:156,0 -DA:157,0 -DA:158,0 -DA:159,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:169,0 -DA:171,0 -DA:173,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:188,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:200,0 -DA:214,0 -DA:227,0 -DA:230,6 -DA:241,0 -DA:242,0 -DA:244,0 -DA:245,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:253,0 -DA:255,0 -DA:256,0 -DA:258,0 -DA:261,0 -DA:277,0 -DA:279,0 -DA:280,0 -DA:282,0 -DA:283,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:289,0 -DA:292,0 -DA:293,0 -DA:294,0 -DA:295,0 -DA:296,0 -DA:298,0 -DA:299,0 -DA:301,0 -DA:303,0 -DA:306,0 -DA:308,0 -DA:310,0 -DA:311,0 -DA:312,0 -DA:313,0 -DA:314,0 -DA:315,0 -DA:316,0 -DA:317,0 -DA:323,0 -DA:324,0 -DA:325,0 -DA:327,0 -DA:329,0 -DA:330,0 -DA:331,0 -DA:333,0 -DA:336,6 -DA:337,6 -DA:338,6 -DA:339,6 -DA:340,6 -DA:342,6 -DA:343,6 -DA:344,6 -DA:345,6 -DA:346,6 -DA:347,6 -LF:118 -LH:21 -BRDA:15,0,0,2 -BRDA:15,0,1,3 -BRDA:15,1,0,5 -BRDA:15,1,1,4 -BRDA:15,1,2,4 -BRDA:20,2,0,3 -BRDA:20,2,1,8 -BRDA:21,3,0,3 -BRDA:21,3,1,5 -BRDA:21,4,0,2 -BRDA:21,4,1,1 -BRDA:48,5,0,0 -BRDA:48,5,1,0 -BRDA:82,6,0,0 -BRDA:82,6,1,0 -BRDA:119,7,0,0 -BRDA:119,7,1,0 -BRDA:154,8,0,0 -BRDA:154,8,1,6 -BRDA:166,9,0,0 -BRDA:166,9,1,0 -BRDA:185,10,0,0 -BRDA:185,10,1,0 -BRDA:196,11,0,0 -BRDA:196,11,1,0 -BRDA:214,12,0,0 -BRDA:214,12,1,0 -BRDA:214,12,2,0 -BRDA:214,12,3,0 -BRDA:214,12,4,0 -BRDA:214,12,5,0 -BRDA:214,12,6,0 -BRDA:214,12,7,0 -BRDA:227,13,0,0 -BRDA:227,13,1,0 -BRDA:241,14,0,0 -BRDA:241,14,1,0 -BRDA:241,15,0,0 -BRDA:241,15,1,0 -BRDA:250,16,0,0 -BRDA:250,16,1,0 -BRDA:252,17,0,0 -BRDA:252,17,1,0 -BRDA:252,18,0,0 -BRDA:252,18,1,0 -BRDA:255,19,0,0 -BRDA:255,19,1,0 -BRDA:255,20,0,0 -BRDA:255,20,1,0 -BRDA:255,20,2,0 -BRDA:277,21,0,0 -BRDA:277,21,1,0 -BRDA:280,22,0,0 -BRDA:280,22,1,0 -BRDA:286,23,0,0 -BRDA:286,23,1,0 -BRDA:293,24,0,0 -BRDA:293,24,1,0 -BRDA:295,25,0,0 -BRDA:295,25,1,0 -BRDA:296,26,0,0 -BRDA:296,26,1,0 -BRDA:310,27,0,0 -BRDA:310,27,1,0 -BRDA:312,28,0,0 -BRDA:312,28,1,0 -BRDA:314,29,0,0 -BRDA:314,29,1,0 -BRDA:316,30,0,0 -BRDA:316,30,1,0 -BRDA:327,31,0,0 -BRDA:327,31,1,0 -BRDA:330,32,0,0 -BRDA:330,32,1,0 -BRF:74 -BRH:12 -end_of_record -TN: -SF:src/editor/abstract_editor.js -FN:3,uploadFile -FN:6,(anonymous_1) -FN:14,sluggify -FN:18,downloadFile -FN:38,(anonymous_4) -FN:47,(anonymous_5) -FN:53,(anonymous_6) -FN:59,(anonymous_7) -FN:68,(anonymous_8) -FN:75,(anonymous_9) -FN:87,(anonymous_10) -FN:93,(anonymous_11) -FN:99,(anonymous_12) -FNF:13 -FNH:0 -FNDA:0,uploadFile -FNDA:0,(anonymous_1) -FNDA:0,sluggify -FNDA:0,downloadFile -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -DA:4,0 -DA:5,0 -DA:6,0 -DA:7,0 -DA:9,0 -DA:10,0 -DA:11,0 -DA:15,0 -DA:19,0 -DA:21,0 -DA:22,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:39,0 -DA:40,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:55,0 -DA:56,0 -DA:60,0 -DA:62,0 -DA:69,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:100,0 -DA:101,0 -LF:44 -LH:0 -BRDA:25,0,0,0 -BRDA:25,0,1,0 -BRDA:60,1,0,0 -BRDA:60,1,1,0 -BRF:4 -BRH:0 -end_of_record -TN: -SF:src/editor/assignment_settings.js -FN:52,getDocumentation -FN:61,makeStartViewTab -FN:72,(anonymous_2) -FN:73,(anonymous_3) -FN:74,(anonymous_4) -FN:308,saveAssignmentSettings -FN:310,(anonymous_6) -FN:321,loadAssignmentSettings -FN:324,(anonymous_8) -FN:339,makeAssignmentSettingsModel -FN:341,(anonymous_10) -FN:359,(anonymous_11) -FN:364,(anonymous_12) -FN:376,(anonymous_13) -FN:386,(anonymous_14) -FN:396,(anonymous_15) -FNF:16 -FNH:5 -FNDA:28,getDocumentation -FNDA:12,makeStartViewTab -FNDA:140,(anonymous_2) -FNDA:112,(anonymous_3) -FNDA:268,(anonymous_4) -FNDA:0,saveAssignmentSettings -FNDA:0,(anonymous_6) -FNDA:0,loadAssignmentSettings -FNDA:0,(anonymous_8) -FNDA:0,makeAssignmentSettingsModel -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -DA:4,4 -DA:45,4 -DA:53,28 -DA:54,228 -DA:55,28 -DA:58,0 -DA:62,12 -DA:70,4 -DA:72,140 -DA:74,268 -DA:75,112 -DA:95,4 -DA:309,0 -DA:310,0 -DA:311,0 -DA:312,0 -DA:314,0 -DA:315,0 -DA:318,0 -DA:322,0 -DA:323,0 -DA:324,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:329,0 -DA:333,0 -DA:334,0 -DA:340,0 -DA:341,0 -DA:342,0 -DA:343,0 -DA:344,0 -DA:345,0 -DA:347,0 -DA:348,0 -DA:349,0 -DA:351,0 -DA:355,0 -DA:360,0 -DA:361,0 -DA:365,0 -DA:366,0 -DA:371,0 -DA:377,0 -DA:378,0 -DA:379,0 -DA:382,0 -DA:387,0 -DA:388,0 -DA:389,0 -DA:392,0 -DA:401,0 -DA:405,4 -LF:54 -LH:12 -BRDA:54,0,0,28 -BRDA:54,0,1,200 -BRDA:314,1,0,0 -BRDA:314,1,1,0 -BRDA:322,2,0,0 -BRDA:322,2,1,0 -BRDA:326,3,0,0 -BRDA:326,3,1,0 -BRDA:333,4,0,0 -BRDA:333,4,1,0 -BRDA:344,5,0,0 -BRDA:344,5,1,0 -BRDA:348,6,0,0 -BRDA:348,6,1,0 -BRDA:378,7,0,0 -BRDA:378,7,1,0 -BRDA:388,8,0,0 -BRDA:388,8,1,0 -BRF:18 -BRH:2 -end_of_record -TN: -SF:src/editor/default_header.js -FNF:0 -FNH:0 -DA:3,4 -LF:1 -LH:1 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/editor/images.js -FN:114,(anonymous_0) -FN:121,(anonymous_1) -FN:126,(anonymous_2) -FN:174,(anonymous_3) -FN:175,(anonymous_4) -FN:195,(anonymous_5) -FN:199,(anonymous_6) -FN:208,(anonymous_7) -FN:223,(anonymous_8) -FN:229,(anonymous_9) -FN:239,(anonymous_10) -FN:247,(anonymous_11) -FN:257,(anonymous_12) -FN:267,(anonymous_13) -FN:278,(anonymous_14) -FNF:15 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -DA:4,4 -DA:115,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:121,0 -DA:122,0 -DA:127,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:134,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:178,0 -DA:190,0 -DA:209,0 -DA:211,0 -DA:213,0 -DA:215,0 -DA:217,0 -DA:219,0 -DA:224,0 -DA:230,0 -DA:231,0 -DA:233,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:248,0 -DA:249,0 -DA:251,0 -DA:258,0 -DA:259,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:268,0 -DA:269,0 -DA:271,0 -DA:280,0 -DA:281,0 -DA:288,4 -LF:44 -LH:2 -BRDA:130,0,0,0 -BRDA:130,0,1,0 -BRDA:176,1,0,0 -BRDA:176,1,1,0 -BRDA:209,2,0,0 -BRDA:209,2,1,0 -BRDA:209,2,2,0 -BRDA:209,2,3,0 -BRDA:209,2,4,0 -BRDA:230,3,0,0 -BRDA:230,3,1,0 -BRDA:248,4,0,0 -BRDA:248,4,1,0 -BRDA:261,5,0,0 -BRDA:261,5,1,0 -BRDA:268,6,0,0 -BRDA:268,6,1,0 -BRF:17 -BRH:0 -end_of_record -TN: -SF:src/editor/json.js -FN:12,(anonymous_0) -FN:25,(anonymous_1) -FN:32,(anonymous_2) -FN:40,(anonymous_3) -FN:58,(anonymous_4) -FN:68,(anonymous_5) -FN:77,(anonymous_6) -FNF:7 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -DA:4,4 -DA:13,0 -DA:14,0 -DA:26,0 -DA:27,0 -DA:29,0 -DA:33,0 -DA:37,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:45,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:51,0 -DA:54,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:86,4 -LF:33 -LH:2 -BRDA:26,0,0,0 -BRDA:26,0,1,0 -BRDA:49,1,0,0 -BRDA:49,1,1,0 -BRDA:54,2,0,0 -BRDA:54,2,1,0 -BRDA:60,3,0,0 -BRDA:60,3,1,0 -BRDA:70,4,0,0 -BRDA:70,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/editor/markdown.js -FN:11,(anonymous_0) -FN:29,(anonymous_1) -FN:44,(anonymous_2) -FN:54,(anonymous_3) -FN:63,(anonymous_4) -FNF:5 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -DA:4,4 -DA:12,0 -DA:13,0 -DA:26,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:34,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:40,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:71,4 -LF:27 -LH:2 -BRDA:38,0,0,0 -BRDA:38,0,1,0 -BRDA:46,1,0,0 -BRDA:46,1,1,0 -BRDA:56,2,0,0 -BRDA:56,2,1,0 -BRF:6 -BRH:0 -end_of_record -TN: -SF:src/editor/python.js -FN:21,makeTab -FN:161,convertIpynbToPython -FN:163,(anonymous_2) -FN:172,(anonymous_3) -FN:184,(anonymous_4) -FN:194,(anonymous_5) -FN:197,(anonymous_6) -FN:199,(anonymous_7) -FN:201,(anonymous_8) -FN:209,(anonymous_9) -FN:228,(anonymous_10) -FN:229,(anonymous_11) -FN:233,(anonymous_12) -FN:238,(anonymous_13) -FN:262,(anonymous_14) -FN:266,(anonymous_15) -FN:269,(anonymous_16) -FN:273,(anonymous_17) -FN:284,(anonymous_18) -FN:287,(anonymous_19) -FN:309,(anonymous_20) -FN:322,(anonymous_21) -FN:334,(anonymous_22) -FN:350,(anonymous_23) -FN:352,(anonymous_24) -FN:355,(anonymous_25) -FN:363,(anonymous_26) -FN:372,(anonymous_27) -FN:383,(anonymous_28) -FN:390,(anonymous_29) -FN:415,(anonymous_30) -FN:416,(anonymous_31) -FN:419,(anonymous_32) -FN:422,(anonymous_33) -FN:427,(anonymous_34) -FN:434,(anonymous_35) -FN:439,(anonymous_36) -FN:451,(anonymous_37) -FNF:38 -FNH:1 -FNDA:12,makeTab -FNDA:0,convertIpynbToPython -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -FNDA:0,(anonymous_26) -FNDA:0,(anonymous_27) -FNDA:0,(anonymous_28) -FNDA:0,(anonymous_29) -FNDA:0,(anonymous_30) -FNDA:0,(anonymous_31) -FNDA:0,(anonymous_32) -FNDA:0,(anonymous_33) -FNDA:0,(anonymous_34) -FNDA:0,(anonymous_35) -FNDA:0,(anonymous_36) -FNDA:0,(anonymous_37) -DA:15,4 -DA:22,12 -DA:30,4 -DA:162,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:177,0 -DA:180,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:195,0 -DA:199,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:211,0 -DA:217,0 -DA:218,0 -DA:219,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:223,0 -DA:225,0 -DA:229,0 -DA:230,0 -DA:233,0 -DA:239,0 -DA:240,0 -DA:241,0 -DA:243,0 -DA:244,0 -DA:245,0 -DA:247,0 -DA:249,0 -DA:252,0 -DA:255,0 -DA:258,0 -DA:259,0 -DA:261,0 -DA:262,0 -DA:264,0 -DA:266,0 -DA:267,0 -DA:269,0 -DA:270,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:284,0 -DA:288,0 -DA:289,0 -DA:290,0 -DA:293,0 -DA:295,0 -DA:297,0 -DA:298,0 -DA:300,0 -DA:301,0 -DA:302,0 -DA:303,0 -DA:305,0 -DA:310,0 -DA:312,0 -DA:313,0 -DA:314,0 -DA:315,0 -DA:316,0 -DA:318,0 -DA:324,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:328,0 -DA:330,0 -DA:331,0 -DA:335,0 -DA:336,0 -DA:337,0 -DA:338,0 -DA:340,0 -DA:341,0 -DA:342,0 -DA:344,0 -DA:345,0 -DA:346,0 -DA:351,0 -DA:352,0 -DA:353,0 -DA:355,0 -DA:356,0 -DA:357,0 -DA:359,0 -DA:362,0 -DA:363,0 -DA:364,0 -DA:368,0 -DA:369,0 -DA:370,0 -DA:372,0 -DA:373,0 -DA:374,0 -DA:375,0 -DA:376,0 -DA:377,0 -DA:378,0 -DA:384,0 -DA:385,0 -DA:386,0 -DA:387,0 -DA:391,0 -DA:392,0 -DA:393,0 -DA:394,0 -DA:396,0 -DA:397,0 -DA:399,0 -DA:400,0 -DA:404,0 -DA:406,0 -DA:407,0 -DA:409,0 -DA:410,0 -DA:411,0 -DA:416,0 -DA:417,0 -DA:419,0 -DA:420,0 -DA:422,0 -DA:428,0 -DA:429,0 -DA:435,0 -DA:436,0 -DA:440,0 -DA:441,0 -DA:442,0 -DA:443,0 -DA:445,0 -DA:446,0 -DA:447,0 -DA:452,0 -DA:453,0 -DA:454,0 -DA:456,0 -DA:457,0 -DA:458,0 -DA:463,4 -LF:154 -LH:4 -BRDA:164,0,0,0 -BRDA:164,0,1,0 -BRDA:165,1,0,0 -BRDA:165,1,1,0 -BRDA:168,2,0,0 -BRDA:168,2,1,0 -BRDA:173,3,0,0 -BRDA:173,3,1,0 -BRDA:175,4,0,0 -BRDA:175,4,1,0 -BRDA:175,5,0,0 -BRDA:175,5,1,0 -BRDA:243,6,0,0 -BRDA:243,6,1,0 -BRDA:244,7,0,0 -BRDA:244,7,1,0 -BRDA:261,8,0,0 -BRDA:261,8,1,0 -BRDA:288,9,0,0 -BRDA:288,9,1,0 -BRDA:289,10,0,0 -BRDA:289,10,1,0 -BRDA:295,11,0,0 -BRDA:295,11,1,0 -BRDA:301,12,0,0 -BRDA:301,12,1,0 -BRDA:313,13,0,0 -BRDA:313,13,1,0 -BRDA:315,14,0,0 -BRDA:315,14,1,0 -BRDA:327,15,0,0 -BRDA:327,15,1,0 -BRDA:336,16,0,0 -BRDA:336,16,1,0 -BRDA:340,17,0,0 -BRDA:340,17,1,0 -BRDA:344,18,0,0 -BRDA:344,18,1,0 -BRDA:356,19,0,0 -BRDA:356,19,1,0 -BRDA:369,20,0,0 -BRDA:369,20,1,0 -BRDA:373,21,0,0 -BRDA:373,21,1,0 -BRDA:375,22,0,0 -BRDA:375,22,1,0 -BRDA:391,23,0,0 -BRDA:391,23,1,0 -BRDA:393,24,0,0 -BRDA:393,24,1,0 -BRDA:429,25,0,0 -BRDA:429,25,1,0 -BRDA:429,25,2,0 -BRDA:442,26,0,0 -BRDA:442,26,1,0 -BRDA:453,27,0,0 -BRDA:453,27,1,0 -BRDA:453,28,0,0 -BRDA:453,28,1,0 -BRF:59 -BRH:0 -end_of_record -TN: -SF:src/editor/quiz.js -FN:10,(anonymous_0) -FN:22,(anonymous_1) -FN:29,(anonymous_2) -FN:37,(anonymous_3) -FN:54,(anonymous_4) -FN:64,(anonymous_5) -FN:73,(anonymous_6) -FNF:7 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -DA:3,4 -DA:11,0 -DA:12,0 -DA:23,0 -DA:24,0 -DA:26,0 -DA:30,0 -DA:34,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:42,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:48,0 -DA:51,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:82,4 -LF:33 -LH:2 -BRDA:23,0,0,0 -BRDA:23,0,1,0 -BRDA:46,1,0,0 -BRDA:46,1,1,0 -BRDA:51,2,0,0 -BRDA:51,2,1,0 -BRDA:56,3,0,0 -BRDA:56,3,1,0 -BRDA:66,4,0,0 -BRDA:66,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/editor/sample_submissions.js -FN:17,(anonymous_0) -FN:23,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FN:58,(anonymous_4) -FN:72,(anonymous_5) -FN:79,(anonymous_6) -FN:87,(anonymous_7) -FN:96,(anonymous_8) -FN:103,(anonymous_9) -FN:107,(anonymous_10) -FN:111,(anonymous_11) -FN:124,(anonymous_12) -FN:125,(anonymous_13) -FN:128,(anonymous_14) -FN:128,(anonymous_15) -FN:134,(anonymous_16) -FN:145,(anonymous_17) -FN:149,(anonymous_18) -FN:154,(anonymous_19) -FNF:20 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -DA:8,4 -DA:18,0 -DA:19,0 -DA:20,0 -DA:24,0 -DA:29,0 -DA:33,0 -DA:41,4 -DA:57,4 -DA:61,0 -DA:62,0 -DA:73,0 -DA:74,0 -DA:76,0 -DA:80,0 -DA:84,0 -DA:85,0 -DA:91,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:100,0 -DA:108,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:116,0 -DA:118,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:128,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:141,0 -DA:146,0 -DA:147,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:156,0 -DA:157,0 -DA:160,0 -DA:164,4 -LF:49 -LH:4 -BRDA:24,0,0,0 -BRDA:24,0,1,0 -BRDA:73,1,0,0 -BRDA:73,1,1,0 -BRDA:121,2,0,0 -BRDA:121,2,1,0 -BRDA:136,3,0,0 -BRDA:136,3,1,0 -BRDA:147,4,0,0 -BRDA:147,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/editor/tags.js -FN:22,(anonymous_0) -FNF:1 -FNH:0 -FNDA:0,(anonymous_0) -DA:3,4 -DA:23,0 -DA:27,4 -LF:3 -LH:2 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/editor/text.js -FN:12,(anonymous_0) -FN:24,(anonymous_1) -FN:31,(anonymous_2) -FN:39,(anonymous_3) -FN:56,(anonymous_4) -FN:66,(anonymous_5) -FN:75,(anonymous_6) -FNF:7 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -DA:4,4 -DA:13,0 -DA:14,0 -DA:25,0 -DA:26,0 -DA:28,0 -DA:32,0 -DA:36,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:44,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:50,0 -DA:53,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:84,4 -LF:33 -LH:2 -BRDA:25,0,0,0 -BRDA:25,0,1,0 -BRDA:48,1,0,0 -BRDA:48,1,1,0 -BRDA:53,2,0,0 -BRDA:53,2,1,0 -BRDA:58,3,0,0 -BRDA:58,3,1,0 -BRDA:68,4,0,0 -BRDA:68,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/editor/toolbox.js -FN:18,(anonymous_0) -FN:31,(anonymous_1) -FN:38,(anonymous_2) -FN:46,(anonymous_3) -FN:65,(anonymous_4) -FN:75,(anonymous_5) -FN:87,(anonymous_6) -FNF:7 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -DA:3,4 -DA:19,0 -DA:20,0 -DA:32,0 -DA:33,0 -DA:35,0 -DA:39,0 -DA:43,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:51,0 -DA:53,0 -DA:54,0 -DA:56,0 -DA:58,0 -DA:61,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:83,0 -DA:89,0 -DA:90,0 -DA:92,0 -DA:93,0 -DA:97,4 -LF:35 -LH:2 -BRDA:32,0,0,0 -BRDA:32,0,1,0 -BRDA:56,1,0,0 -BRDA:56,1,1,0 -BRDA:61,2,0,0 -BRDA:61,2,1,0 -BRDA:67,3,0,0 -BRDA:67,3,1,0 -BRDA:77,4,0,0 -BRDA:77,4,1,0 -BRDA:80,5,0,0 -BRDA:80,5,1,0 -BRF:12 -BRH:0 -end_of_record -TN: -SF:src/engine/configurations.js -FN:9,(anonymous_0) -FN:16,(anonymous_1) -FN:28,(anonymous_2) -FN:30,(anonymous_3) -FN:39,(anonymous_4) -FN:49,(anonymous_5) -FN:57,(anonymous_6) -FN:74,(anonymous_7) -FN:80,(anonymous_8) -FN:96,(anonymous_9) -FN:101,(anonymous_10) -FN:123,(anonymous_11) -FN:128,(anonymous_12) -FN:133,(anonymous_13) -FN:137,(anonymous_14) -FN:142,(anonymous_15) -FN:149,(anonymous_16) -FN:157,(anonymous_17) -FN:162,(anonymous_18) -FN:166,(anonymous_19) -FN:170,(anonymous_20) -FN:174,(anonymous_21) -FN:178,(anonymous_22) -FN:182,(anonymous_23) -FN:190,(anonymous_24) -FN:194,(anonymous_25) -FNF:26 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -DA:1,1 -DA:10,0 -DA:11,0 -DA:12,0 -DA:13,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:24,0 -DA:26,0 -DA:28,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:34,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:42,0 -DA:45,0 -DA:46,0 -DA:50,0 -DA:51,0 -DA:53,0 -DA:58,0 -DA:74,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:85,0 -DA:97,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:119,0 -DA:124,0 -DA:129,0 -DA:134,0 -DA:138,0 -DA:143,0 -DA:144,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:153,0 -DA:159,0 -DA:171,0 -DA:175,0 -DA:179,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:201,0 -DA:202,0 -DA:204,0 -DA:206,0 -DA:207,0 -DA:209,0 -DA:210,0 -DA:212,0 -DA:213,0 -DA:216,0 -LF:77 -LH:1 -BRDA:31,0,0,0 -BRDA:31,0,1,0 -BRDA:36,1,0,0 -BRDA:36,1,1,0 -BRDA:36,2,0,0 -BRDA:36,2,1,0 -BRDA:40,3,0,0 -BRDA:40,3,1,0 -BRDA:50,4,0,0 -BRDA:50,4,1,0 -BRDA:82,5,0,0 -BRDA:82,5,1,0 -BRDA:104,6,0,0 -BRDA:104,6,1,0 -BRDA:109,7,0,0 -BRDA:109,7,1,0 -BRDA:111,8,0,0 -BRDA:111,8,1,0 -BRDA:143,9,0,0 -BRDA:143,9,1,0 -BRDA:150,10,0,0 -BRDA:150,10,1,0 -BRDA:184,11,0,0 -BRDA:184,11,1,0 -BRDA:198,12,0,0 -BRDA:198,12,1,0 -BRDA:201,13,0,0 -BRDA:201,13,1,0 -BRDA:209,14,0,0 -BRDA:209,14,1,0 -BRDA:209,15,0,0 -BRDA:209,15,1,0 -BRDA:212,16,0,0 -BRDA:212,16,1,0 -BRDA:212,17,0,0 -BRDA:212,17,1,0 -BRF:36 -BRH:0 -end_of_record -TN: -SF:src/engine/eval.js -FN:6,(anonymous_0) -FN:25,(anonymous_1) -FN:35,(anonymous_2) -FN:41,(anonymous_3) -FN:42,(anonymous_4) -FN:42,(anonymous_5) -FN:53,(anonymous_6) -FN:58,(anonymous_7) -FNF:8 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -DA:8,0 -DA:9,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:14,0 -DA:16,0 -DA:17,0 -DA:19,0 -DA:20,0 -DA:22,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:42,0 -DA:49,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:65,0 -LF:33 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/engine/instructor.js -FN:11,(anonymous_0) -FN:14,(anonymous_1) -FN:44,(anonymous_2) -FN:49,(anonymous_3) -FN:64,(anonymous_4) -FN:69,(anonymous_5) -FN:75,(anonymous_6) -FN:81,(anonymous_7) -FN:82,clean -FN:92,(anonymous_9) -FN:93,(anonymous_10) -FN:97,(anonymous_11) -FN:105,(anonymous_12) -FN:114,(anonymous_13) -FN:123,(anonymous_14) -FN:146,(anonymous_15) -FN:162,(anonymous_16) -FNF:17 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,clean -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -DA:7,1 -DA:8,1 -DA:12,0 -DA:14,0 -DA:15,0 -DA:16,0 -DA:18,0 -DA:20,0 -DA:22,0 -DA:26,0 -DA:27,0 -DA:29,0 -DA:30,0 -DA:33,0 -DA:34,0 -DA:36,0 -DA:38,0 -DA:40,0 -DA:41,0 -DA:45,0 -DA:46,0 -DA:50,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:58,0 -DA:61,0 -DA:65,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:75,0 -DA:76,0 -DA:78,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:87,0 -DA:89,0 -DA:92,0 -DA:93,0 -DA:98,0 -DA:99,0 -DA:101,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:110,0 -DA:116,0 -DA:117,0 -DA:119,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:141,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:155,0 -DA:163,0 -DA:165,0 -DA:166,0 -LF:77 -LH:2 -BRDA:15,0,0,0 -BRDA:15,0,1,0 -BRDA:52,1,0,0 -BRDA:52,1,1,0 -BRDA:70,2,0,0 -BRDA:70,2,1,0 -BRDA:84,3,0,0 -BRDA:84,3,1,0 -BRDA:98,4,0,0 -BRDA:98,4,1,0 -BRDA:107,5,0,0 -BRDA:107,5,1,0 -BRDA:116,6,0,0 -BRDA:116,6,1,0 -BRDA:124,7,0,0 -BRDA:124,7,1,0 -BRDA:126,8,0,0 -BRDA:126,8,1,0 -BRDA:128,9,0,0 -BRDA:128,9,1,0 -BRDA:129,10,0,0 -BRDA:129,10,1,0 -BRDA:130,11,0,0 -BRDA:130,11,1,0 -BRDA:132,12,0,0 -BRDA:132,12,1,0 -BRDA:134,13,0,0 -BRDA:134,13,1,0 -BRDA:138,14,0,0 -BRDA:138,14,1,0 -BRDA:149,15,0,0 -BRDA:149,15,1,0 -BRDA:165,16,0,0 -BRDA:165,16,1,0 -BRDA:165,17,0,0 -BRDA:165,17,1,0 -BRF:36 -BRH:0 -end_of_record -TN: -SF:src/engine/on_change.js -FN:4,(anonymous_0) -FNF:1 -FNH:0 -FNDA:0,(anonymous_0) -DA:5,0 -DA:6,0 -DA:7,0 -DA:9,0 -DA:11,0 -LF:5 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/engine/on_eval.js -FN:9,(anonymous_0) -FN:79,(anonymous_1) -FN:113,(anonymous_2) -FN:149,(anonymous_3) -FNF:4 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -DA:9,1 -DA:10,0 -DA:12,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:84,0 -DA:86,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:103,0 -DA:105,0 -DA:108,0 -DA:110,0 -DA:114,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:131,0 -DA:133,0 -DA:134,0 -DA:141,0 -DA:142,0 -DA:143,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:156,0 -DA:158,0 -LF:48 -LH:1 -BRDA:82,0,0,0 -BRDA:82,0,1,0 -BRDA:89,1,0,0 -BRDA:89,1,1,0 -BRDA:92,2,0,0 -BRDA:92,2,1,0 -BRDA:124,3,0,0 -BRDA:124,3,1,0 -BRDA:141,4,0,0 -BRDA:141,4,1,0 -BRDA:152,5,0,0 -BRDA:152,5,1,0 -BRF:12 -BRH:0 -end_of_record -TN: -SF:src/engine/on_run.js -FN:5,findActualInstructorOffset -FN:17,(anonymous_1) -FN:101,(anonymous_2) -FN:141,(anonymous_3) -FN:178,(anonymous_4) -FNF:5 -FNH:0 -FNDA:0,findActualInstructorOffset -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -DA:6,0 -DA:7,0 -DA:8,0 -DA:9,0 -DA:12,1 -DA:13,1 -DA:17,1 -DA:18,0 -DA:19,0 -DA:23,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:106,0 -DA:108,0 -DA:110,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:119,0 -DA:134,0 -DA:136,0 -DA:138,0 -DA:145,0 -DA:146,0 -DA:147,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:157,0 -DA:158,0 -DA:160,0 -DA:162,0 -DA:163,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:179,0 -DA:180,0 -DA:181,0 -DA:182,0 -DA:183,0 -DA:185,0 -DA:187,0 -LF:52 -LH:3 -BRDA:9,0,0,0 -BRDA:9,0,1,0 -BRDA:19,1,0,0 -BRDA:19,1,1,0 -BRDA:115,2,0,0 -BRDA:115,2,1,0 -BRDA:152,3,0,0 -BRDA:152,3,1,0 -BRDA:170,4,0,0 -BRDA:170,4,1,0 -BRDA:181,5,0,0 -BRDA:181,5,1,0 -BRF:12 -BRH:0 -end_of_record -TN: -SF:src/engine/on_sample.js -FN:4,(anonymous_0) -FNF:1 -FNH:0 -FNDA:0,(anonymous_0) -DA:5,0 -DA:6,0 -DA:7,0 -DA:9,0 -LF:4 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/engine/run.js -FN:5,(anonymous_0) -FN:42,(anonymous_1) -FN:46,(anonymous_2) -FN:60,(anonymous_3) -FN:66,(anonymous_4) -FN:67,(anonymous_5) -FN:67,(anonymous_6) -FN:78,(anonymous_7) -FN:88,(anonymous_8) -FN:93,(anonymous_9) -FN:94,(anonymous_10) -FN:94,(anonymous_11) -FNF:12 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -DA:6,0 -DA:7,0 -DA:8,0 -DA:9,0 -DA:10,0 -DA:13,0 -DA:14,0 -DA:16,0 -DA:18,0 -DA:19,0 -DA:21,0 -DA:26,0 -DA:27,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:35,0 -DA:37,0 -DA:39,0 -DA:43,0 -DA:44,0 -DA:46,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:66,0 -DA:67,0 -DA:74,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:85,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:93,0 -DA:94,0 -DA:99,0 -LF:54 -LH:0 -BRDA:9,0,0,0 -BRDA:9,0,1,0 -BRDA:26,1,0,0 -BRDA:26,1,1,0 -BRDA:57,2,0,0 -BRDA:57,2,1,0 -BRDA:82,3,0,0 -BRDA:82,3,1,0 -BRDA:82,4,0,0 -BRDA:82,4,1,0 -BRF:10 -BRH:0 -end_of_record -TN: -SF:src/engine/sample.js -FN:4,(anonymous_0) -FNF:1 -FNH:0 -FNDA:0,(anonymous_0) -DA:5,0 -DA:7,0 -DA:8,0 -DA:10,0 -LF:4 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/engine/student.js -FN:4,(anonymous_0) -FN:8,(anonymous_1) -FN:25,(anonymous_2) -FN:39,(anonymous_3) -FN:58,(anonymous_4) -FN:62,(anonymous_5) -FN:80,(anonymous_6) -FN:112,(anonymous_7) -FN:122,(anonymous_8) -FN:124,(anonymous_9) -FN:129,(anonymous_10) -FN:132,(anonymous_11) -FN:135,(anonymous_12) -FN:145,(anonymous_13) -FN:177,(anonymous_14) -FN:186,(anonymous_15) -FN:194,(anonymous_16) -FNF:17 -FNH:0 -FNDA:0,(anonymous_0) -FNDA:0,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -DA:5,0 -DA:7,0 -DA:8,0 -DA:9,0 -DA:10,0 -DA:12,0 -DA:15,0 -DA:20,0 -DA:22,0 -DA:26,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:32,0 -DA:35,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:53,0 -DA:59,0 -DA:63,0 -DA:81,0 -DA:85,0 -DA:86,0 -DA:90,0 -DA:101,0 -DA:102,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:128,0 -DA:129,0 -DA:131,0 -DA:132,0 -DA:134,0 -DA:135,0 -DA:138,0 -DA:139,0 -DA:146,0 -DA:148,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:157,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:174,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:182,0 -DA:187,0 -DA:188,0 -DA:189,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:194,0 -DA:195,0 -LF:79 -LH:0 -BRDA:9,0,0,0 -BRDA:9,0,1,0 -BRDA:28,1,0,0 -BRDA:28,1,1,0 -BRDA:29,2,0,0 -BRDA:29,2,1,0 -BRDA:29,3,0,0 -BRDA:29,3,1,0 -BRDA:40,4,0,0 -BRDA:40,4,1,0 -BRDA:42,5,0,0 -BRDA:42,5,1,0 -BRDA:44,6,0,0 -BRDA:44,6,1,0 -BRDA:46,7,0,0 -BRDA:46,7,1,0 -BRDA:50,8,0,0 -BRDA:50,8,1,0 -BRDA:63,9,0,0 -BRDA:63,9,1,0 -BRDA:63,9,2,0 -BRDA:81,10,0,0 -BRDA:81,10,1,0 -BRDA:125,11,0,0 -BRDA:125,11,1,0 -BRDA:128,12,0,0 -BRDA:128,12,1,0 -BRDA:131,13,0,0 -BRDA:131,13,1,0 -BRDA:134,14,0,0 -BRDA:134,14,1,0 -BRDA:179,15,0,0 -BRDA:179,15,1,0 -BRDA:189,16,0,0 -BRDA:189,16,1,0 -BRF:35 -BRH:0 -end_of_record