gecko-dev/devtools/shared/sourcemap/tests/unit/test_source_node.js
J. Ryan Stinnett 600fce60d6 Bug 912121 - Migrate major DevTools directories. rs=devtools
Move major DevTools files to new directories using the following steps:

hg mv browser/devtools devtools/client
hg mv toolkit/devtools/server devtools/server
hg mv toolkit/devtools devtools/shared

No other changes are made.

--HG--
rename : browser/devtools/.eslintignore => devtools/client/.eslintignore
rename : browser/devtools/.eslintrc => devtools/client/.eslintrc
rename : browser/devtools/.eslintrc.mochitests => devtools/client/.eslintrc.mochitests
rename : browser/devtools/.eslintrc.xpcshell => devtools/client/.eslintrc.xpcshell
rename : browser/devtools/animationinspector/animation-controller.js => devtools/client/animationinspector/animation-controller.js
rename : browser/devtools/animationinspector/animation-inspector.xhtml => devtools/client/animationinspector/animation-inspector.xhtml
rename : browser/devtools/animationinspector/animation-panel.js => devtools/client/animationinspector/animation-panel.js
rename : browser/devtools/animationinspector/components.js => devtools/client/animationinspector/components.js
rename : browser/devtools/animationinspector/moz.build => devtools/client/animationinspector/moz.build
rename : browser/devtools/animationinspector/test/.eslintrc => devtools/client/animationinspector/test/.eslintrc
rename : browser/devtools/animationinspector/test/browser.ini => devtools/client/animationinspector/test/browser.ini
rename : browser/devtools/animationinspector/test/browser_animation_controller_exposes_document_currentTime.js => devtools/client/animationinspector/test/browser_animation_controller_exposes_document_currentTime.js
rename : browser/devtools/animationinspector/test/browser_animation_empty_on_invalid_nodes.js => devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js
rename : browser/devtools/animationinspector/test/browser_animation_mutations_with_same_names.js => devtools/client/animationinspector/test/browser_animation_mutations_with_same_names.js
rename : browser/devtools/animationinspector/test/browser_animation_panel_exists.js => devtools/client/animationinspector/test/browser_animation_panel_exists.js
rename : browser/devtools/animationinspector/test/browser_animation_participate_in_inspector_update.js => devtools/client/animationinspector/test/browser_animation_participate_in_inspector_update.js
rename : browser/devtools/animationinspector/test/browser_animation_playerFronts_are_refreshed.js => devtools/client/animationinspector/test/browser_animation_playerFronts_are_refreshed.js
rename : browser/devtools/animationinspector/test/browser_animation_playerWidgets_appear_on_panel_init.js => devtools/client/animationinspector/test/browser_animation_playerWidgets_appear_on_panel_init.js
rename : browser/devtools/animationinspector/test/browser_animation_playerWidgets_target_nodes.js => devtools/client/animationinspector/test/browser_animation_playerWidgets_target_nodes.js
rename : browser/devtools/animationinspector/test/browser_animation_refresh_on_added_animation.js => devtools/client/animationinspector/test/browser_animation_refresh_on_added_animation.js
rename : browser/devtools/animationinspector/test/browser_animation_refresh_on_removed_animation.js => devtools/client/animationinspector/test/browser_animation_refresh_on_removed_animation.js
rename : browser/devtools/animationinspector/test/browser_animation_refresh_when_active.js => devtools/client/animationinspector/test/browser_animation_refresh_when_active.js
rename : browser/devtools/animationinspector/test/browser_animation_same_nb_of_playerWidgets_and_playerFronts.js => devtools/client/animationinspector/test/browser_animation_same_nb_of_playerWidgets_and_playerFronts.js
rename : browser/devtools/animationinspector/test/browser_animation_shows_player_on_valid_node.js => devtools/client/animationinspector/test/browser_animation_shows_player_on_valid_node.js
rename : browser/devtools/animationinspector/test/browser_animation_target_highlight_select.js => devtools/client/animationinspector/test/browser_animation_target_highlight_select.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_header.js => devtools/client/animationinspector/test/browser_animation_timeline_header.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_pause_button.js => devtools/client/animationinspector/test/browser_animation_timeline_pause_button.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_exists.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_exists.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_movable.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_movable.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_moves.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_moves.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_delay.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_delay.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_iterations.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_iterations.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_time_info.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_time_info.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_takes_rate_into_account.js => devtools/client/animationinspector/test/browser_animation_timeline_takes_rate_into_account.js
rename : browser/devtools/animationinspector/test/browser_animation_timeline_ui.js => devtools/client/animationinspector/test/browser_animation_timeline_ui.js
rename : browser/devtools/animationinspector/test/browser_animation_toggle_button_resets_on_navigate.js => devtools/client/animationinspector/test/browser_animation_toggle_button_resets_on_navigate.js
rename : browser/devtools/animationinspector/test/browser_animation_toggle_button_toggles_animations.js => devtools/client/animationinspector/test/browser_animation_toggle_button_toggles_animations.js
rename : browser/devtools/animationinspector/test/browser_animation_toolbar_exists.js => devtools/client/animationinspector/test/browser_animation_toolbar_exists.js
rename : browser/devtools/animationinspector/test/browser_animation_ui_updates_when_animation_data_changes.js => devtools/client/animationinspector/test/browser_animation_ui_updates_when_animation_data_changes.js
rename : browser/devtools/animationinspector/test/doc_body_animation.html => devtools/client/animationinspector/test/doc_body_animation.html
rename : browser/devtools/animationinspector/test/doc_frame_script.js => devtools/client/animationinspector/test/doc_frame_script.js
rename : browser/devtools/animationinspector/test/doc_modify_playbackRate.html => devtools/client/animationinspector/test/doc_modify_playbackRate.html
rename : browser/devtools/animationinspector/test/doc_negative_animation.html => devtools/client/animationinspector/test/doc_negative_animation.html
rename : browser/devtools/animationinspector/test/doc_simple_animation.html => devtools/client/animationinspector/test/doc_simple_animation.html
rename : browser/devtools/animationinspector/test/head.js => devtools/client/animationinspector/test/head.js
rename : browser/devtools/animationinspector/test/unit/.eslintrc => devtools/client/animationinspector/test/unit/.eslintrc
rename : browser/devtools/animationinspector/test/unit/test_findOptimalTimeInterval.js => devtools/client/animationinspector/test/unit/test_findOptimalTimeInterval.js
rename : browser/devtools/animationinspector/test/unit/test_timeScale.js => devtools/client/animationinspector/test/unit/test_timeScale.js
rename : browser/devtools/animationinspector/test/unit/xpcshell.ini => devtools/client/animationinspector/test/unit/xpcshell.ini
rename : browser/devtools/animationinspector/utils.js => devtools/client/animationinspector/utils.js
rename : browser/devtools/app-manager/app-projects.js => devtools/client/app-manager/app-projects.js
rename : browser/devtools/app-manager/app-validator.js => devtools/client/app-manager/app-validator.js
rename : browser/devtools/app-manager/builtin-adb-store.js => devtools/client/app-manager/builtin-adb-store.js
rename : browser/devtools/app-manager/connection-store.js => devtools/client/app-manager/connection-store.js
rename : browser/devtools/app-manager/content/connection-footer.js => devtools/client/app-manager/content/connection-footer.js
rename : browser/devtools/app-manager/content/connection-footer.xhtml => devtools/client/app-manager/content/connection-footer.xhtml
rename : browser/devtools/app-manager/content/device.js => devtools/client/app-manager/content/device.js
rename : browser/devtools/app-manager/content/device.xhtml => devtools/client/app-manager/content/device.xhtml
rename : browser/devtools/app-manager/content/help.xhtml => devtools/client/app-manager/content/help.xhtml
rename : browser/devtools/app-manager/content/index.js => devtools/client/app-manager/content/index.js
rename : browser/devtools/app-manager/content/index.xul => devtools/client/app-manager/content/index.xul
rename : browser/devtools/app-manager/content/manifest-editor.js => devtools/client/app-manager/content/manifest-editor.js
rename : browser/devtools/app-manager/content/projects.js => devtools/client/app-manager/content/projects.js
rename : browser/devtools/app-manager/content/projects.xhtml => devtools/client/app-manager/content/projects.xhtml
rename : browser/devtools/app-manager/content/template.js => devtools/client/app-manager/content/template.js
rename : browser/devtools/app-manager/content/utils.js => devtools/client/app-manager/content/utils.js
rename : browser/devtools/app-manager/device-store.js => devtools/client/app-manager/device-store.js
rename : browser/devtools/app-manager/moz.build => devtools/client/app-manager/moz.build
rename : browser/devtools/app-manager/simulators-store.js => devtools/client/app-manager/simulators-store.js
rename : browser/devtools/app-manager/test/.eslintrc => devtools/client/app-manager/test/.eslintrc
rename : browser/devtools/app-manager/test/browser.ini => devtools/client/app-manager/test/browser.ini
rename : browser/devtools/app-manager/test/browser_manifest_editor.js => devtools/client/app-manager/test/browser_manifest_editor.js
rename : browser/devtools/app-manager/test/chrome.ini => devtools/client/app-manager/test/chrome.ini
rename : browser/devtools/app-manager/test/head.js => devtools/client/app-manager/test/head.js
rename : browser/devtools/app-manager/test/hosted_app.manifest => devtools/client/app-manager/test/hosted_app.manifest
rename : browser/devtools/app-manager/test/manifest.webapp => devtools/client/app-manager/test/manifest.webapp
rename : browser/devtools/app-manager/test/test_app_validator.html => devtools/client/app-manager/test/test_app_validator.html
rename : browser/devtools/app-manager/test/test_connection_store.html => devtools/client/app-manager/test/test_connection_store.html
rename : browser/devtools/app-manager/test/test_device_store.html => devtools/client/app-manager/test/test_device_store.html
rename : browser/devtools/app-manager/test/test_projects_store.html => devtools/client/app-manager/test/test_projects_store.html
rename : browser/devtools/app-manager/test/test_remain_connected.html => devtools/client/app-manager/test/test_remain_connected.html
rename : browser/devtools/app-manager/test/test_template.html => devtools/client/app-manager/test/test_template.html
rename : browser/devtools/app-manager/test/validator/no-name-or-icon/home.html => devtools/client/app-manager/test/validator/no-name-or-icon/home.html
rename : browser/devtools/app-manager/test/validator/no-name-or-icon/manifest.webapp => devtools/client/app-manager/test/validator/no-name-or-icon/manifest.webapp
rename : browser/devtools/app-manager/test/validator/non-absolute-path/manifest.webapp => devtools/client/app-manager/test/validator/non-absolute-path/manifest.webapp
rename : browser/devtools/app-manager/test/validator/valid/alsoValid/manifest.webapp => devtools/client/app-manager/test/validator/valid/alsoValid/manifest.webapp
rename : browser/devtools/app-manager/test/validator/valid/home.html => devtools/client/app-manager/test/validator/valid/home.html
rename : browser/devtools/app-manager/test/validator/valid/icon.png => devtools/client/app-manager/test/validator/valid/icon.png
rename : browser/devtools/app-manager/test/validator/valid/manifest.webapp => devtools/client/app-manager/test/validator/valid/manifest.webapp
rename : browser/devtools/app-manager/test/validator/wrong-launch-path/icon.png => devtools/client/app-manager/test/validator/wrong-launch-path/icon.png
rename : browser/devtools/app-manager/test/validator/wrong-launch-path/manifest.webapp => devtools/client/app-manager/test/validator/wrong-launch-path/manifest.webapp
rename : browser/devtools/app-manager/webapps-store.js => devtools/client/app-manager/webapps-store.js
rename : browser/devtools/canvasdebugger/callslist.js => devtools/client/canvasdebugger/callslist.js
rename : browser/devtools/canvasdebugger/canvasdebugger.js => devtools/client/canvasdebugger/canvasdebugger.js
rename : browser/devtools/canvasdebugger/canvasdebugger.xul => devtools/client/canvasdebugger/canvasdebugger.xul
rename : browser/devtools/canvasdebugger/moz.build => devtools/client/canvasdebugger/moz.build
rename : browser/devtools/canvasdebugger/panel.js => devtools/client/canvasdebugger/panel.js
rename : browser/devtools/canvasdebugger/snapshotslist.js => devtools/client/canvasdebugger/snapshotslist.js
rename : browser/devtools/canvasdebugger/test/.eslintrc => devtools/client/canvasdebugger/test/.eslintrc
rename : browser/devtools/canvasdebugger/test/browser.ini => devtools/client/canvasdebugger/test/browser.ini
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-03.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-04.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-05.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-06.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-07.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-08.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-09.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-10.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-11.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-12.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-highlight.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-list.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-search.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-clear.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-open.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-03.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-04.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-reload-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-reload-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stepping.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-01.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-02.js
rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-03.js
rename : browser/devtools/canvasdebugger/test/browser_profiling-canvas.js => devtools/client/canvasdebugger/test/browser_profiling-canvas.js
rename : browser/devtools/canvasdebugger/test/browser_profiling-webgl.js => devtools/client/canvasdebugger/test/browser_profiling-webgl.js
rename : browser/devtools/canvasdebugger/test/doc_no-canvas.html => devtools/client/canvasdebugger/test/doc_no-canvas.html
rename : browser/devtools/canvasdebugger/test/doc_raf-begin.html => devtools/client/canvasdebugger/test/doc_raf-begin.html
rename : browser/devtools/canvasdebugger/test/doc_raf-no-canvas.html => devtools/client/canvasdebugger/test/doc_raf-no-canvas.html
rename : browser/devtools/canvasdebugger/test/doc_settimeout.html => devtools/client/canvasdebugger/test/doc_settimeout.html
rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-bitmasks.html => devtools/client/canvasdebugger/test/doc_simple-canvas-bitmasks.html
rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-deep-stack.html => devtools/client/canvasdebugger/test/doc_simple-canvas-deep-stack.html
rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-transparent.html => devtools/client/canvasdebugger/test/doc_simple-canvas-transparent.html
rename : browser/devtools/canvasdebugger/test/doc_simple-canvas.html => devtools/client/canvasdebugger/test/doc_simple-canvas.html
rename : browser/devtools/canvasdebugger/test/doc_webgl-bindings.html => devtools/client/canvasdebugger/test/doc_webgl-bindings.html
rename : browser/devtools/canvasdebugger/test/doc_webgl-enum.html => devtools/client/canvasdebugger/test/doc_webgl-enum.html
rename : browser/devtools/canvasdebugger/test/head.js => devtools/client/canvasdebugger/test/head.js
rename : browser/devtools/commandline/commandline.css => devtools/client/commandline/commandline.css
rename : browser/devtools/commandline/commandlineoutput.xhtml => devtools/client/commandline/commandlineoutput.xhtml
rename : browser/devtools/commandline/commandlinetooltip.xhtml => devtools/client/commandline/commandlinetooltip.xhtml
rename : browser/devtools/commandline/moz.build => devtools/client/commandline/moz.build
rename : browser/devtools/commandline/test/.eslintrc => devtools/client/commandline/test/.eslintrc
rename : browser/devtools/commandline/test/browser.ini => devtools/client/commandline/test/browser.ini
rename : browser/devtools/commandline/test/browser_cmd_addon.js => devtools/client/commandline/test/browser_cmd_addon.js
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid.js => devtools/client/commandline/test/browser_cmd_appcache_invalid.js
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_appcache.appcache => devtools/client/commandline/test/browser_cmd_appcache_invalid_appcache.appcache
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_appcache.appcache^headers^ => devtools/client/commandline/test/browser_cmd_appcache_invalid_appcache.appcache^headers^
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_index.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_index.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page1.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page1.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page2.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page2.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page3.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page3.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page3.html^headers^ => devtools/client/commandline/test/browser_cmd_appcache_invalid_page3.html^headers^
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid.js => devtools/client/commandline/test/browser_cmd_appcache_valid.js
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_appcache.appcache => devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_appcache.appcache^headers^ => devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache^headers^
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_index.html => devtools/client/commandline/test/browser_cmd_appcache_valid_index.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page1.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page1.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page2.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page2.html
rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page3.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page3.html
rename : browser/devtools/commandline/test/browser_cmd_calllog.js => devtools/client/commandline/test/browser_cmd_calllog.js
rename : browser/devtools/commandline/test/browser_cmd_calllog_chrome.js => devtools/client/commandline/test/browser_cmd_calllog_chrome.js
rename : browser/devtools/commandline/test/browser_cmd_commands.js => devtools/client/commandline/test/browser_cmd_commands.js
rename : browser/devtools/commandline/test/browser_cmd_cookie.html => devtools/client/commandline/test/browser_cmd_cookie.html
rename : browser/devtools/commandline/test/browser_cmd_cookie.js => devtools/client/commandline/test/browser_cmd_cookie.js
rename : browser/devtools/commandline/test/browser_cmd_cookie_host.js => devtools/client/commandline/test/browser_cmd_cookie_host.js
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_oneshot.js => devtools/client/commandline/test/browser_cmd_csscoverage_oneshot.js
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page1.html => devtools/client/commandline/test/browser_cmd_csscoverage_page1.html
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page2.html => devtools/client/commandline/test/browser_cmd_csscoverage_page2.html
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page3.html => devtools/client/commandline/test/browser_cmd_csscoverage_page3.html
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetA.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetA.css
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetB.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetB.css
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetC.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetC.css
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetD.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetD.css
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_startstop.js => devtools/client/commandline/test/browser_cmd_csscoverage_startstop.js
rename : browser/devtools/commandline/test/browser_cmd_csscoverage_util.js => devtools/client/commandline/test/browser_cmd_csscoverage_util.js
rename : browser/devtools/commandline/test/browser_cmd_folder.js => devtools/client/commandline/test/browser_cmd_folder.js
rename : browser/devtools/commandline/test/browser_cmd_highlight_01.js => devtools/client/commandline/test/browser_cmd_highlight_01.js
rename : browser/devtools/commandline/test/browser_cmd_highlight_02.js => devtools/client/commandline/test/browser_cmd_highlight_02.js
rename : browser/devtools/commandline/test/browser_cmd_inject.html => devtools/client/commandline/test/browser_cmd_inject.html
rename : browser/devtools/commandline/test/browser_cmd_inject.js => devtools/client/commandline/test/browser_cmd_inject.js
rename : browser/devtools/commandline/test/browser_cmd_jsb.js => devtools/client/commandline/test/browser_cmd_jsb.js
rename : browser/devtools/commandline/test/browser_cmd_jsb_script.jsi => devtools/client/commandline/test/browser_cmd_jsb_script.jsi
rename : browser/devtools/commandline/test/browser_cmd_listen.js => devtools/client/commandline/test/browser_cmd_listen.js
rename : browser/devtools/commandline/test/browser_cmd_media.html => devtools/client/commandline/test/browser_cmd_media.html
rename : browser/devtools/commandline/test/browser_cmd_media.js => devtools/client/commandline/test/browser_cmd_media.js
rename : browser/devtools/commandline/test/browser_cmd_pagemod_export.html => devtools/client/commandline/test/browser_cmd_pagemod_export.html
rename : browser/devtools/commandline/test/browser_cmd_pagemod_export.js => devtools/client/commandline/test/browser_cmd_pagemod_export.js
rename : browser/devtools/commandline/test/browser_cmd_paintflashing.js => devtools/client/commandline/test/browser_cmd_paintflashing.js
rename : browser/devtools/commandline/test/browser_cmd_pref1.js => devtools/client/commandline/test/browser_cmd_pref1.js
rename : browser/devtools/commandline/test/browser_cmd_pref2.js => devtools/client/commandline/test/browser_cmd_pref2.js
rename : browser/devtools/commandline/test/browser_cmd_pref3.js => devtools/client/commandline/test/browser_cmd_pref3.js
rename : browser/devtools/commandline/test/browser_cmd_restart.js => devtools/client/commandline/test/browser_cmd_restart.js
rename : browser/devtools/commandline/test/browser_cmd_rulers.js => devtools/client/commandline/test/browser_cmd_rulers.js
rename : browser/devtools/commandline/test/browser_cmd_screenshot.html => devtools/client/commandline/test/browser_cmd_screenshot.html
rename : browser/devtools/commandline/test/browser_cmd_screenshot.js => devtools/client/commandline/test/browser_cmd_screenshot.js
rename : browser/devtools/commandline/test/browser_cmd_settings.js => devtools/client/commandline/test/browser_cmd_settings.js
rename : browser/devtools/commandline/test/browser_gcli_async.js => devtools/client/commandline/test/browser_gcli_async.js
rename : browser/devtools/commandline/test/browser_gcli_canon.js => devtools/client/commandline/test/browser_gcli_canon.js
rename : browser/devtools/commandline/test/browser_gcli_cli1.js => devtools/client/commandline/test/browser_gcli_cli1.js
rename : browser/devtools/commandline/test/browser_gcli_cli2.js => devtools/client/commandline/test/browser_gcli_cli2.js
rename : browser/devtools/commandline/test/browser_gcli_completion1.js => devtools/client/commandline/test/browser_gcli_completion1.js
rename : browser/devtools/commandline/test/browser_gcli_completion2.js => devtools/client/commandline/test/browser_gcli_completion2.js
rename : browser/devtools/commandline/test/browser_gcli_context.js => devtools/client/commandline/test/browser_gcli_context.js
rename : browser/devtools/commandline/test/browser_gcli_date.js => devtools/client/commandline/test/browser_gcli_date.js
rename : browser/devtools/commandline/test/browser_gcli_exec.js => devtools/client/commandline/test/browser_gcli_exec.js
rename : browser/devtools/commandline/test/browser_gcli_fail.js => devtools/client/commandline/test/browser_gcli_fail.js
rename : browser/devtools/commandline/test/browser_gcli_file.js => devtools/client/commandline/test/browser_gcli_file.js
rename : browser/devtools/commandline/test/browser_gcli_fileparser.js => devtools/client/commandline/test/browser_gcli_fileparser.js
rename : browser/devtools/commandline/test/browser_gcli_filesystem.js => devtools/client/commandline/test/browser_gcli_filesystem.js
rename : browser/devtools/commandline/test/browser_gcli_focus.js => devtools/client/commandline/test/browser_gcli_focus.js
rename : browser/devtools/commandline/test/browser_gcli_history.js => devtools/client/commandline/test/browser_gcli_history.js
rename : browser/devtools/commandline/test/browser_gcli_incomplete.js => devtools/client/commandline/test/browser_gcli_incomplete.js
rename : browser/devtools/commandline/test/browser_gcli_inputter.js => devtools/client/commandline/test/browser_gcli_inputter.js
rename : browser/devtools/commandline/test/browser_gcli_intro.js => devtools/client/commandline/test/browser_gcli_intro.js
rename : browser/devtools/commandline/test/browser_gcli_js.js => devtools/client/commandline/test/browser_gcli_js.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard1.js => devtools/client/commandline/test/browser_gcli_keyboard1.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard2.js => devtools/client/commandline/test/browser_gcli_keyboard2.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard3.js => devtools/client/commandline/test/browser_gcli_keyboard3.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard4.js => devtools/client/commandline/test/browser_gcli_keyboard4.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard5.js => devtools/client/commandline/test/browser_gcli_keyboard5.js
rename : browser/devtools/commandline/test/browser_gcli_keyboard6.js => devtools/client/commandline/test/browser_gcli_keyboard6.js
rename : browser/devtools/commandline/test/browser_gcli_menu.js => devtools/client/commandline/test/browser_gcli_menu.js
rename : browser/devtools/commandline/test/browser_gcli_node.js => devtools/client/commandline/test/browser_gcli_node.js
rename : browser/devtools/commandline/test/browser_gcli_pref1.js => devtools/client/commandline/test/browser_gcli_pref1.js
rename : browser/devtools/commandline/test/browser_gcli_pref2.js => devtools/client/commandline/test/browser_gcli_pref2.js
rename : browser/devtools/commandline/test/browser_gcli_remotews.js => devtools/client/commandline/test/browser_gcli_remotews.js
rename : browser/devtools/commandline/test/browser_gcli_remotexhr.js => devtools/client/commandline/test/browser_gcli_remotexhr.js
rename : browser/devtools/commandline/test/browser_gcli_resource.js => devtools/client/commandline/test/browser_gcli_resource.js
rename : browser/devtools/commandline/test/browser_gcli_short.js => devtools/client/commandline/test/browser_gcli_short.js
rename : browser/devtools/commandline/test/browser_gcli_spell.js => devtools/client/commandline/test/browser_gcli_spell.js
rename : browser/devtools/commandline/test/browser_gcli_split.js => devtools/client/commandline/test/browser_gcli_split.js
rename : browser/devtools/commandline/test/browser_gcli_string.js => devtools/client/commandline/test/browser_gcli_string.js
rename : browser/devtools/commandline/test/browser_gcli_tokenize.js => devtools/client/commandline/test/browser_gcli_tokenize.js
rename : browser/devtools/commandline/test/browser_gcli_tooltip.js => devtools/client/commandline/test/browser_gcli_tooltip.js
rename : browser/devtools/commandline/test/browser_gcli_types.js => devtools/client/commandline/test/browser_gcli_types.js
rename : browser/devtools/commandline/test/browser_gcli_union.js => devtools/client/commandline/test/browser_gcli_union.js
rename : browser/devtools/commandline/test/browser_gcli_url.js => devtools/client/commandline/test/browser_gcli_url.js
rename : browser/devtools/commandline/test/head.js => devtools/client/commandline/test/head.js
rename : browser/devtools/commandline/test/helpers.js => devtools/client/commandline/test/helpers.js
rename : browser/devtools/commandline/test/mockCommands.js => devtools/client/commandline/test/mockCommands.js
rename : browser/devtools/debugger/content/actions/event-listeners.js => devtools/client/debugger/content/actions/event-listeners.js
rename : browser/devtools/debugger/content/constants.js => devtools/client/debugger/content/constants.js
rename : browser/devtools/debugger/content/globalActions.js => devtools/client/debugger/content/globalActions.js
rename : browser/devtools/debugger/content/reducers/event-listeners.js => devtools/client/debugger/content/reducers/event-listeners.js
rename : browser/devtools/debugger/content/reducers/index.js => devtools/client/debugger/content/reducers/index.js
rename : browser/devtools/debugger/content/utils.js => devtools/client/debugger/content/utils.js
rename : browser/devtools/debugger/content/views/event-listeners-view.js => devtools/client/debugger/content/views/event-listeners-view.js
rename : browser/devtools/debugger/debugger-commands.js => devtools/client/debugger/debugger-commands.js
rename : browser/devtools/debugger/debugger-controller.js => devtools/client/debugger/debugger-controller.js
rename : browser/devtools/debugger/debugger-view.js => devtools/client/debugger/debugger-view.js
rename : browser/devtools/debugger/debugger.css => devtools/client/debugger/debugger.css
rename : browser/devtools/debugger/debugger.xul => devtools/client/debugger/debugger.xul
rename : browser/devtools/debugger/moz.build => devtools/client/debugger/moz.build
rename : browser/devtools/debugger/panel.js => devtools/client/debugger/panel.js
rename : browser/devtools/debugger/test/.eslintrc => devtools/client/debugger/test/.eslintrc
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon3/lib/main.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon3/lib/main.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon3/package.json => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon3/package.json
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/bootstrap.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/bootstrap.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/chrome.manifest => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/chrome.manifest
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/install.rdf => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/install.rdf
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.jsm
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.xul
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.jsm
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.xul
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul2.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul2.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/bootstrap.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/bootstrap.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/chrome.manifest => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/chrome.manifest
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/install.rdf => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/install.rdf
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.jsm
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.xul
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.jsm
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.xul
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul.js
rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul2.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul2.js
rename : browser/devtools/debugger/test/mochitest/addon1.xpi => devtools/client/debugger/test/mochitest/addon1.xpi
rename : browser/devtools/debugger/test/mochitest/addon2.xpi => devtools/client/debugger/test/mochitest/addon2.xpi
rename : browser/devtools/debugger/test/mochitest/addon3.xpi => devtools/client/debugger/test/mochitest/addon3.xpi
rename : browser/devtools/debugger/test/mochitest/addon4.xpi => devtools/client/debugger/test/mochitest/addon4.xpi
rename : browser/devtools/debugger/test/mochitest/addon5.xpi => devtools/client/debugger/test/mochitest/addon5.xpi
rename : browser/devtools/debugger/test/mochitest/browser.ini => devtools/client/debugger/test/mochitest/browser.ini
rename : browser/devtools/debugger/test/mochitest/browser_dbg_WorkerActor.attach.js => devtools/client/debugger/test/mochitest/browser_dbg_WorkerActor.attach.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_WorkerActor.attachThread.js => devtools/client/debugger/test/mochitest/browser_dbg_WorkerActor.attachThread.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_aaa_run_first_leaktest.js => devtools/client/debugger/test/mochitest/browser_dbg_aaa_run_first_leaktest.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-console.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-console.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-modules-unpacked.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-modules-unpacked.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-modules.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-modules.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-panels.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-panels.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-sources.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-sources.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_addonactor.js => devtools/client/debugger/test/mochitest/browser_dbg_addonactor.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_auto-pretty-print-01.js => devtools/client/debugger/test/mochitest/browser_dbg_auto-pretty-print-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_auto-pretty-print-02.js => devtools/client/debugger/test/mochitest/browser_dbg_auto-pretty-print-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_bfcache.js => devtools/client/debugger/test/mochitest/browser_dbg_bfcache.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-01.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-02.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-03.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-04.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-05.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-06.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breadcrumbs-access.js => devtools/client/debugger/test/mochitest/browser_dbg_breadcrumbs-access.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-in-anon.js => devtools/client/debugger/test/mochitest/browser_dbg_break-in-anon.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-01.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-02.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-03.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-04.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-05.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-06.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-07.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-07.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-08.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-08.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-01.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-02.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-03.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-next-console.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-next-console.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-next.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-next.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-actual-location.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-actual-location.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-actual-location2.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-actual-location2.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-break-on-last-line-of-script-on-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-break-on-last-line-of-script-on-reload.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-button-01.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-button-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-button-02.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-button-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-condition-thrown-message.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-condition-thrown-message.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu-add.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu-add.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-disabled-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-disabled-reload.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-editor.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-editor.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-eval.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-highlight.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-highlight.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-new-script.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-new-script.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-other-tabs.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-other-tabs.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-pane.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-pane.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-reload.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_bug-896139.js => devtools/client/debugger/test/mochitest/browser_dbg_bug-896139.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_chrome-create.js => devtools/client/debugger/test/mochitest/browser_dbg_chrome-create.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_chrome-debugging.js => devtools/client/debugger/test/mochitest/browser_dbg_chrome-debugging.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_clean-exit-window.js => devtools/client/debugger/test/mochitest/browser_dbg_clean-exit-window.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_clean-exit.js => devtools/client/debugger/test/mochitest/browser_dbg_clean-exit.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_closure-inspection.js => devtools/client/debugger/test/mochitest/browser_dbg_closure-inspection.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-blackbox.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-blackbox.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-break.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-dbg.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-dbg.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-01.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-03.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-04.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_console-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_console-eval.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_console-named-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_console-named-eval.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_controller-evaluate-01.js => devtools/client/debugger/test/mochitest/browser_dbg_controller-evaluate-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_controller-evaluate-02.js => devtools/client/debugger/test/mochitest/browser_dbg_controller-evaluate-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_debugger-statement.js => devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_editor-contextmenu.js => devtools/client/debugger/test/mochitest/browser_dbg_editor-contextmenu.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_editor-mode.js => devtools/client/debugger/test/mochitest/browser_dbg_editor-mode.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-01.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-02.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-03.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-04.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_file-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_file-reload.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_function-display-name.js => devtools/client/debugger/test/mochitest/browser_dbg_function-display-name.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_global-method-override.js => devtools/client/debugger/test/mochitest/browser_dbg_global-method-override.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_globalactor.js => devtools/client/debugger/test/mochitest/browser_dbg_globalactor.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_hide-toolbar-buttons.js => devtools/client/debugger/test/mochitest/browser_dbg_hide-toolbar-buttons.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_host-layout.js => devtools/client/debugger/test/mochitest/browser_dbg_host-layout.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_iframes.js => devtools/client/debugger/test/mochitest/browser_dbg_iframes.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_instruments-pane-collapse.js => devtools/client/debugger/test/mochitest/browser_dbg_instruments-pane-collapse.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_interrupts.js => devtools/client/debugger/test/mochitest/browser_dbg_interrupts.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_listaddons.js => devtools/client/debugger/test/mochitest/browser_dbg_listaddons.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-01.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-02.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-03.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_listworkers.js => devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-01-simple.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-01-simple.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-02-blank.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-02-blank.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-03-new.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-03-new.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-04-breakpoint.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-04-breakpoint.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_multiple-windows.js => devtools/client/debugger/test/mochitest/browser_dbg_multiple-windows.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_navigation.js => devtools/client/debugger/test/mochitest/browser_dbg_navigation.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_no-page-sources.js => devtools/client/debugger/test/mochitest/browser_dbg_no-page-sources.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_on-pause-highlight.js => devtools/client/debugger/test/mochitest/browser_dbg_on-pause-highlight.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_on-pause-raise.js => devtools/client/debugger/test/mochitest/browser_dbg_on-pause-raise.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_optimized-out-vars.js => devtools/client/debugger/test/mochitest/browser_dbg_optimized-out-vars.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_panel-size.js => devtools/client/debugger/test/mochitest/browser_dbg_panel-size.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-01.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-02.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-03.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-04.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-05.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-06.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-07.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-07.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-08.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-08.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-09.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-09.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-10.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-10.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-exceptions-01.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-exceptions-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-exceptions-02.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-exceptions-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-no-step.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-no-step.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-resume.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-resume.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-warning.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-warning.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_paused-keybindings.js => devtools/client/debugger/test/mochitest/browser_dbg_paused-keybindings.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-01.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-02.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-03.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-04.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-05.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-06.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-07.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-07.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-08.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-09.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-09.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-10.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-10.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-11.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-11.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-12.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-12.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-13.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-13.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-on-paused.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-on-paused.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_progress-listener-bug.js => devtools/client/debugger/test/mochitest/browser_dbg_progress-listener-bug.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-01.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-02.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-03.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-same-script.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-same-script.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-01.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-02.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-03.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-autofill-identifier.js => devtools/client/debugger/test/mochitest/browser_dbg_search-autofill-identifier.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-04.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-04.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-05.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-06.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-popup-jank.js => devtools/client/debugger/test/mochitest/browser_dbg_search-popup-jank.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-symbols.js => devtools/client/debugger/test/mochitest/browser_dbg_search-symbols.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-help-popup-01.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-help-popup-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-help-popup-02.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-help-popup-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-parse.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-parse.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-01.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-02.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-03.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-04.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-05.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-01.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-02.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-03.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-04.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-bookmarklet.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-bookmarklet.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-cache.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-contextmenu-01.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-contextmenu-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-contextmenu-02.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-contextmenu-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-eval-01.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-eval-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-eval-02.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-eval-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-keybindings.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-keybindings.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-labels.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-labels.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-sorting.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-sorting.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_split-console-paused-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_split-console-paused-reload.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-01.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-02.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-03.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-04.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-05.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-06.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-07.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-07.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_step-out.js => devtools/client/debugger/test/mochitest/browser_dbg_step-out.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_tabactor-01.js => devtools/client/debugger/test/mochitest/browser_dbg_tabactor-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_tabactor-02.js => devtools/client/debugger/test/mochitest/browser_dbg_tabactor-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_terminate-on-tab-close.js => devtools/client/debugger/test/mochitest/browser_dbg_terminate-on-tab-close.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-06.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-accessibility.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-accessibility.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-data.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-data.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-cancel.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-cancel.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-click.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-click.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-value.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-value.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-watch.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-watch.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-pref.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-pref.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-searchbox.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-searchbox.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-with.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-with.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frozen-sealed-nonext.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frozen-sealed-nonext.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-hide-non-enums.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-hide-non-enums.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-large-array-buffer.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-large-array-buffer.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-override-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-override-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-override-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-override-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-04.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-05.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-06.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-06.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-07.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-07.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-08.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-08.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-09.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-09.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-10.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-10.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-11.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-11.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-12.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-12.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-13.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-13.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-14.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-14.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-15.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-15.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-16.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-16.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-02.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-03.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-webidl.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-webidl.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_watch-expressions-01.js => devtools/client/debugger/test/mochitest/browser_dbg_watch-expressions-01.js
rename : browser/devtools/debugger/test/mochitest/browser_dbg_watch-expressions-02.js => devtools/client/debugger/test/mochitest/browser_dbg_watch-expressions-02.js
rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attach-worker1.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attach-worker1.js
rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attach-worker2.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attach-worker2.js
rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attachThread-worker.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attachThread-worker.js
rename : browser/devtools/debugger/test/mochitest/code_binary_search.coffee => devtools/client/debugger/test/mochitest/code_binary_search.coffee
rename : browser/devtools/debugger/test/mochitest/code_binary_search.js => devtools/client/debugger/test/mochitest/code_binary_search.js
rename : browser/devtools/debugger/test/mochitest/code_binary_search.map => devtools/client/debugger/test/mochitest/code_binary_search.map
rename : browser/devtools/debugger/test/mochitest/code_blackboxing_blackboxme.js => devtools/client/debugger/test/mochitest/code_blackboxing_blackboxme.js
rename : browser/devtools/debugger/test/mochitest/code_blackboxing_one.js => devtools/client/debugger/test/mochitest/code_blackboxing_one.js
rename : browser/devtools/debugger/test/mochitest/code_blackboxing_three.js => devtools/client/debugger/test/mochitest/code_blackboxing_three.js
rename : browser/devtools/debugger/test/mochitest/code_blackboxing_two.js => devtools/client/debugger/test/mochitest/code_blackboxing_two.js
rename : browser/devtools/debugger/test/mochitest/code_breakpoints-break-on-last-line-of-script-on-reload.js => devtools/client/debugger/test/mochitest/code_breakpoints-break-on-last-line-of-script-on-reload.js
rename : browser/devtools/debugger/test/mochitest/code_breakpoints-other-tabs.js => devtools/client/debugger/test/mochitest/code_breakpoints-other-tabs.js
rename : browser/devtools/debugger/test/mochitest/code_bug-896139.js => devtools/client/debugger/test/mochitest/code_bug-896139.js
rename : browser/devtools/debugger/test/mochitest/code_frame-script.js => devtools/client/debugger/test/mochitest/code_frame-script.js
rename : browser/devtools/debugger/test/mochitest/code_function-search-01.js => devtools/client/debugger/test/mochitest/code_function-search-01.js
rename : browser/devtools/debugger/test/mochitest/code_function-search-02.js => devtools/client/debugger/test/mochitest/code_function-search-02.js
rename : browser/devtools/debugger/test/mochitest/code_function-search-03.js => devtools/client/debugger/test/mochitest/code_function-search-03.js
rename : browser/devtools/debugger/test/mochitest/code_listworkers-worker1.js => devtools/client/debugger/test/mochitest/code_listworkers-worker1.js
rename : browser/devtools/debugger/test/mochitest/code_listworkers-worker2.js => devtools/client/debugger/test/mochitest/code_listworkers-worker2.js
rename : browser/devtools/debugger/test/mochitest/code_location-changes.js => devtools/client/debugger/test/mochitest/code_location-changes.js
rename : browser/devtools/debugger/test/mochitest/code_math.js => devtools/client/debugger/test/mochitest/code_math.js
rename : browser/devtools/debugger/test/mochitest/code_math.map => devtools/client/debugger/test/mochitest/code_math.map
rename : browser/devtools/debugger/test/mochitest/code_math.min.js => devtools/client/debugger/test/mochitest/code_math.min.js
rename : browser/devtools/debugger/test/mochitest/code_math_bogus_map.js => devtools/client/debugger/test/mochitest/code_math_bogus_map.js
rename : browser/devtools/debugger/test/mochitest/code_same-line-functions.js => devtools/client/debugger/test/mochitest/code_same-line-functions.js
rename : browser/devtools/debugger/test/mochitest/code_script-eval.js => devtools/client/debugger/test/mochitest/code_script-eval.js
rename : browser/devtools/debugger/test/mochitest/code_script-switching-01.js => devtools/client/debugger/test/mochitest/code_script-switching-01.js
rename : browser/devtools/debugger/test/mochitest/code_script-switching-02.js => devtools/client/debugger/test/mochitest/code_script-switching-02.js
rename : browser/devtools/debugger/test/mochitest/code_test-editor-mode => devtools/client/debugger/test/mochitest/code_test-editor-mode
rename : browser/devtools/debugger/test/mochitest/code_ugly-2.js => devtools/client/debugger/test/mochitest/code_ugly-2.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-3.js => devtools/client/debugger/test/mochitest/code_ugly-3.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-4.js => devtools/client/debugger/test/mochitest/code_ugly-4.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-5.js => devtools/client/debugger/test/mochitest/code_ugly-5.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-6.js => devtools/client/debugger/test/mochitest/code_ugly-6.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-7.js => devtools/client/debugger/test/mochitest/code_ugly-7.js
rename : browser/devtools/debugger/test/mochitest/code_ugly-8 => devtools/client/debugger/test/mochitest/code_ugly-8
rename : browser/devtools/debugger/test/mochitest/code_ugly-8^headers^ => devtools/client/debugger/test/mochitest/code_ugly-8^headers^
rename : browser/devtools/debugger/test/mochitest/code_ugly.js => devtools/client/debugger/test/mochitest/code_ugly.js
rename : browser/devtools/debugger/test/mochitest/code_workeractor-worker.js => devtools/client/debugger/test/mochitest/code_workeractor-worker.js
rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attach-tab1.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attach-tab1.html
rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attach-tab2.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attach-tab2.html
rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attachThread-tab.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attachThread-tab.html
rename : browser/devtools/debugger/test/mochitest/doc_auto-pretty-print-01.html => devtools/client/debugger/test/mochitest/doc_auto-pretty-print-01.html
rename : browser/devtools/debugger/test/mochitest/doc_auto-pretty-print-02.html => devtools/client/debugger/test/mochitest/doc_auto-pretty-print-02.html
rename : browser/devtools/debugger/test/mochitest/doc_binary_search.html => devtools/client/debugger/test/mochitest/doc_binary_search.html
rename : browser/devtools/debugger/test/mochitest/doc_blackboxing.html => devtools/client/debugger/test/mochitest/doc_blackboxing.html
rename : browser/devtools/debugger/test/mochitest/doc_breakpoint-move.html => devtools/client/debugger/test/mochitest/doc_breakpoint-move.html
rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-break-on-last-line-of-script-on-reload.html => devtools/client/debugger/test/mochitest/doc_breakpoints-break-on-last-line-of-script-on-reload.html
rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-other-tabs.html => devtools/client/debugger/test/mochitest/doc_breakpoints-other-tabs.html
rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-reload.html => devtools/client/debugger/test/mochitest/doc_breakpoints-reload.html
rename : browser/devtools/debugger/test/mochitest/doc_bug-896139.html => devtools/client/debugger/test/mochitest/doc_bug-896139.html
rename : browser/devtools/debugger/test/mochitest/doc_closure-optimized-out.html => devtools/client/debugger/test/mochitest/doc_closure-optimized-out.html
rename : browser/devtools/debugger/test/mochitest/doc_closures.html => devtools/client/debugger/test/mochitest/doc_closures.html
rename : browser/devtools/debugger/test/mochitest/doc_cmd-break.html => devtools/client/debugger/test/mochitest/doc_cmd-break.html
rename : browser/devtools/debugger/test/mochitest/doc_cmd-dbg.html => devtools/client/debugger/test/mochitest/doc_cmd-dbg.html
rename : browser/devtools/debugger/test/mochitest/doc_conditional-breakpoints.html => devtools/client/debugger/test/mochitest/doc_conditional-breakpoints.html
rename : browser/devtools/debugger/test/mochitest/doc_domnode-variables.html => devtools/client/debugger/test/mochitest/doc_domnode-variables.html
rename : browser/devtools/debugger/test/mochitest/doc_editor-mode.html => devtools/client/debugger/test/mochitest/doc_editor-mode.html
rename : browser/devtools/debugger/test/mochitest/doc_empty-tab-01.html => devtools/client/debugger/test/mochitest/doc_empty-tab-01.html
rename : browser/devtools/debugger/test/mochitest/doc_empty-tab-02.html => devtools/client/debugger/test/mochitest/doc_empty-tab-02.html
rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-01.html => devtools/client/debugger/test/mochitest/doc_event-listeners-01.html
rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-02.html => devtools/client/debugger/test/mochitest/doc_event-listeners-02.html
rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-03.html => devtools/client/debugger/test/mochitest/doc_event-listeners-03.html
rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-04.html => devtools/client/debugger/test/mochitest/doc_event-listeners-04.html
rename : browser/devtools/debugger/test/mochitest/doc_frame-parameters.html => devtools/client/debugger/test/mochitest/doc_frame-parameters.html
rename : browser/devtools/debugger/test/mochitest/doc_function-display-name.html => devtools/client/debugger/test/mochitest/doc_function-display-name.html
rename : browser/devtools/debugger/test/mochitest/doc_function-search.html => devtools/client/debugger/test/mochitest/doc_function-search.html
rename : browser/devtools/debugger/test/mochitest/doc_global-method-override.html => devtools/client/debugger/test/mochitest/doc_global-method-override.html
rename : browser/devtools/debugger/test/mochitest/doc_iframes.html => devtools/client/debugger/test/mochitest/doc_iframes.html
rename : browser/devtools/debugger/test/mochitest/doc_included-script.html => devtools/client/debugger/test/mochitest/doc_included-script.html
rename : browser/devtools/debugger/test/mochitest/doc_inline-debugger-statement.html => devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html
rename : browser/devtools/debugger/test/mochitest/doc_inline-script.html => devtools/client/debugger/test/mochitest/doc_inline-script.html
rename : browser/devtools/debugger/test/mochitest/doc_large-array-buffer.html => devtools/client/debugger/test/mochitest/doc_large-array-buffer.html
rename : browser/devtools/debugger/test/mochitest/doc_listworkers-tab.html => devtools/client/debugger/test/mochitest/doc_listworkers-tab.html
rename : browser/devtools/debugger/test/mochitest/doc_minified.html => devtools/client/debugger/test/mochitest/doc_minified.html
rename : browser/devtools/debugger/test/mochitest/doc_minified_bogus_map.html => devtools/client/debugger/test/mochitest/doc_minified_bogus_map.html
rename : browser/devtools/debugger/test/mochitest/doc_native-event-handler.html => devtools/client/debugger/test/mochitest/doc_native-event-handler.html
rename : browser/devtools/debugger/test/mochitest/doc_no-page-sources.html => devtools/client/debugger/test/mochitest/doc_no-page-sources.html
rename : browser/devtools/debugger/test/mochitest/doc_pause-exceptions.html => devtools/client/debugger/test/mochitest/doc_pause-exceptions.html
rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-2.html => devtools/client/debugger/test/mochitest/doc_pretty-print-2.html
rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-3.html => devtools/client/debugger/test/mochitest/doc_pretty-print-3.html
rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-on-paused.html => devtools/client/debugger/test/mochitest/doc_pretty-print-on-paused.html
rename : browser/devtools/debugger/test/mochitest/doc_pretty-print.html => devtools/client/debugger/test/mochitest/doc_pretty-print.html
rename : browser/devtools/debugger/test/mochitest/doc_promise-get-allocation-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-allocation-stack.html
rename : browser/devtools/debugger/test/mochitest/doc_promise-get-fulfillment-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-fulfillment-stack.html
rename : browser/devtools/debugger/test/mochitest/doc_promise-get-rejection-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-rejection-stack.html
rename : browser/devtools/debugger/test/mochitest/doc_promise.html => devtools/client/debugger/test/mochitest/doc_promise.html
rename : browser/devtools/debugger/test/mochitest/doc_random-javascript.html => devtools/client/debugger/test/mochitest/doc_random-javascript.html
rename : browser/devtools/debugger/test/mochitest/doc_recursion-stack.html => devtools/client/debugger/test/mochitest/doc_recursion-stack.html
rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-2.html => devtools/client/debugger/test/mochitest/doc_scope-variable-2.html
rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-3.html => devtools/client/debugger/test/mochitest/doc_scope-variable-3.html
rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-4.html => devtools/client/debugger/test/mochitest/doc_scope-variable-4.html
rename : browser/devtools/debugger/test/mochitest/doc_scope-variable.html => devtools/client/debugger/test/mochitest/doc_scope-variable.html
rename : browser/devtools/debugger/test/mochitest/doc_script-bookmarklet.html => devtools/client/debugger/test/mochitest/doc_script-bookmarklet.html
rename : browser/devtools/debugger/test/mochitest/doc_script-eval.html => devtools/client/debugger/test/mochitest/doc_script-eval.html
rename : browser/devtools/debugger/test/mochitest/doc_script-switching-01.html => devtools/client/debugger/test/mochitest/doc_script-switching-01.html
rename : browser/devtools/debugger/test/mochitest/doc_script-switching-02.html => devtools/client/debugger/test/mochitest/doc_script-switching-02.html
rename : browser/devtools/debugger/test/mochitest/doc_split-console-paused-reload.html => devtools/client/debugger/test/mochitest/doc_split-console-paused-reload.html
rename : browser/devtools/debugger/test/mochitest/doc_step-out.html => devtools/client/debugger/test/mochitest/doc_step-out.html
rename : browser/devtools/debugger/test/mochitest/doc_terminate-on-tab-close.html => devtools/client/debugger/test/mochitest/doc_terminate-on-tab-close.html
rename : browser/devtools/debugger/test/mochitest/doc_watch-expression-button.html => devtools/client/debugger/test/mochitest/doc_watch-expression-button.html
rename : browser/devtools/debugger/test/mochitest/doc_watch-expressions.html => devtools/client/debugger/test/mochitest/doc_watch-expressions.html
rename : browser/devtools/debugger/test/mochitest/doc_with-frame.html => devtools/client/debugger/test/mochitest/doc_with-frame.html
rename : browser/devtools/debugger/test/mochitest/head.js => devtools/client/debugger/test/mochitest/head.js
rename : browser/devtools/debugger/test/mochitest/sjs_random-javascript.sjs => devtools/client/debugger/test/mochitest/sjs_random-javascript.sjs
rename : browser/devtools/debugger/test/mochitest/testactors.js => devtools/client/debugger/test/mochitest/testactors.js
rename : browser/devtools/debugger/utils.js => devtools/client/debugger/utils.js
rename : browser/devtools/debugger/views/filter-view.js => devtools/client/debugger/views/filter-view.js
rename : browser/devtools/debugger/views/global-search-view.js => devtools/client/debugger/views/global-search-view.js
rename : browser/devtools/debugger/views/options-view.js => devtools/client/debugger/views/options-view.js
rename : browser/devtools/debugger/views/sources-view.js => devtools/client/debugger/views/sources-view.js
rename : browser/devtools/debugger/views/stack-frames-classic-view.js => devtools/client/debugger/views/stack-frames-classic-view.js
rename : browser/devtools/debugger/views/stack-frames-view.js => devtools/client/debugger/views/stack-frames-view.js
rename : browser/devtools/debugger/views/toolbar-view.js => devtools/client/debugger/views/toolbar-view.js
rename : browser/devtools/debugger/views/variable-bubble-view.js => devtools/client/debugger/views/variable-bubble-view.js
rename : browser/devtools/debugger/views/watch-expressions-view.js => devtools/client/debugger/views/watch-expressions-view.js
rename : browser/devtools/debugger/views/workers-view.js => devtools/client/debugger/views/workers-view.js
rename : browser/devtools/definitions.js => devtools/client/definitions.js
rename : browser/devtools/devtools-clhandler.js => devtools/client/devtools-clhandler.js
rename : browser/devtools/devtools-clhandler.manifest => devtools/client/devtools-clhandler.manifest
rename : browser/devtools/eyedropper/commands.js => devtools/client/eyedropper/commands.js
rename : browser/devtools/eyedropper/crosshairs.css => devtools/client/eyedropper/crosshairs.css
rename : browser/devtools/eyedropper/eyedropper-child.js => devtools/client/eyedropper/eyedropper-child.js
rename : browser/devtools/eyedropper/eyedropper.js => devtools/client/eyedropper/eyedropper.js
rename : browser/devtools/eyedropper/eyedropper.xul => devtools/client/eyedropper/eyedropper.xul
rename : browser/devtools/eyedropper/moz.build => devtools/client/eyedropper/moz.build
rename : browser/devtools/eyedropper/nocursor.css => devtools/client/eyedropper/nocursor.css
rename : browser/devtools/eyedropper/test/.eslintrc => devtools/client/eyedropper/test/.eslintrc
rename : browser/devtools/eyedropper/test/browser.ini => devtools/client/eyedropper/test/browser.ini
rename : browser/devtools/eyedropper/test/browser_eyedropper_basic.js => devtools/client/eyedropper/test/browser_eyedropper_basic.js
rename : browser/devtools/eyedropper/test/browser_eyedropper_cmd.js => devtools/client/eyedropper/test/browser_eyedropper_cmd.js
rename : browser/devtools/eyedropper/test/color-block.html => devtools/client/eyedropper/test/color-block.html
rename : browser/devtools/eyedropper/test/head.js => devtools/client/eyedropper/test/head.js
rename : browser/devtools/fontinspector/font-inspector.css => devtools/client/fontinspector/font-inspector.css
rename : browser/devtools/fontinspector/font-inspector.js => devtools/client/fontinspector/font-inspector.js
rename : browser/devtools/fontinspector/font-inspector.xhtml => devtools/client/fontinspector/font-inspector.xhtml
rename : browser/devtools/fontinspector/moz.build => devtools/client/fontinspector/moz.build
rename : browser/devtools/fontinspector/test/.eslintrc => devtools/client/fontinspector/test/.eslintrc
rename : browser/devtools/fontinspector/test/OstrichLicense.txt => devtools/client/fontinspector/test/OstrichLicense.txt
rename : browser/devtools/fontinspector/test/browser.ini => devtools/client/fontinspector/test/browser.ini
rename : browser/devtools/fontinspector/test/browser_fontinspector.html => devtools/client/fontinspector/test/browser_fontinspector.html
rename : browser/devtools/fontinspector/test/browser_fontinspector.js => devtools/client/fontinspector/test/browser_fontinspector.js
rename : browser/devtools/fontinspector/test/browser_fontinspector_edit-previews-show-all.js => devtools/client/fontinspector/test/browser_fontinspector_edit-previews-show-all.js
rename : browser/devtools/fontinspector/test/browser_fontinspector_edit-previews.js => devtools/client/fontinspector/test/browser_fontinspector_edit-previews.js
rename : browser/devtools/fontinspector/test/browser_fontinspector_theme-change.js => devtools/client/fontinspector/test/browser_fontinspector_theme-change.js
rename : browser/devtools/fontinspector/test/head.js => devtools/client/fontinspector/test/head.js
rename : browser/devtools/fontinspector/test/ostrich-black.ttf => devtools/client/fontinspector/test/ostrich-black.ttf
rename : browser/devtools/fontinspector/test/ostrich-regular.ttf => devtools/client/fontinspector/test/ostrich-regular.ttf
rename : browser/devtools/fontinspector/test/test_iframe.html => devtools/client/fontinspector/test/test_iframe.html
rename : browser/devtools/framework/ToolboxProcess.jsm => devtools/client/framework/ToolboxProcess.jsm
rename : browser/devtools/framework/connect/connect.css => devtools/client/framework/connect/connect.css
rename : browser/devtools/framework/connect/connect.js => devtools/client/framework/connect/connect.js
rename : browser/devtools/framework/connect/connect.xhtml => devtools/client/framework/connect/connect.xhtml
rename : browser/devtools/framework/dev-edition-promo/dev-edition-logo.png => devtools/client/framework/dev-edition-promo/dev-edition-logo.png
rename : browser/devtools/framework/dev-edition-promo/dev-edition-promo.css => devtools/client/framework/dev-edition-promo/dev-edition-promo.css
rename : browser/devtools/framework/dev-edition-promo/dev-edition-promo.xul => devtools/client/framework/dev-edition-promo/dev-edition-promo.xul
rename : browser/devtools/framework/gDevTools.jsm => devtools/client/framework/gDevTools.jsm
rename : browser/devtools/framework/moz.build => devtools/client/framework/moz.build
rename : browser/devtools/framework/options-panel.css => devtools/client/framework/options-panel.css
rename : browser/devtools/framework/selection.js => devtools/client/framework/selection.js
rename : browser/devtools/framework/sidebar.js => devtools/client/framework/sidebar.js
rename : browser/devtools/framework/target.js => devtools/client/framework/target.js
rename : browser/devtools/framework/test/.eslintrc => devtools/client/framework/test/.eslintrc
rename : browser/devtools/framework/test/browser.ini => devtools/client/framework/test/browser.ini
rename : browser/devtools/framework/test/browser_devtools_api.js => devtools/client/framework/test/browser_devtools_api.js
rename : browser/devtools/framework/test/browser_devtools_api_destroy.js => devtools/client/framework/test/browser_devtools_api_destroy.js
rename : browser/devtools/framework/test/browser_dynamic_tool_enabling.js => devtools/client/framework/test/browser_dynamic_tool_enabling.js
rename : browser/devtools/framework/test/browser_ignore_toolbox_network_requests.js => devtools/client/framework/test/browser_ignore_toolbox_network_requests.js
rename : browser/devtools/framework/test/browser_keybindings_01.js => devtools/client/framework/test/browser_keybindings_01.js
rename : browser/devtools/framework/test/browser_keybindings_02.js => devtools/client/framework/test/browser_keybindings_02.js
rename : browser/devtools/framework/test/browser_keybindings_03.js => devtools/client/framework/test/browser_keybindings_03.js
rename : browser/devtools/framework/test/browser_new_activation_workflow.js => devtools/client/framework/test/browser_new_activation_workflow.js
rename : browser/devtools/framework/test/browser_target_events.js => devtools/client/framework/test/browser_target_events.js
rename : browser/devtools/framework/test/browser_target_remote.js => devtools/client/framework/test/browser_target_remote.js
rename : browser/devtools/framework/test/browser_target_support.js => devtools/client/framework/test/browser_target_support.js
rename : browser/devtools/framework/test/browser_toolbox_custom_host.js => devtools/client/framework/test/browser_toolbox_custom_host.js
rename : browser/devtools/framework/test/browser_toolbox_dynamic_registration.js => devtools/client/framework/test/browser_toolbox_dynamic_registration.js
rename : browser/devtools/framework/test/browser_toolbox_getpanelwhenready.js => devtools/client/framework/test/browser_toolbox_getpanelwhenready.js
rename : browser/devtools/framework/test/browser_toolbox_highlight.js => devtools/client/framework/test/browser_toolbox_highlight.js
rename : browser/devtools/framework/test/browser_toolbox_hosts.js => devtools/client/framework/test/browser_toolbox_hosts.js
rename : browser/devtools/framework/test/browser_toolbox_hosts_size.js => devtools/client/framework/test/browser_toolbox_hosts_size.js
rename : browser/devtools/framework/test/browser_toolbox_minimize.js => devtools/client/framework/test/browser_toolbox_minimize.js
rename : browser/devtools/framework/test/browser_toolbox_options.js => devtools/client/framework/test/browser_toolbox_options.js
rename : browser/devtools/framework/test/browser_toolbox_options_disable_buttons.js => devtools/client/framework/test/browser_toolbox_options_disable_buttons.js
rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache-01.js => devtools/client/framework/test/browser_toolbox_options_disable_cache-01.js
rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache-02.js => devtools/client/framework/test/browser_toolbox_options_disable_cache-02.js
rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache.sjs => devtools/client/framework/test/browser_toolbox_options_disable_cache.sjs
rename : browser/devtools/framework/test/browser_toolbox_options_disable_js.html => devtools/client/framework/test/browser_toolbox_options_disable_js.html
rename : browser/devtools/framework/test/browser_toolbox_options_disable_js.js => devtools/client/framework/test/browser_toolbox_options_disable_js.js
rename : browser/devtools/framework/test/browser_toolbox_options_disable_js_iframe.html => devtools/client/framework/test/browser_toolbox_options_disable_js_iframe.html
rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html
rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js
rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing_frame_script.js => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing_frame_script.js
rename : browser/devtools/framework/test/browser_toolbox_raise.js => devtools/client/framework/test/browser_toolbox_raise.js
rename : browser/devtools/framework/test/browser_toolbox_ready.js => devtools/client/framework/test/browser_toolbox_ready.js
rename : browser/devtools/framework/test/browser_toolbox_select_event.js => devtools/client/framework/test/browser_toolbox_select_event.js
rename : browser/devtools/framework/test/browser_toolbox_selected_tool_unavailable.js => devtools/client/framework/test/browser_toolbox_selected_tool_unavailable.js
rename : browser/devtools/framework/test/browser_toolbox_sidebar.js => devtools/client/framework/test/browser_toolbox_sidebar.js
rename : browser/devtools/framework/test/browser_toolbox_sidebar_events.js => devtools/client/framework/test/browser_toolbox_sidebar_events.js
rename : browser/devtools/framework/test/browser_toolbox_sidebar_existing_tabs.js => devtools/client/framework/test/browser_toolbox_sidebar_existing_tabs.js
rename : browser/devtools/framework/test/browser_toolbox_sidebar_overflow_menu.js => devtools/client/framework/test/browser_toolbox_sidebar_overflow_menu.js
rename : browser/devtools/framework/test/browser_toolbox_sidebar_tool.xul => devtools/client/framework/test/browser_toolbox_sidebar_tool.xul
rename : browser/devtools/framework/test/browser_toolbox_tabsswitch_shortcuts.js => devtools/client/framework/test/browser_toolbox_tabsswitch_shortcuts.js
rename : browser/devtools/framework/test/browser_toolbox_textbox_context_menu.js => devtools/client/framework/test/browser_toolbox_textbox_context_menu.js
rename : browser/devtools/framework/test/browser_toolbox_theme_registration.js => devtools/client/framework/test/browser_toolbox_theme_registration.js
rename : browser/devtools/framework/test/browser_toolbox_toggle.js => devtools/client/framework/test/browser_toolbox_toggle.js
rename : browser/devtools/framework/test/browser_toolbox_tool_ready.js => devtools/client/framework/test/browser_toolbox_tool_ready.js
rename : browser/devtools/framework/test/browser_toolbox_tool_remote_reopen.js => devtools/client/framework/test/browser_toolbox_tool_remote_reopen.js
rename : browser/devtools/framework/test/browser_toolbox_transport_events.js => devtools/client/framework/test/browser_toolbox_transport_events.js
rename : browser/devtools/framework/test/browser_toolbox_view_source_01.js => devtools/client/framework/test/browser_toolbox_view_source_01.js
rename : browser/devtools/framework/test/browser_toolbox_view_source_02.js => devtools/client/framework/test/browser_toolbox_view_source_02.js
rename : browser/devtools/framework/test/browser_toolbox_view_source_03.js => devtools/client/framework/test/browser_toolbox_view_source_03.js
rename : browser/devtools/framework/test/browser_toolbox_view_source_04.js => devtools/client/framework/test/browser_toolbox_view_source_04.js
rename : browser/devtools/framework/test/browser_toolbox_window_reload_target.js => devtools/client/framework/test/browser_toolbox_window_reload_target.js
rename : browser/devtools/framework/test/browser_toolbox_window_shortcuts.js => devtools/client/framework/test/browser_toolbox_window_shortcuts.js
rename : browser/devtools/framework/test/browser_toolbox_window_title_changes.js => devtools/client/framework/test/browser_toolbox_window_title_changes.js
rename : browser/devtools/framework/test/browser_toolbox_zoom.js => devtools/client/framework/test/browser_toolbox_zoom.js
rename : browser/devtools/framework/test/browser_two_tabs.js => devtools/client/framework/test/browser_two_tabs.js
rename : browser/devtools/framework/test/code_math.js => devtools/client/framework/test/code_math.js
rename : browser/devtools/framework/test/doc_theme.css => devtools/client/framework/test/doc_theme.css
rename : browser/devtools/framework/test/doc_viewsource.html => devtools/client/framework/test/doc_viewsource.html
rename : browser/devtools/framework/test/head.js => devtools/client/framework/test/head.js
rename : browser/devtools/framework/test/helper_disable_cache.js => devtools/client/framework/test/helper_disable_cache.js
rename : browser/devtools/framework/test/serviceworker.js => devtools/client/framework/test/serviceworker.js
rename : browser/devtools/framework/test/shared-head.js => devtools/client/framework/test/shared-head.js
rename : browser/devtools/framework/toolbox-highlighter-utils.js => devtools/client/framework/toolbox-highlighter-utils.js
rename : browser/devtools/framework/toolbox-hosts.js => devtools/client/framework/toolbox-hosts.js
rename : browser/devtools/framework/toolbox-options.js => devtools/client/framework/toolbox-options.js
rename : browser/devtools/framework/toolbox-options.xul => devtools/client/framework/toolbox-options.xul
rename : browser/devtools/framework/toolbox-process-window.js => devtools/client/framework/toolbox-process-window.js
rename : browser/devtools/framework/toolbox-process-window.xul => devtools/client/framework/toolbox-process-window.xul
rename : browser/devtools/framework/toolbox-window.xul => devtools/client/framework/toolbox-window.xul
rename : browser/devtools/framework/toolbox.js => devtools/client/framework/toolbox.js
rename : browser/devtools/framework/toolbox.xul => devtools/client/framework/toolbox.xul
rename : browser/devtools/inspector/breadcrumbs.js => devtools/client/inspector/breadcrumbs.js
rename : browser/devtools/inspector/inspector-commands.js => devtools/client/inspector/inspector-commands.js
rename : browser/devtools/inspector/inspector-panel.js => devtools/client/inspector/inspector-panel.js
rename : browser/devtools/inspector/inspector.css => devtools/client/inspector/inspector.css
rename : browser/devtools/inspector/inspector.xul => devtools/client/inspector/inspector.xul
rename : browser/devtools/inspector/moz.build => devtools/client/inspector/moz.build
rename : browser/devtools/inspector/selector-search.js => devtools/client/inspector/selector-search.js
rename : browser/devtools/inspector/test/.eslintrc => devtools/client/inspector/test/.eslintrc
rename : browser/devtools/inspector/test/browser.ini => devtools/client/inspector/test/browser.ini
rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs.js => devtools/client/inspector/test/browser_inspector_breadcrumbs.js
rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_highlight_hover.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_highlight_hover.js
rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_keybinding.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_keybinding.js
rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_menu.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_menu.js
rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_mutations.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_mutations.js
rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-01.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-01.js
rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-02.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-02.js
rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-03.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-03.js
rename : browser/devtools/inspector/test/browser_inspector_destroy-after-navigation.js => devtools/client/inspector/test/browser_inspector_destroy-after-navigation.js
rename : browser/devtools/inspector/test/browser_inspector_destroy-before-ready.js => devtools/client/inspector/test/browser_inspector_destroy-before-ready.js
rename : browser/devtools/inspector/test/browser_inspector_gcli-inspect-command.js => devtools/client/inspector/test/browser_inspector_gcli-inspect-command.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-01.js => devtools/client/inspector/test/browser_inspector_highlighter-01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-02.js => devtools/client/inspector/test/browser_inspector_highlighter-02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-03.js => devtools/client/inspector/test/browser_inspector_highlighter-03.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-04.js => devtools/client/inspector/test/browser_inspector_highlighter-04.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-by-type.js => devtools/client/inspector/test/browser_inspector_highlighter-by-type.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-comments.js => devtools/client/inspector/test/browser_inspector_highlighter-comments.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-csstransform_01.js => devtools/client/inspector/test/browser_inspector_highlighter-csstransform_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-csstransform_02.js => devtools/client/inspector/test/browser_inspector_highlighter-csstransform_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_01.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_02.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_03.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_03.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_04.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_04.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_05.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_05.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_01.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_02.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_03.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_03.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-iframes.js => devtools/client/inspector/test/browser_inspector_highlighter-iframes.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-inline.js => devtools/client/inspector/test/browser_inspector_highlighter-inline.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_01.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_02.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_03.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_03.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_04.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_04.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-options.js => devtools/client/inspector/test/browser_inspector_highlighter-options.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-rect_01.js => devtools/client/inspector/test/browser_inspector_highlighter-rect_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-rect_02.js => devtools/client/inspector/test/browser_inspector_highlighter-rect_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-rulers_01.js => devtools/client/inspector/test/browser_inspector_highlighter-rulers_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-rulers_02.js => devtools/client/inspector/test/browser_inspector_highlighter-rulers_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-selector_01.js => devtools/client/inspector/test/browser_inspector_highlighter-selector_01.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-selector_02.js => devtools/client/inspector/test/browser_inspector_highlighter-selector_02.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-xbl.js => devtools/client/inspector/test/browser_inspector_highlighter-xbl.js
rename : browser/devtools/inspector/test/browser_inspector_highlighter-zoom.js => devtools/client/inspector/test/browser_inspector_highlighter-zoom.js
rename : browser/devtools/inspector/test/browser_inspector_iframe-navigation.js => devtools/client/inspector/test/browser_inspector_iframe-navigation.js
rename : browser/devtools/inspector/test/browser_inspector_infobar_01.js => devtools/client/inspector/test/browser_inspector_infobar_01.js
rename : browser/devtools/inspector/test/browser_inspector_initialization.js => devtools/client/inspector/test/browser_inspector_initialization.js
rename : browser/devtools/inspector/test/browser_inspector_inspect-object-element.js => devtools/client/inspector/test/browser_inspector_inspect-object-element.js
rename : browser/devtools/inspector/test/browser_inspector_invalidate.js => devtools/client/inspector/test/browser_inspector_invalidate.js
rename : browser/devtools/inspector/test/browser_inspector_keyboard-shortcuts-copy-outerhtml.js => devtools/client/inspector/test/browser_inspector_keyboard-shortcuts-copy-outerhtml.js
rename : browser/devtools/inspector/test/browser_inspector_keyboard-shortcuts.js => devtools/client/inspector/test/browser_inspector_keyboard-shortcuts.js
rename : browser/devtools/inspector/test/browser_inspector_menu-01-sensitivity.js => devtools/client/inspector/test/browser_inspector_menu-01-sensitivity.js
rename : browser/devtools/inspector/test/browser_inspector_menu-02-copy-items.js => devtools/client/inspector/test/browser_inspector_menu-02-copy-items.js
rename : browser/devtools/inspector/test/browser_inspector_menu-03-paste-items.js => devtools/client/inspector/test/browser_inspector_menu-03-paste-items.js
rename : browser/devtools/inspector/test/browser_inspector_menu-04-use-in-console.js => devtools/client/inspector/test/browser_inspector_menu-04-use-in-console.js
rename : browser/devtools/inspector/test/browser_inspector_menu-05-other.js => devtools/client/inspector/test/browser_inspector_menu-05-other.js
rename : browser/devtools/inspector/test/browser_inspector_navigation.js => devtools/client/inspector/test/browser_inspector_navigation.js
rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-01.js => devtools/client/inspector/test/browser_inspector_pane-toggle-01.js
rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-02.js => devtools/client/inspector/test/browser_inspector_pane-toggle-02.js
rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-03.js => devtools/client/inspector/test/browser_inspector_pane-toggle-03.js
rename : browser/devtools/inspector/test/browser_inspector_picker-stop-on-destroy.js => devtools/client/inspector/test/browser_inspector_picker-stop-on-destroy.js
rename : browser/devtools/inspector/test/browser_inspector_picker-stop-on-tool-change.js => devtools/client/inspector/test/browser_inspector_picker-stop-on-tool-change.js
rename : browser/devtools/inspector/test/browser_inspector_pseudoclass-lock.js => devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js
rename : browser/devtools/inspector/test/browser_inspector_pseudoclass-menu.js => devtools/client/inspector/test/browser_inspector_pseudoclass-menu.js
rename : browser/devtools/inspector/test/browser_inspector_reload-01.js => devtools/client/inspector/test/browser_inspector_reload-01.js
rename : browser/devtools/inspector/test/browser_inspector_reload-02.js => devtools/client/inspector/test/browser_inspector_reload-02.js
rename : browser/devtools/inspector/test/browser_inspector_remove-iframe-during-load.js => devtools/client/inspector/test/browser_inspector_remove-iframe-during-load.js
rename : browser/devtools/inspector/test/browser_inspector_scrolling.js => devtools/client/inspector/test/browser_inspector_scrolling.js
rename : browser/devtools/inspector/test/browser_inspector_search-01.js => devtools/client/inspector/test/browser_inspector_search-01.js
rename : browser/devtools/inspector/test/browser_inspector_search-02.js => devtools/client/inspector/test/browser_inspector_search-02.js
rename : browser/devtools/inspector/test/browser_inspector_search-03.js => devtools/client/inspector/test/browser_inspector_search-03.js
rename : browser/devtools/inspector/test/browser_inspector_search-04.js => devtools/client/inspector/test/browser_inspector_search-04.js
rename : browser/devtools/inspector/test/browser_inspector_search-05.js => devtools/client/inspector/test/browser_inspector_search-05.js
rename : browser/devtools/inspector/test/browser_inspector_search-06.js => devtools/client/inspector/test/browser_inspector_search-06.js
rename : browser/devtools/inspector/test/browser_inspector_search-navigation.js => devtools/client/inspector/test/browser_inspector_search-navigation.js
rename : browser/devtools/inspector/test/browser_inspector_search-reserved.js => devtools/client/inspector/test/browser_inspector_search-reserved.js
rename : browser/devtools/inspector/test/browser_inspector_search-suggests-ids-and-classes.js => devtools/client/inspector/test/browser_inspector_search-suggests-ids-and-classes.js
rename : browser/devtools/inspector/test/browser_inspector_select-docshell.js => devtools/client/inspector/test/browser_inspector_select-docshell.js
rename : browser/devtools/inspector/test/browser_inspector_select-last-selected.js => devtools/client/inspector/test/browser_inspector_select-last-selected.js
rename : browser/devtools/inspector/test/browser_inspector_sidebarstate.js => devtools/client/inspector/test/browser_inspector_sidebarstate.js
rename : browser/devtools/inspector/test/browser_inspector_switch-to-inspector-on-pick.js => devtools/client/inspector/test/browser_inspector_switch-to-inspector-on-pick.js
rename : browser/devtools/inspector/test/doc_inspector_breadcrumbs.html => devtools/client/inspector/test/doc_inspector_breadcrumbs.html
rename : browser/devtools/inspector/test/doc_inspector_delete-selected-node-01.html => devtools/client/inspector/test/doc_inspector_delete-selected-node-01.html
rename : browser/devtools/inspector/test/doc_inspector_delete-selected-node-02.html => devtools/client/inspector/test/doc_inspector_delete-selected-node-02.html
rename : browser/devtools/inspector/test/doc_inspector_gcli-inspect-command.html => devtools/client/inspector/test/doc_inspector_gcli-inspect-command.html
rename : browser/devtools/inspector/test/doc_inspector_highlight_after_transition.html => devtools/client/inspector/test/doc_inspector_highlight_after_transition.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter-comments.html => devtools/client/inspector/test/doc_inspector_highlighter-comments.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter-geometry_01.html => devtools/client/inspector/test/doc_inspector_highlighter-geometry_01.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter-geometry_02.html => devtools/client/inspector/test/doc_inspector_highlighter-geometry_02.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter.html => devtools/client/inspector/test/doc_inspector_highlighter.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_csstransform.html => devtools/client/inspector/test/doc_inspector_highlighter_csstransform.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_dom.html => devtools/client/inspector/test/doc_inspector_highlighter_dom.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_inline.html => devtools/client/inspector/test/doc_inspector_highlighter_inline.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_rect.html => devtools/client/inspector/test/doc_inspector_highlighter_rect.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_rect_iframe.html => devtools/client/inspector/test/doc_inspector_highlighter_rect_iframe.html
rename : browser/devtools/inspector/test/doc_inspector_highlighter_xbl.xul => devtools/client/inspector/test/doc_inspector_highlighter_xbl.xul
rename : browser/devtools/inspector/test/doc_inspector_infobar.html => devtools/client/inspector/test/doc_inspector_infobar.html
rename : browser/devtools/inspector/test/doc_inspector_infobar_01.html => devtools/client/inspector/test/doc_inspector_infobar_01.html
rename : browser/devtools/inspector/test/doc_inspector_infobar_02.html => devtools/client/inspector/test/doc_inspector_infobar_02.html
rename : browser/devtools/inspector/test/doc_inspector_menu.html => devtools/client/inspector/test/doc_inspector_menu.html
rename : browser/devtools/inspector/test/doc_inspector_outerhtml.html => devtools/client/inspector/test/doc_inspector_outerhtml.html
rename : browser/devtools/inspector/test/doc_inspector_remove-iframe-during-load.html => devtools/client/inspector/test/doc_inspector_remove-iframe-during-load.html
rename : browser/devtools/inspector/test/doc_inspector_search-reserved.html => devtools/client/inspector/test/doc_inspector_search-reserved.html
rename : browser/devtools/inspector/test/doc_inspector_search-suggestions.html => devtools/client/inspector/test/doc_inspector_search-suggestions.html
rename : browser/devtools/inspector/test/doc_inspector_search.html => devtools/client/inspector/test/doc_inspector_search.html
rename : browser/devtools/inspector/test/doc_inspector_select-last-selected-01.html => devtools/client/inspector/test/doc_inspector_select-last-selected-01.html
rename : browser/devtools/inspector/test/doc_inspector_select-last-selected-02.html => devtools/client/inspector/test/doc_inspector_select-last-selected-02.html
rename : browser/devtools/inspector/test/head.js => devtools/client/inspector/test/head.js
rename : browser/devtools/jar.mn => devtools/client/jar.mn
rename : browser/devtools/layoutview/moz.build => devtools/client/layoutview/moz.build
rename : browser/devtools/layoutview/test/.eslintrc => devtools/client/layoutview/test/.eslintrc
rename : browser/devtools/layoutview/test/browser.ini => devtools/client/layoutview/test/browser.ini
rename : browser/devtools/layoutview/test/browser_layoutview.js => devtools/client/layoutview/test/browser_layoutview.js
rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel.js => devtools/client/layoutview/test/browser_layoutview_editablemodel.js
rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_allproperties.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_allproperties.js
rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_border.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_border.js
rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_stylerules.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_stylerules.js
rename : browser/devtools/layoutview/test/browser_layoutview_guides.js => devtools/client/layoutview/test/browser_layoutview_guides.js
rename : browser/devtools/layoutview/test/browser_layoutview_rotate-labels-on-sides.js => devtools/client/layoutview/test/browser_layoutview_rotate-labels-on-sides.js
rename : browser/devtools/layoutview/test/browser_layoutview_tooltips.js => devtools/client/layoutview/test/browser_layoutview_tooltips.js
rename : browser/devtools/layoutview/test/browser_layoutview_update-after-navigation.js => devtools/client/layoutview/test/browser_layoutview_update-after-navigation.js
rename : browser/devtools/layoutview/test/browser_layoutview_update-after-reload.js => devtools/client/layoutview/test/browser_layoutview_update-after-reload.js
rename : browser/devtools/layoutview/test/browser_layoutview_update-in-iframes.js => devtools/client/layoutview/test/browser_layoutview_update-in-iframes.js
rename : browser/devtools/layoutview/test/doc_layoutview_iframe1.html => devtools/client/layoutview/test/doc_layoutview_iframe1.html
rename : browser/devtools/layoutview/test/doc_layoutview_iframe2.html => devtools/client/layoutview/test/doc_layoutview_iframe2.html
rename : browser/devtools/layoutview/test/head.js => devtools/client/layoutview/test/head.js
rename : browser/devtools/layoutview/view.js => devtools/client/layoutview/view.js
rename : browser/devtools/layoutview/view.xhtml => devtools/client/layoutview/view.xhtml
rename : browser/devtools/main.js => devtools/client/main.js
rename : browser/devtools/markupview/html-editor.js => devtools/client/markupview/html-editor.js
rename : browser/devtools/markupview/markup-view.css => devtools/client/markupview/markup-view.css
rename : browser/devtools/markupview/markup-view.js => devtools/client/markupview/markup-view.js
rename : browser/devtools/markupview/markup-view.xhtml => devtools/client/markupview/markup-view.xhtml
rename : browser/devtools/markupview/moz.build => devtools/client/markupview/moz.build
rename : browser/devtools/markupview/test/.eslintrc => devtools/client/markupview/test/.eslintrc
rename : browser/devtools/markupview/test/actor_events_form.js => devtools/client/markupview/test/actor_events_form.js
rename : browser/devtools/markupview/test/browser.ini => devtools/client/markupview/test/browser.ini
rename : browser/devtools/markupview/test/browser_markupview_anonymous_01.js => devtools/client/markupview/test/browser_markupview_anonymous_01.js
rename : browser/devtools/markupview/test/browser_markupview_anonymous_02.js => devtools/client/markupview/test/browser_markupview_anonymous_02.js
rename : browser/devtools/markupview/test/browser_markupview_anonymous_03.js => devtools/client/markupview/test/browser_markupview_anonymous_03.js
rename : browser/devtools/markupview/test/browser_markupview_anonymous_04.js => devtools/client/markupview/test/browser_markupview_anonymous_04.js
rename : browser/devtools/markupview/test/browser_markupview_copy_image_data.js => devtools/client/markupview/test/browser_markupview_copy_image_data.js
rename : browser/devtools/markupview/test/browser_markupview_css_completion_style_attribute.js => devtools/client/markupview/test/browser_markupview_css_completion_style_attribute.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_autoscroll.js => devtools/client/markupview/test/browser_markupview_dragdrop_autoscroll.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_dragRootNode.js => devtools/client/markupview/test/browser_markupview_dragdrop_dragRootNode.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_escapeKeyPress.js => devtools/client/markupview/test/browser_markupview_dragdrop_escapeKeyPress.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_invalidNodes.js => devtools/client/markupview/test/browser_markupview_dragdrop_invalidNodes.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_isDragging.js => devtools/client/markupview/test/browser_markupview_dragdrop_isDragging.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_reorder.js => devtools/client/markupview/test/browser_markupview_dragdrop_reorder.js
rename : browser/devtools/markupview/test/browser_markupview_dragdrop_textSelection.js => devtools/client/markupview/test/browser_markupview_dragdrop_textSelection.js
rename : browser/devtools/markupview/test/browser_markupview_events-overflow.js => devtools/client/markupview/test/browser_markupview_events-overflow.js
rename : browser/devtools/markupview/test/browser_markupview_events.js => devtools/client/markupview/test/browser_markupview_events.js
rename : browser/devtools/markupview/test/browser_markupview_events_form.js => devtools/client/markupview/test/browser_markupview_events_form.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.0.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.0.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.1.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.11.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.11.1.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.2.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.2.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.3.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.3.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.4.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.4.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.6.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.6.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.7.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.7.js
rename : browser/devtools/markupview/test/browser_markupview_events_jquery_2.1.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_2.1.1.js
rename : browser/devtools/markupview/test/browser_markupview_html_edit_01.js => devtools/client/markupview/test/browser_markupview_html_edit_01.js
rename : browser/devtools/markupview/test/browser_markupview_html_edit_02.js => devtools/client/markupview/test/browser_markupview_html_edit_02.js
rename : browser/devtools/markupview/test/browser_markupview_html_edit_03.js => devtools/client/markupview/test/browser_markupview_html_edit_03.js
rename : browser/devtools/markupview/test/browser_markupview_image_tooltip.js => devtools/client/markupview/test/browser_markupview_image_tooltip.js
rename : browser/devtools/markupview/test/browser_markupview_image_tooltip_mutations.js => devtools/client/markupview/test/browser_markupview_image_tooltip_mutations.js
rename : browser/devtools/markupview/test/browser_markupview_keybindings_01.js => devtools/client/markupview/test/browser_markupview_keybindings_01.js
rename : browser/devtools/markupview/test/browser_markupview_keybindings_02.js => devtools/client/markupview/test/browser_markupview_keybindings_02.js
rename : browser/devtools/markupview/test/browser_markupview_keybindings_03.js => devtools/client/markupview/test/browser_markupview_keybindings_03.js
rename : browser/devtools/markupview/test/browser_markupview_keybindings_04.js => devtools/client/markupview/test/browser_markupview_keybindings_04.js
rename : browser/devtools/markupview/test/browser_markupview_links_01.js => devtools/client/markupview/test/browser_markupview_links_01.js
rename : browser/devtools/markupview/test/browser_markupview_links_02.js => devtools/client/markupview/test/browser_markupview_links_02.js
rename : browser/devtools/markupview/test/browser_markupview_links_03.js => devtools/client/markupview/test/browser_markupview_links_03.js
rename : browser/devtools/markupview/test/browser_markupview_links_04.js => devtools/client/markupview/test/browser_markupview_links_04.js
rename : browser/devtools/markupview/test/browser_markupview_links_05.js => devtools/client/markupview/test/browser_markupview_links_05.js
rename : browser/devtools/markupview/test/browser_markupview_links_06.js => devtools/client/markupview/test/browser_markupview_links_06.js
rename : browser/devtools/markupview/test/browser_markupview_links_07.js => devtools/client/markupview/test/browser_markupview_links_07.js
rename : browser/devtools/markupview/test/browser_markupview_load_01.js => devtools/client/markupview/test/browser_markupview_load_01.js
rename : browser/devtools/markupview/test/browser_markupview_mutation_01.js => devtools/client/markupview/test/browser_markupview_mutation_01.js
rename : browser/devtools/markupview/test/browser_markupview_mutation_02.js => devtools/client/markupview/test/browser_markupview_mutation_02.js
rename : browser/devtools/markupview/test/browser_markupview_navigation.js => devtools/client/markupview/test/browser_markupview_navigation.js
rename : browser/devtools/markupview/test/browser_markupview_node_not_displayed_01.js => devtools/client/markupview/test/browser_markupview_node_not_displayed_01.js
rename : browser/devtools/markupview/test/browser_markupview_node_not_displayed_02.js => devtools/client/markupview/test/browser_markupview_node_not_displayed_02.js
rename : browser/devtools/markupview/test/browser_markupview_pagesize_01.js => devtools/client/markupview/test/browser_markupview_pagesize_01.js
rename : browser/devtools/markupview/test/browser_markupview_pagesize_02.js => devtools/client/markupview/test/browser_markupview_pagesize_02.js
rename : browser/devtools/markupview/test/browser_markupview_remove_xul_attributes.js => devtools/client/markupview/test/browser_markupview_remove_xul_attributes.js
rename : browser/devtools/markupview/test/browser_markupview_search_01.js => devtools/client/markupview/test/browser_markupview_search_01.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_01.js => devtools/client/markupview/test/browser_markupview_tag_edit_01.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_02.js => devtools/client/markupview/test/browser_markupview_tag_edit_02.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_03.js => devtools/client/markupview/test/browser_markupview_tag_edit_03.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_04.js => devtools/client/markupview/test/browser_markupview_tag_edit_04.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_05.js => devtools/client/markupview/test/browser_markupview_tag_edit_05.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_06.js => devtools/client/markupview/test/browser_markupview_tag_edit_06.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_07.js => devtools/client/markupview/test/browser_markupview_tag_edit_07.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_08.js => devtools/client/markupview/test/browser_markupview_tag_edit_08.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_09.js => devtools/client/markupview/test/browser_markupview_tag_edit_09.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_10.js => devtools/client/markupview/test/browser_markupview_tag_edit_10.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_11.js => devtools/client/markupview/test/browser_markupview_tag_edit_11.js
rename : browser/devtools/markupview/test/browser_markupview_tag_edit_12.js => devtools/client/markupview/test/browser_markupview_tag_edit_12.js
rename : browser/devtools/markupview/test/browser_markupview_textcontent_edit_01.js => devtools/client/markupview/test/browser_markupview_textcontent_edit_01.js
rename : browser/devtools/markupview/test/browser_markupview_toggle_01.js => devtools/client/markupview/test/browser_markupview_toggle_01.js
rename : browser/devtools/markupview/test/browser_markupview_toggle_02.js => devtools/client/markupview/test/browser_markupview_toggle_02.js
rename : browser/devtools/markupview/test/browser_markupview_toggle_03.js => devtools/client/markupview/test/browser_markupview_toggle_03.js
rename : browser/devtools/markupview/test/browser_markupview_update-on-navigtion.js => devtools/client/markupview/test/browser_markupview_update-on-navigtion.js
rename : browser/devtools/markupview/test/doc_markup_anonymous.html => devtools/client/markupview/test/doc_markup_anonymous.html
rename : browser/devtools/markupview/test/doc_markup_dragdrop.html => devtools/client/markupview/test/doc_markup_dragdrop.html
rename : browser/devtools/markupview/test/doc_markup_dragdrop_autoscroll.html => devtools/client/markupview/test/doc_markup_dragdrop_autoscroll.html
rename : browser/devtools/markupview/test/doc_markup_edit.html => devtools/client/markupview/test/doc_markup_edit.html
rename : browser/devtools/markupview/test/doc_markup_events-overflow.html => devtools/client/markupview/test/doc_markup_events-overflow.html
rename : browser/devtools/markupview/test/doc_markup_events.html => devtools/client/markupview/test/doc_markup_events.html
rename : browser/devtools/markupview/test/doc_markup_events_form.html => devtools/client/markupview/test/doc_markup_events_form.html
rename : browser/devtools/markupview/test/doc_markup_events_jquery.html => devtools/client/markupview/test/doc_markup_events_jquery.html
rename : browser/devtools/markupview/test/doc_markup_flashing.html => devtools/client/markupview/test/doc_markup_flashing.html
rename : browser/devtools/markupview/test/doc_markup_links.html => devtools/client/markupview/test/doc_markup_links.html
rename : browser/devtools/markupview/test/doc_markup_mutation.html => devtools/client/markupview/test/doc_markup_mutation.html
rename : browser/devtools/markupview/test/doc_markup_navigation.html => devtools/client/markupview/test/doc_markup_navigation.html
rename : browser/devtools/markupview/test/doc_markup_not_displayed.html => devtools/client/markupview/test/doc_markup_not_displayed.html
rename : browser/devtools/markupview/test/doc_markup_pagesize_01.html => devtools/client/markupview/test/doc_markup_pagesize_01.html
rename : browser/devtools/markupview/test/doc_markup_pagesize_02.html => devtools/client/markupview/test/doc_markup_pagesize_02.html
rename : browser/devtools/markupview/test/doc_markup_search.html => devtools/client/markupview/test/doc_markup_search.html
rename : browser/devtools/markupview/test/doc_markup_svg_attributes.html => devtools/client/markupview/test/doc_markup_svg_attributes.html
rename : browser/devtools/markupview/test/doc_markup_toggle.html => devtools/client/markupview/test/doc_markup_toggle.html
rename : browser/devtools/markupview/test/doc_markup_tooltip.png => devtools/client/markupview/test/doc_markup_tooltip.png
rename : browser/devtools/markupview/test/doc_markup_xul.xul => devtools/client/markupview/test/doc_markup_xul.xul
rename : browser/devtools/markupview/test/frame-script-utils.js => devtools/client/markupview/test/frame-script-utils.js
rename : browser/devtools/markupview/test/head.js => devtools/client/markupview/test/head.js
rename : browser/devtools/markupview/test/helper_attributes_test_runner.js => devtools/client/markupview/test/helper_attributes_test_runner.js
rename : browser/devtools/markupview/test/helper_events_test_runner.js => devtools/client/markupview/test/helper_events_test_runner.js
rename : browser/devtools/markupview/test/helper_outerhtml_test_runner.js => devtools/client/markupview/test/helper_outerhtml_test_runner.js
rename : browser/devtools/markupview/test/lib_jquery_1.0.js => devtools/client/markupview/test/lib_jquery_1.0.js
rename : browser/devtools/markupview/test/lib_jquery_1.1.js => devtools/client/markupview/test/lib_jquery_1.1.js
rename : browser/devtools/markupview/test/lib_jquery_1.11.1_min.js => devtools/client/markupview/test/lib_jquery_1.11.1_min.js
rename : browser/devtools/markupview/test/lib_jquery_1.2_min.js => devtools/client/markupview/test/lib_jquery_1.2_min.js
rename : browser/devtools/markupview/test/lib_jquery_1.3_min.js => devtools/client/markupview/test/lib_jquery_1.3_min.js
rename : browser/devtools/markupview/test/lib_jquery_1.4_min.js => devtools/client/markupview/test/lib_jquery_1.4_min.js
rename : browser/devtools/markupview/test/lib_jquery_1.6_min.js => devtools/client/markupview/test/lib_jquery_1.6_min.js
rename : browser/devtools/markupview/test/lib_jquery_1.7_min.js => devtools/client/markupview/test/lib_jquery_1.7_min.js
rename : browser/devtools/markupview/test/lib_jquery_2.1.1_min.js => devtools/client/markupview/test/lib_jquery_2.1.1_min.js
rename : browser/devtools/memory/controller.js => devtools/client/memory/controller.js
rename : browser/devtools/memory/memory.xhtml => devtools/client/memory/memory.xhtml
rename : browser/devtools/memory/modules/census-view.js => devtools/client/memory/modules/census-view.js
rename : browser/devtools/memory/moz.build => devtools/client/memory/moz.build
rename : browser/devtools/memory/panel.js => devtools/client/memory/panel.js
rename : browser/devtools/memory/test/mochitest/chrome.ini => devtools/client/memory/test/mochitest/chrome.ini
rename : browser/devtools/memory/test/mochitest/head.js => devtools/client/memory/test/mochitest/head.js
rename : browser/devtools/memory/test/mochitest/test_census-view-01.html => devtools/client/memory/test/mochitest/test_census-view-01.html
rename : browser/devtools/moz.build => devtools/client/moz.build
rename : browser/devtools/netmonitor/har/har-automation.js => devtools/client/netmonitor/har/har-automation.js
rename : browser/devtools/netmonitor/har/har-builder.js => devtools/client/netmonitor/har/har-builder.js
rename : browser/devtools/netmonitor/har/har-collector.js => devtools/client/netmonitor/har/har-collector.js
rename : browser/devtools/netmonitor/har/har-exporter.js => devtools/client/netmonitor/har/har-exporter.js
rename : browser/devtools/netmonitor/har/har-utils.js => devtools/client/netmonitor/har/har-utils.js
rename : browser/devtools/netmonitor/har/moz.build => devtools/client/netmonitor/har/moz.build
rename : browser/devtools/netmonitor/har/test/browser.ini => devtools/client/netmonitor/har/test/browser.ini
rename : browser/devtools/netmonitor/har/test/browser_net_har_copy_all_as_har.js => devtools/client/netmonitor/har/test/browser_net_har_copy_all_as_har.js
rename : browser/devtools/netmonitor/har/test/browser_net_har_post_data.js => devtools/client/netmonitor/har/test/browser_net_har_post_data.js
rename : browser/devtools/netmonitor/har/test/head.js => devtools/client/netmonitor/har/test/head.js
rename : browser/devtools/netmonitor/har/test/html_har_post-data-test-page.html => devtools/client/netmonitor/har/test/html_har_post-data-test-page.html
rename : browser/devtools/netmonitor/har/toolbox-overlay.js => devtools/client/netmonitor/har/toolbox-overlay.js
rename : browser/devtools/netmonitor/moz.build => devtools/client/netmonitor/moz.build
rename : browser/devtools/netmonitor/netmonitor-controller.js => devtools/client/netmonitor/netmonitor-controller.js
rename : browser/devtools/netmonitor/netmonitor-view.js => devtools/client/netmonitor/netmonitor-view.js
rename : browser/devtools/netmonitor/netmonitor.css => devtools/client/netmonitor/netmonitor.css
rename : browser/devtools/netmonitor/netmonitor.xul => devtools/client/netmonitor/netmonitor.xul
rename : browser/devtools/netmonitor/panel.js => devtools/client/netmonitor/panel.js
rename : browser/devtools/netmonitor/test/.eslintrc => devtools/client/netmonitor/test/.eslintrc
rename : browser/devtools/netmonitor/test/browser.ini => devtools/client/netmonitor/test/browser.ini
rename : browser/devtools/netmonitor/test/browser_net_aaa_leaktest.js => devtools/client/netmonitor/test/browser_net_aaa_leaktest.js
rename : browser/devtools/netmonitor/test/browser_net_accessibility-01.js => devtools/client/netmonitor/test/browser_net_accessibility-01.js
rename : browser/devtools/netmonitor/test/browser_net_accessibility-02.js => devtools/client/netmonitor/test/browser_net_accessibility-02.js
rename : browser/devtools/netmonitor/test/browser_net_api-calls.js => devtools/client/netmonitor/test/browser_net_api-calls.js
rename : browser/devtools/netmonitor/test/browser_net_autoscroll.js => devtools/client/netmonitor/test/browser_net_autoscroll.js
rename : browser/devtools/netmonitor/test/browser_net_cached-status.js => devtools/client/netmonitor/test/browser_net_cached-status.js
rename : browser/devtools/netmonitor/test/browser_net_charts-01.js => devtools/client/netmonitor/test/browser_net_charts-01.js
rename : browser/devtools/netmonitor/test/browser_net_charts-02.js => devtools/client/netmonitor/test/browser_net_charts-02.js
rename : browser/devtools/netmonitor/test/browser_net_charts-03.js => devtools/client/netmonitor/test/browser_net_charts-03.js
rename : browser/devtools/netmonitor/test/browser_net_charts-04.js => devtools/client/netmonitor/test/browser_net_charts-04.js
rename : browser/devtools/netmonitor/test/browser_net_charts-05.js => devtools/client/netmonitor/test/browser_net_charts-05.js
rename : browser/devtools/netmonitor/test/browser_net_charts-06.js => devtools/client/netmonitor/test/browser_net_charts-06.js
rename : browser/devtools/netmonitor/test/browser_net_charts-07.js => devtools/client/netmonitor/test/browser_net_charts-07.js
rename : browser/devtools/netmonitor/test/browser_net_clear.js => devtools/client/netmonitor/test/browser_net_clear.js
rename : browser/devtools/netmonitor/test/browser_net_complex-params.js => devtools/client/netmonitor/test/browser_net_complex-params.js
rename : browser/devtools/netmonitor/test/browser_net_content-type.js => devtools/client/netmonitor/test/browser_net_content-type.js
rename : browser/devtools/netmonitor/test/browser_net_copy_as_curl.js => devtools/client/netmonitor/test/browser_net_copy_as_curl.js
rename : browser/devtools/netmonitor/test/browser_net_copy_headers.js => devtools/client/netmonitor/test/browser_net_copy_headers.js
rename : browser/devtools/netmonitor/test/browser_net_copy_image_as_data_uri.js => devtools/client/netmonitor/test/browser_net_copy_image_as_data_uri.js
rename : browser/devtools/netmonitor/test/browser_net_copy_params.js => devtools/client/netmonitor/test/browser_net_copy_params.js
rename : browser/devtools/netmonitor/test/browser_net_copy_response.js => devtools/client/netmonitor/test/browser_net_copy_response.js
rename : browser/devtools/netmonitor/test/browser_net_copy_url.js => devtools/client/netmonitor/test/browser_net_copy_url.js
rename : browser/devtools/netmonitor/test/browser_net_curl-utils.js => devtools/client/netmonitor/test/browser_net_curl-utils.js
rename : browser/devtools/netmonitor/test/browser_net_cyrillic-01.js => devtools/client/netmonitor/test/browser_net_cyrillic-01.js
rename : browser/devtools/netmonitor/test/browser_net_cyrillic-02.js => devtools/client/netmonitor/test/browser_net_cyrillic-02.js
rename : browser/devtools/netmonitor/test/browser_net_details-no-duplicated-content.js => devtools/client/netmonitor/test/browser_net_details-no-duplicated-content.js
rename : browser/devtools/netmonitor/test/browser_net_filter-01.js => devtools/client/netmonitor/test/browser_net_filter-01.js
rename : browser/devtools/netmonitor/test/browser_net_filter-02.js => devtools/client/netmonitor/test/browser_net_filter-02.js
rename : browser/devtools/netmonitor/test/browser_net_filter-03.js => devtools/client/netmonitor/test/browser_net_filter-03.js
rename : browser/devtools/netmonitor/test/browser_net_filter-04.js => devtools/client/netmonitor/test/browser_net_filter-04.js
rename : browser/devtools/netmonitor/test/browser_net_footer-summary.js => devtools/client/netmonitor/test/browser_net_footer-summary.js
rename : browser/devtools/netmonitor/test/browser_net_html-preview.js => devtools/client/netmonitor/test/browser_net_html-preview.js
rename : browser/devtools/netmonitor/test/browser_net_icon-preview.js => devtools/client/netmonitor/test/browser_net_icon-preview.js
rename : browser/devtools/netmonitor/test/browser_net_image-tooltip.js => devtools/client/netmonitor/test/browser_net_image-tooltip.js
rename : browser/devtools/netmonitor/test/browser_net_json-long.js => devtools/client/netmonitor/test/browser_net_json-long.js
rename : browser/devtools/netmonitor/test/browser_net_json-malformed.js => devtools/client/netmonitor/test/browser_net_json-malformed.js
rename : browser/devtools/netmonitor/test/browser_net_json_custom_mime.js => devtools/client/netmonitor/test/browser_net_json_custom_mime.js
rename : browser/devtools/netmonitor/test/browser_net_json_text_mime.js => devtools/client/netmonitor/test/browser_net_json_text_mime.js
rename : browser/devtools/netmonitor/test/browser_net_jsonp.js => devtools/client/netmonitor/test/browser_net_jsonp.js
rename : browser/devtools/netmonitor/test/browser_net_large-response.js => devtools/client/netmonitor/test/browser_net_large-response.js
rename : browser/devtools/netmonitor/test/browser_net_open_request_in_tab.js => devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
rename : browser/devtools/netmonitor/test/browser_net_page-nav.js => devtools/client/netmonitor/test/browser_net_page-nav.js
rename : browser/devtools/netmonitor/test/browser_net_pane-collapse.js => devtools/client/netmonitor/test/browser_net_pane-collapse.js
rename : browser/devtools/netmonitor/test/browser_net_pane-toggle.js => devtools/client/netmonitor/test/browser_net_pane-toggle.js
rename : browser/devtools/netmonitor/test/browser_net_persistent_logs.js => devtools/client/netmonitor/test/browser_net_persistent_logs.js
rename : browser/devtools/netmonitor/test/browser_net_post-data-01.js => devtools/client/netmonitor/test/browser_net_post-data-01.js
rename : browser/devtools/netmonitor/test/browser_net_post-data-02.js => devtools/client/netmonitor/test/browser_net_post-data-02.js
rename : browser/devtools/netmonitor/test/browser_net_post-data-03.js => devtools/client/netmonitor/test/browser_net_post-data-03.js
rename : browser/devtools/netmonitor/test/browser_net_prefs-and-l10n.js => devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
rename : browser/devtools/netmonitor/test/browser_net_prefs-reload.js => devtools/client/netmonitor/test/browser_net_prefs-reload.js
rename : browser/devtools/netmonitor/test/browser_net_raw_headers.js => devtools/client/netmonitor/test/browser_net_raw_headers.js
rename : browser/devtools/netmonitor/test/browser_net_reload-button.js => devtools/client/netmonitor/test/browser_net_reload-button.js
rename : browser/devtools/netmonitor/test/browser_net_req-resp-bodies.js => devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
rename : browser/devtools/netmonitor/test/browser_net_resend.js => devtools/client/netmonitor/test/browser_net_resend.js
rename : browser/devtools/netmonitor/test/browser_net_security-details.js => devtools/client/netmonitor/test/browser_net_security-details.js
rename : browser/devtools/netmonitor/test/browser_net_security-error.js => devtools/client/netmonitor/test/browser_net_security-error.js
rename : browser/devtools/netmonitor/test/browser_net_security-icon-click.js => devtools/client/netmonitor/test/browser_net_security-icon-click.js
rename : browser/devtools/netmonitor/test/browser_net_security-redirect.js => devtools/client/netmonitor/test/browser_net_security-redirect.js
rename : browser/devtools/netmonitor/test/browser_net_security-state.js => devtools/client/netmonitor/test/browser_net_security-state.js
rename : browser/devtools/netmonitor/test/browser_net_security-tab-deselect.js => devtools/client/netmonitor/test/browser_net_security-tab-deselect.js
rename : browser/devtools/netmonitor/test/browser_net_security-tab-visibility.js => devtools/client/netmonitor/test/browser_net_security-tab-visibility.js
rename : browser/devtools/netmonitor/test/browser_net_security-warnings.js => devtools/client/netmonitor/test/browser_net_security-warnings.js
rename : browser/devtools/netmonitor/test/browser_net_send-beacon-other-tab.js => devtools/client/netmonitor/test/browser_net_send-beacon-other-tab.js
rename : browser/devtools/netmonitor/test/browser_net_send-beacon.js => devtools/client/netmonitor/test/browser_net_send-beacon.js
rename : browser/devtools/netmonitor/test/browser_net_simple-init.js => devtools/client/netmonitor/test/browser_net_simple-init.js
rename : browser/devtools/netmonitor/test/browser_net_simple-request-data.js => devtools/client/netmonitor/test/browser_net_simple-request-data.js
rename : browser/devtools/netmonitor/test/browser_net_simple-request-details.js => devtools/client/netmonitor/test/browser_net_simple-request-details.js
rename : browser/devtools/netmonitor/test/browser_net_simple-request.js => devtools/client/netmonitor/test/browser_net_simple-request.js
rename : browser/devtools/netmonitor/test/browser_net_sort-01.js => devtools/client/netmonitor/test/browser_net_sort-01.js
rename : browser/devtools/netmonitor/test/browser_net_sort-02.js => devtools/client/netmonitor/test/browser_net_sort-02.js
rename : browser/devtools/netmonitor/test/browser_net_sort-03.js => devtools/client/netmonitor/test/browser_net_sort-03.js
rename : browser/devtools/netmonitor/test/browser_net_statistics-01.js => devtools/client/netmonitor/test/browser_net_statistics-01.js
rename : browser/devtools/netmonitor/test/browser_net_statistics-02.js => devtools/client/netmonitor/test/browser_net_statistics-02.js
rename : browser/devtools/netmonitor/test/browser_net_statistics-03.js => devtools/client/netmonitor/test/browser_net_statistics-03.js
rename : browser/devtools/netmonitor/test/browser_net_status-codes.js => devtools/client/netmonitor/test/browser_net_status-codes.js
rename : browser/devtools/netmonitor/test/browser_net_timeline_ticks.js => devtools/client/netmonitor/test/browser_net_timeline_ticks.js
rename : browser/devtools/netmonitor/test/browser_net_timing-division.js => devtools/client/netmonitor/test/browser_net_timing-division.js
rename : browser/devtools/netmonitor/test/head.js => devtools/client/netmonitor/test/head.js
rename : browser/devtools/netmonitor/test/html_api-calls-test-page.html => devtools/client/netmonitor/test/html_api-calls-test-page.html
rename : browser/devtools/netmonitor/test/html_content-type-test-page.html => devtools/client/netmonitor/test/html_content-type-test-page.html
rename : browser/devtools/netmonitor/test/html_content-type-without-cache-test-page.html => devtools/client/netmonitor/test/html_content-type-without-cache-test-page.html
rename : browser/devtools/netmonitor/test/html_copy-as-curl.html => devtools/client/netmonitor/test/html_copy-as-curl.html
rename : browser/devtools/netmonitor/test/html_curl-utils.html => devtools/client/netmonitor/test/html_curl-utils.html
rename : browser/devtools/netmonitor/test/html_custom-get-page.html => devtools/client/netmonitor/test/html_custom-get-page.html
rename : browser/devtools/netmonitor/test/html_cyrillic-test-page.html => devtools/client/netmonitor/test/html_cyrillic-test-page.html
rename : browser/devtools/netmonitor/test/html_filter-test-page.html => devtools/client/netmonitor/test/html_filter-test-page.html
rename : browser/devtools/netmonitor/test/html_har_post-data-test-page.html => devtools/client/netmonitor/test/html_har_post-data-test-page.html
rename : browser/devtools/netmonitor/test/html_infinite-get-page.html => devtools/client/netmonitor/test/html_infinite-get-page.html
rename : browser/devtools/netmonitor/test/html_json-custom-mime-test-page.html => devtools/client/netmonitor/test/html_json-custom-mime-test-page.html
rename : browser/devtools/netmonitor/test/html_json-long-test-page.html => devtools/client/netmonitor/test/html_json-long-test-page.html
rename : browser/devtools/netmonitor/test/html_json-malformed-test-page.html => devtools/client/netmonitor/test/html_json-malformed-test-page.html
rename : browser/devtools/netmonitor/test/html_json-text-mime-test-page.html => devtools/client/netmonitor/test/html_json-text-mime-test-page.html
rename : browser/devtools/netmonitor/test/html_jsonp-test-page.html => devtools/client/netmonitor/test/html_jsonp-test-page.html
rename : browser/devtools/netmonitor/test/html_navigate-test-page.html => devtools/client/netmonitor/test/html_navigate-test-page.html
rename : browser/devtools/netmonitor/test/html_params-test-page.html => devtools/client/netmonitor/test/html_params-test-page.html
rename : browser/devtools/netmonitor/test/html_post-data-test-page.html => devtools/client/netmonitor/test/html_post-data-test-page.html
rename : browser/devtools/netmonitor/test/html_post-raw-test-page.html => devtools/client/netmonitor/test/html_post-raw-test-page.html
rename : browser/devtools/netmonitor/test/html_post-raw-with-headers-test-page.html => devtools/client/netmonitor/test/html_post-raw-with-headers-test-page.html
rename : browser/devtools/netmonitor/test/html_send-beacon.html => devtools/client/netmonitor/test/html_send-beacon.html
rename : browser/devtools/netmonitor/test/html_simple-test-page.html => devtools/client/netmonitor/test/html_simple-test-page.html
rename : browser/devtools/netmonitor/test/html_single-get-page.html => devtools/client/netmonitor/test/html_single-get-page.html
rename : browser/devtools/netmonitor/test/html_sorting-test-page.html => devtools/client/netmonitor/test/html_sorting-test-page.html
rename : browser/devtools/netmonitor/test/html_statistics-test-page.html => devtools/client/netmonitor/test/html_statistics-test-page.html
rename : browser/devtools/netmonitor/test/html_status-codes-test-page.html => devtools/client/netmonitor/test/html_status-codes-test-page.html
rename : browser/devtools/netmonitor/test/sjs_content-type-test-server.sjs => devtools/client/netmonitor/test/sjs_content-type-test-server.sjs
rename : browser/devtools/netmonitor/test/sjs_cors-test-server.sjs => devtools/client/netmonitor/test/sjs_cors-test-server.sjs
rename : browser/devtools/netmonitor/test/sjs_https-redirect-test-server.sjs => devtools/client/netmonitor/test/sjs_https-redirect-test-server.sjs
rename : browser/devtools/netmonitor/test/sjs_simple-test-server.sjs => devtools/client/netmonitor/test/sjs_simple-test-server.sjs
rename : browser/devtools/netmonitor/test/sjs_sorting-test-server.sjs => devtools/client/netmonitor/test/sjs_sorting-test-server.sjs
rename : browser/devtools/netmonitor/test/sjs_status-codes-test-server.sjs => devtools/client/netmonitor/test/sjs_status-codes-test-server.sjs
rename : browser/devtools/netmonitor/test/test-image.png => devtools/client/netmonitor/test/test-image.png
rename : browser/devtools/performance/docs/markers.md => devtools/client/performance/docs/markers.md
rename : browser/devtools/performance/events.js => devtools/client/performance/events.js
rename : browser/devtools/performance/modules/global.js => devtools/client/performance/modules/global.js
rename : browser/devtools/performance/modules/logic/frame-utils.js => devtools/client/performance/modules/logic/frame-utils.js
rename : browser/devtools/performance/modules/logic/jit.js => devtools/client/performance/modules/logic/jit.js
rename : browser/devtools/performance/modules/logic/marker-utils.js => devtools/client/performance/modules/logic/marker-utils.js
rename : browser/devtools/performance/modules/logic/telemetry.js => devtools/client/performance/modules/logic/telemetry.js
rename : browser/devtools/performance/modules/logic/tree-model.js => devtools/client/performance/modules/logic/tree-model.js
rename : browser/devtools/performance/modules/logic/waterfall-utils.js => devtools/client/performance/modules/logic/waterfall-utils.js
rename : browser/devtools/performance/modules/markers.js => devtools/client/performance/modules/markers.js
rename : browser/devtools/performance/modules/widgets/graphs.js => devtools/client/performance/modules/widgets/graphs.js
rename : browser/devtools/performance/modules/widgets/marker-details.js => devtools/client/performance/modules/widgets/marker-details.js
rename : browser/devtools/performance/modules/widgets/marker-view.js => devtools/client/performance/modules/widgets/marker-view.js
rename : browser/devtools/performance/modules/widgets/markers-overview.js => devtools/client/performance/modules/widgets/markers-overview.js
rename : browser/devtools/performance/modules/widgets/tree-view.js => devtools/client/performance/modules/widgets/tree-view.js
rename : browser/devtools/performance/modules/widgets/waterfall-ticks.js => devtools/client/performance/modules/widgets/waterfall-ticks.js
rename : browser/devtools/performance/moz.build => devtools/client/performance/moz.build
rename : browser/devtools/performance/panel.js => devtools/client/performance/panel.js
rename : browser/devtools/performance/performance-controller.js => devtools/client/performance/performance-controller.js
rename : browser/devtools/performance/performance-view.js => devtools/client/performance/performance-view.js
rename : browser/devtools/performance/performance.xul => devtools/client/performance/performance.xul
rename : browser/devtools/performance/test/.eslintrc => devtools/client/performance/test/.eslintrc
rename : browser/devtools/performance/test/browser.ini => devtools/client/performance/test/browser.ini
rename : browser/devtools/performance/test/browser_aaa-run-first-leaktest.js => devtools/client/performance/test/browser_aaa-run-first-leaktest.js
rename : browser/devtools/performance/test/browser_perf-categories-js-calltree.js => devtools/client/performance/test/browser_perf-categories-js-calltree.js
rename : browser/devtools/performance/test/browser_perf-clear-01.js => devtools/client/performance/test/browser_perf-clear-01.js
rename : browser/devtools/performance/test/browser_perf-clear-02.js => devtools/client/performance/test/browser_perf-clear-02.js
rename : browser/devtools/performance/test/browser_perf-columns-js-calltree.js => devtools/client/performance/test/browser_perf-columns-js-calltree.js
rename : browser/devtools/performance/test/browser_perf-columns-memory-calltree.js => devtools/client/performance/test/browser_perf-columns-memory-calltree.js
rename : browser/devtools/performance/test/browser_perf-console-record-01.js => devtools/client/performance/test/browser_perf-console-record-01.js
rename : browser/devtools/performance/test/browser_perf-console-record-02.js => devtools/client/performance/test/browser_perf-console-record-02.js
rename : browser/devtools/performance/test/browser_perf-console-record-03.js => devtools/client/performance/test/browser_perf-console-record-03.js
rename : browser/devtools/performance/test/browser_perf-console-record-04.js => devtools/client/performance/test/browser_perf-console-record-04.js
rename : browser/devtools/performance/test/browser_perf-console-record-05.js => devtools/client/performance/test/browser_perf-console-record-05.js
rename : browser/devtools/performance/test/browser_perf-console-record-06.js => devtools/client/performance/test/browser_perf-console-record-06.js
rename : browser/devtools/performance/test/browser_perf-console-record-07.js => devtools/client/performance/test/browser_perf-console-record-07.js
rename : browser/devtools/performance/test/browser_perf-console-record-08.js => devtools/client/performance/test/browser_perf-console-record-08.js
rename : browser/devtools/performance/test/browser_perf-console-record-09.js => devtools/client/performance/test/browser_perf-console-record-09.js
rename : browser/devtools/performance/test/browser_perf-details-01.js => devtools/client/performance/test/browser_perf-details-01.js
rename : browser/devtools/performance/test/browser_perf-details-02.js => devtools/client/performance/test/browser_perf-details-02.js
rename : browser/devtools/performance/test/browser_perf-details-03.js => devtools/client/performance/test/browser_perf-details-03.js
rename : browser/devtools/performance/test/browser_perf-details-04.js => devtools/client/performance/test/browser_perf-details-04.js
rename : browser/devtools/performance/test/browser_perf-details-05.js => devtools/client/performance/test/browser_perf-details-05.js
rename : browser/devtools/performance/test/browser_perf-details-06.js => devtools/client/performance/test/browser_perf-details-06.js
rename : browser/devtools/performance/test/browser_perf-details-07.js => devtools/client/performance/test/browser_perf-details-07.js
rename : browser/devtools/performance/test/browser_perf-details-calltree-render.js => devtools/client/performance/test/browser_perf-details-calltree-render.js
rename : browser/devtools/performance/test/browser_perf-details-flamegraph-render.js => devtools/client/performance/test/browser_perf-details-flamegraph-render.js
rename : browser/devtools/performance/test/browser_perf-details-memory-calltree-render.js => devtools/client/performance/test/browser_perf-details-memory-calltree-render.js
rename : browser/devtools/performance/test/browser_perf-details-memory-flamegraph-render.js => devtools/client/performance/test/browser_perf-details-memory-flamegraph-render.js
rename : browser/devtools/performance/test/browser_perf-details-waterfall-gc-snap.js => devtools/client/performance/test/browser_perf-details-waterfall-gc-snap.js
rename : browser/devtools/performance/test/browser_perf-details-waterfall-render.js => devtools/client/performance/test/browser_perf-details-waterfall-render.js
rename : browser/devtools/performance/test/browser_perf-events-calltree.js => devtools/client/performance/test/browser_perf-events-calltree.js
rename : browser/devtools/performance/test/browser_perf-highlighted.js => devtools/client/performance/test/browser_perf-highlighted.js
rename : browser/devtools/performance/test/browser_perf-jit-view-01.js => devtools/client/performance/test/browser_perf-jit-view-01.js
rename : browser/devtools/performance/test/browser_perf-jit-view-02.js => devtools/client/performance/test/browser_perf-jit-view-02.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-01.js => devtools/client/performance/test/browser_perf-legacy-front-01.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-02.js => devtools/client/performance/test/browser_perf-legacy-front-02.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-03.js => devtools/client/performance/test/browser_perf-legacy-front-03.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-04.js => devtools/client/performance/test/browser_perf-legacy-front-04.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-05.js => devtools/client/performance/test/browser_perf-legacy-front-05.js
rename : browser/devtools/performance/test/browser_perf-legacy-front-06.js => devtools/client/performance/test/browser_perf-legacy-front-06.js
rename : browser/devtools/performance/test/browser_perf-loading-01.js => devtools/client/performance/test/browser_perf-loading-01.js
rename : browser/devtools/performance/test/browser_perf-loading-02.js => devtools/client/performance/test/browser_perf-loading-02.js
rename : browser/devtools/performance/test/browser_perf-marker-details-01.js => devtools/client/performance/test/browser_perf-marker-details-01.js
rename : browser/devtools/performance/test/browser_perf-options-01.js => devtools/client/performance/test/browser_perf-options-01.js
rename : browser/devtools/performance/test/browser_perf-options-02.js => devtools/client/performance/test/browser_perf-options-02.js
rename : browser/devtools/performance/test/browser_perf-options-03.js => devtools/client/performance/test/browser_perf-options-03.js
rename : browser/devtools/performance/test/browser_perf-options-allocations.js => devtools/client/performance/test/browser_perf-options-allocations.js
rename : browser/devtools/performance/test/browser_perf-options-enable-framerate.js => devtools/client/performance/test/browser_perf-options-enable-framerate.js
rename : browser/devtools/performance/test/browser_perf-options-enable-memory-01.js => devtools/client/performance/test/browser_perf-options-enable-memory-01.js
rename : browser/devtools/performance/test/browser_perf-options-enable-memory-02.js => devtools/client/performance/test/browser_perf-options-enable-memory-02.js
rename : browser/devtools/performance/test/browser_perf-options-flatten-tree-recursion-01.js => devtools/client/performance/test/browser_perf-options-flatten-tree-recursion-01.js
rename : browser/devtools/performance/test/browser_perf-options-flatten-tree-recursion-02.js => devtools/client/performance/test/browser_perf-options-flatten-tree-recursion-02.js
rename : browser/devtools/performance/test/browser_perf-options-invert-call-tree-01.js => devtools/client/performance/test/browser_perf-options-invert-call-tree-01.js
rename : browser/devtools/performance/test/browser_perf-options-invert-call-tree-02.js => devtools/client/performance/test/browser_perf-options-invert-call-tree-02.js
rename : browser/devtools/performance/test/browser_perf-options-invert-flame-graph-01.js => devtools/client/performance/test/browser_perf-options-invert-flame-graph-01.js
rename : browser/devtools/performance/test/browser_perf-options-invert-flame-graph-02.js => devtools/client/performance/test/browser_perf-options-invert-flame-graph-02.js
rename : browser/devtools/performance/test/browser_perf-options-profiler.js => devtools/client/performance/test/browser_perf-options-profiler.js
rename : browser/devtools/performance/test/browser_perf-options-show-idle-blocks-01.js => devtools/client/performance/test/browser_perf-options-show-idle-blocks-01.js
rename : browser/devtools/performance/test/browser_perf-options-show-idle-blocks-02.js => devtools/client/performance/test/browser_perf-options-show-idle-blocks-02.js
rename : browser/devtools/performance/test/browser_perf-options-show-platform-data-01.js => devtools/client/performance/test/browser_perf-options-show-platform-data-01.js
rename : browser/devtools/performance/test/browser_perf-options-show-platform-data-02.js => devtools/client/performance/test/browser_perf-options-show-platform-data-02.js
rename : browser/devtools/performance/test/browser_perf-overview-render-01.js => devtools/client/performance/test/browser_perf-overview-render-01.js
rename : browser/devtools/performance/test/browser_perf-overview-render-02.js => devtools/client/performance/test/browser_perf-overview-render-02.js
rename : browser/devtools/performance/test/browser_perf-overview-render-03.js => devtools/client/performance/test/browser_perf-overview-render-03.js
rename : browser/devtools/performance/test/browser_perf-overview-render-04.js => devtools/client/performance/test/browser_perf-overview-render-04.js
rename : browser/devtools/performance/test/browser_perf-overview-selection-01.js => devtools/client/performance/test/browser_perf-overview-selection-01.js
rename : browser/devtools/performance/test/browser_perf-overview-selection-02.js => devtools/client/performance/test/browser_perf-overview-selection-02.js
rename : browser/devtools/performance/test/browser_perf-overview-selection-03.js => devtools/client/performance/test/browser_perf-overview-selection-03.js
rename : browser/devtools/performance/test/browser_perf-overview-time-interval.js => devtools/client/performance/test/browser_perf-overview-time-interval.js
rename : browser/devtools/performance/test/browser_perf-range-changed-render.js => devtools/client/performance/test/browser_perf-range-changed-render.js
rename : browser/devtools/performance/test/browser_perf-recording-notices-01.js => devtools/client/performance/test/browser_perf-recording-notices-01.js
rename : browser/devtools/performance/test/browser_perf-recording-notices-02.js => devtools/client/performance/test/browser_perf-recording-notices-02.js
rename : browser/devtools/performance/test/browser_perf-recording-notices-03.js => devtools/client/performance/test/browser_perf-recording-notices-03.js
rename : browser/devtools/performance/test/browser_perf-recording-notices-04.js => devtools/client/performance/test/browser_perf-recording-notices-04.js
rename : browser/devtools/performance/test/browser_perf-recording-notices-05.js => devtools/client/performance/test/browser_perf-recording-notices-05.js
rename : browser/devtools/performance/test/browser_perf-recording-selected-01.js => devtools/client/performance/test/browser_perf-recording-selected-01.js
rename : browser/devtools/performance/test/browser_perf-recording-selected-02.js => devtools/client/performance/test/browser_perf-recording-selected-02.js
rename : browser/devtools/performance/test/browser_perf-recording-selected-03.js => devtools/client/performance/test/browser_perf-recording-selected-03.js
rename : browser/devtools/performance/test/browser_perf-recording-selected-04.js => devtools/client/performance/test/browser_perf-recording-selected-04.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-01.js => devtools/client/performance/test/browser_perf-recordings-io-01.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-02.js => devtools/client/performance/test/browser_perf-recordings-io-02.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-03.js => devtools/client/performance/test/browser_perf-recordings-io-03.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-04.js => devtools/client/performance/test/browser_perf-recordings-io-04.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-05.js => devtools/client/performance/test/browser_perf-recordings-io-05.js
rename : browser/devtools/performance/test/browser_perf-recordings-io-06.js => devtools/client/performance/test/browser_perf-recordings-io-06.js
rename : browser/devtools/performance/test/browser_perf-refresh.js => devtools/client/performance/test/browser_perf-refresh.js
rename : browser/devtools/performance/test/browser_perf-states.js => devtools/client/performance/test/browser_perf-states.js
rename : browser/devtools/performance/test/browser_perf-telemetry.js => devtools/client/performance/test/browser_perf-telemetry.js
rename : browser/devtools/performance/test/browser_perf-theme-toggle-01.js => devtools/client/performance/test/browser_perf-theme-toggle-01.js
rename : browser/devtools/performance/test/browser_perf-ui-recording.js => devtools/client/performance/test/browser_perf-ui-recording.js
rename : browser/devtools/performance/test/browser_profiler_tree-abstract-01.js => devtools/client/performance/test/browser_profiler_tree-abstract-01.js
rename : browser/devtools/performance/test/browser_profiler_tree-abstract-02.js => devtools/client/performance/test/browser_profiler_tree-abstract-02.js
rename : browser/devtools/performance/test/browser_profiler_tree-abstract-03.js => devtools/client/performance/test/browser_profiler_tree-abstract-03.js
rename : browser/devtools/performance/test/browser_profiler_tree-abstract-04.js => devtools/client/performance/test/browser_profiler_tree-abstract-04.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-01.js => devtools/client/performance/test/browser_profiler_tree-view-01.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-02.js => devtools/client/performance/test/browser_profiler_tree-view-02.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-03.js => devtools/client/performance/test/browser_profiler_tree-view-03.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-04.js => devtools/client/performance/test/browser_profiler_tree-view-04.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-05.js => devtools/client/performance/test/browser_profiler_tree-view-05.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-06.js => devtools/client/performance/test/browser_profiler_tree-view-06.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-07.js => devtools/client/performance/test/browser_profiler_tree-view-07.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-08.js => devtools/client/performance/test/browser_profiler_tree-view-08.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-09.js => devtools/client/performance/test/browser_profiler_tree-view-09.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-10.js => devtools/client/performance/test/browser_profiler_tree-view-10.js
rename : browser/devtools/performance/test/browser_profiler_tree-view-11.js => devtools/client/performance/test/browser_profiler_tree-view-11.js
rename : browser/devtools/performance/test/browser_timeline-filters-01.js => devtools/client/performance/test/browser_timeline-filters-01.js
rename : browser/devtools/performance/test/browser_timeline-filters-02.js => devtools/client/performance/test/browser_timeline-filters-02.js
rename : browser/devtools/performance/test/browser_timeline-waterfall-background.js => devtools/client/performance/test/browser_timeline-waterfall-background.js
rename : browser/devtools/performance/test/browser_timeline-waterfall-generic.js => devtools/client/performance/test/browser_timeline-waterfall-generic.js
rename : browser/devtools/performance/test/browser_timeline-waterfall-rerender.js => devtools/client/performance/test/browser_timeline-waterfall-rerender.js
rename : browser/devtools/performance/test/browser_timeline-waterfall-sidebar.js => devtools/client/performance/test/browser_timeline-waterfall-sidebar.js
rename : browser/devtools/performance/test/doc_allocs.html => devtools/client/performance/test/doc_allocs.html
rename : browser/devtools/performance/test/doc_innerHTML.html => devtools/client/performance/test/doc_innerHTML.html
rename : browser/devtools/performance/test/doc_markers.html => devtools/client/performance/test/doc_markers.html
rename : browser/devtools/performance/test/doc_simple-test.html => devtools/client/performance/test/doc_simple-test.html
rename : browser/devtools/performance/test/head.js => devtools/client/performance/test/head.js
rename : browser/devtools/performance/test/unit/head.js => devtools/client/performance/test/unit/head.js
rename : browser/devtools/performance/test/unit/test_frame-utils-01.js => devtools/client/performance/test/unit/test_frame-utils-01.js
rename : browser/devtools/performance/test/unit/test_frame-utils-02.js => devtools/client/performance/test/unit/test_frame-utils-02.js
rename : browser/devtools/performance/test/unit/test_jit-graph-data.js => devtools/client/performance/test/unit/test_jit-graph-data.js
rename : browser/devtools/performance/test/unit/test_jit-model-01.js => devtools/client/performance/test/unit/test_jit-model-01.js
rename : browser/devtools/performance/test/unit/test_jit-model-02.js => devtools/client/performance/test/unit/test_jit-model-02.js
rename : browser/devtools/performance/test/unit/test_marker-blueprint.js => devtools/client/performance/test/unit/test_marker-blueprint.js
rename : browser/devtools/performance/test/unit/test_marker-utils.js => devtools/client/performance/test/unit/test_marker-utils.js
rename : browser/devtools/performance/test/unit/test_perf-utils-allocations-to-samples.js => devtools/client/performance/test/unit/test_perf-utils-allocations-to-samples.js
rename : browser/devtools/performance/test/unit/test_profiler-categories.js => devtools/client/performance/test/unit/test_profiler-categories.js
rename : browser/devtools/performance/test/unit/test_tree-model-01.js => devtools/client/performance/test/unit/test_tree-model-01.js
rename : browser/devtools/performance/test/unit/test_tree-model-02.js => devtools/client/performance/test/unit/test_tree-model-02.js
rename : browser/devtools/performance/test/unit/test_tree-model-03.js => devtools/client/performance/test/unit/test_tree-model-03.js
rename : browser/devtools/performance/test/unit/test_tree-model-04.js => devtools/client/performance/test/unit/test_tree-model-04.js
rename : browser/devtools/performance/test/unit/test_tree-model-05.js => devtools/client/performance/test/unit/test_tree-model-05.js
rename : browser/devtools/performance/test/unit/test_tree-model-06.js => devtools/client/performance/test/unit/test_tree-model-06.js
rename : browser/devtools/performance/test/unit/test_tree-model-07.js => devtools/client/performance/test/unit/test_tree-model-07.js
rename : browser/devtools/performance/test/unit/test_tree-model-08.js => devtools/client/performance/test/unit/test_tree-model-08.js
rename : browser/devtools/performance/test/unit/test_tree-model-09.js => devtools/client/performance/test/unit/test_tree-model-09.js
rename : browser/devtools/performance/test/unit/test_tree-model-10.js => devtools/client/performance/test/unit/test_tree-model-10.js
rename : browser/devtools/performance/test/unit/test_tree-model-11.js => devtools/client/performance/test/unit/test_tree-model-11.js
rename : browser/devtools/performance/test/unit/test_tree-model-12.js => devtools/client/performance/test/unit/test_tree-model-12.js
rename : browser/devtools/performance/test/unit/test_tree-model-13.js => devtools/client/performance/test/unit/test_tree-model-13.js
rename : browser/devtools/performance/test/unit/test_tree-model-allocations-01.js => devtools/client/performance/test/unit/test_tree-model-allocations-01.js
rename : browser/devtools/performance/test/unit/test_tree-model-allocations-02.js => devtools/client/performance/test/unit/test_tree-model-allocations-02.js
rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-01.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-01.js
rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-02.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-02.js
rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-03.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-03.js
rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-04.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-04.js
rename : browser/devtools/performance/test/unit/xpcshell.ini => devtools/client/performance/test/unit/xpcshell.ini
rename : browser/devtools/performance/views/details-abstract-subview.js => devtools/client/performance/views/details-abstract-subview.js
rename : browser/devtools/performance/views/details-js-call-tree.js => devtools/client/performance/views/details-js-call-tree.js
rename : browser/devtools/performance/views/details-js-flamegraph.js => devtools/client/performance/views/details-js-flamegraph.js
rename : browser/devtools/performance/views/details-memory-call-tree.js => devtools/client/performance/views/details-memory-call-tree.js
rename : browser/devtools/performance/views/details-memory-flamegraph.js => devtools/client/performance/views/details-memory-flamegraph.js
rename : browser/devtools/performance/views/details-waterfall.js => devtools/client/performance/views/details-waterfall.js
rename : browser/devtools/performance/views/details.js => devtools/client/performance/views/details.js
rename : browser/devtools/performance/views/optimizations-list.js => devtools/client/performance/views/optimizations-list.js
rename : browser/devtools/performance/views/overview.js => devtools/client/performance/views/overview.js
rename : browser/devtools/performance/views/recordings.js => devtools/client/performance/views/recordings.js
rename : browser/devtools/performance/views/toolbar.js => devtools/client/performance/views/toolbar.js
rename : browser/devtools/projecteditor/chrome/content/projecteditor-loader.js => devtools/client/projecteditor/chrome/content/projecteditor-loader.js
rename : browser/devtools/projecteditor/chrome/content/projecteditor-loader.xul => devtools/client/projecteditor/chrome/content/projecteditor-loader.xul
rename : browser/devtools/projecteditor/chrome/content/projecteditor-test.xul => devtools/client/projecteditor/chrome/content/projecteditor-test.xul
rename : browser/devtools/projecteditor/chrome/content/projecteditor.xul => devtools/client/projecteditor/chrome/content/projecteditor.xul
rename : browser/devtools/projecteditor/lib/editors.js => devtools/client/projecteditor/lib/editors.js
rename : browser/devtools/projecteditor/lib/helpers/event.js => devtools/client/projecteditor/lib/helpers/event.js
rename : browser/devtools/projecteditor/lib/helpers/file-picker.js => devtools/client/projecteditor/lib/helpers/file-picker.js
rename : browser/devtools/projecteditor/lib/helpers/l10n.js => devtools/client/projecteditor/lib/helpers/l10n.js
rename : browser/devtools/projecteditor/lib/helpers/prompts.js => devtools/client/projecteditor/lib/helpers/prompts.js
rename : browser/devtools/projecteditor/lib/helpers/readdir.js => devtools/client/projecteditor/lib/helpers/readdir.js
rename : browser/devtools/projecteditor/lib/plugins/app-manager/app-project-editor.js => devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js
rename : browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js => devtools/client/projecteditor/lib/plugins/app-manager/plugin.js
rename : browser/devtools/projecteditor/lib/plugins/core.js => devtools/client/projecteditor/lib/plugins/core.js
rename : browser/devtools/projecteditor/lib/plugins/delete/delete.js => devtools/client/projecteditor/lib/plugins/delete/delete.js
rename : browser/devtools/projecteditor/lib/plugins/dirty/dirty.js => devtools/client/projecteditor/lib/plugins/dirty/dirty.js
rename : browser/devtools/projecteditor/lib/plugins/image-view/image-editor.js => devtools/client/projecteditor/lib/plugins/image-view/image-editor.js
rename : browser/devtools/projecteditor/lib/plugins/image-view/plugin.js => devtools/client/projecteditor/lib/plugins/image-view/plugin.js
rename : browser/devtools/projecteditor/lib/plugins/logging/logging.js => devtools/client/projecteditor/lib/plugins/logging/logging.js
rename : browser/devtools/projecteditor/lib/plugins/new/new.js => devtools/client/projecteditor/lib/plugins/new/new.js
rename : browser/devtools/projecteditor/lib/plugins/rename/rename.js => devtools/client/projecteditor/lib/plugins/rename/rename.js
rename : browser/devtools/projecteditor/lib/plugins/save/save.js => devtools/client/projecteditor/lib/plugins/save/save.js
rename : browser/devtools/projecteditor/lib/plugins/status-bar/plugin.js => devtools/client/projecteditor/lib/plugins/status-bar/plugin.js
rename : browser/devtools/projecteditor/lib/project.js => devtools/client/projecteditor/lib/project.js
rename : browser/devtools/projecteditor/lib/projecteditor.js => devtools/client/projecteditor/lib/projecteditor.js
rename : browser/devtools/projecteditor/lib/shells.js => devtools/client/projecteditor/lib/shells.js
rename : browser/devtools/projecteditor/lib/stores/base.js => devtools/client/projecteditor/lib/stores/base.js
rename : browser/devtools/projecteditor/lib/stores/local.js => devtools/client/projecteditor/lib/stores/local.js
rename : browser/devtools/projecteditor/lib/stores/resource.js => devtools/client/projecteditor/lib/stores/resource.js
rename : browser/devtools/projecteditor/lib/tree.js => devtools/client/projecteditor/lib/tree.js
rename : browser/devtools/projecteditor/moz.build => devtools/client/projecteditor/moz.build
rename : browser/devtools/projecteditor/test/.eslintrc => devtools/client/projecteditor/test/.eslintrc
rename : browser/devtools/projecteditor/test/browser.ini => devtools/client/projecteditor/test/browser.ini
rename : browser/devtools/projecteditor/test/browser_projecteditor_app_options.js => devtools/client/projecteditor/test/browser_projecteditor_app_options.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_confirm_unsaved.js => devtools/client/projecteditor/test/browser_projecteditor_confirm_unsaved.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_contextmenu_01.js => devtools/client/projecteditor/test/browser_projecteditor_contextmenu_01.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_contextmenu_02.js => devtools/client/projecteditor/test/browser_projecteditor_contextmenu_02.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_delete_file.js => devtools/client/projecteditor/test/browser_projecteditor_delete_file.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js => devtools/client/projecteditor/test/browser_projecteditor_editing_01.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_editors_image.js => devtools/client/projecteditor/test/browser_projecteditor_editors_image.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_external_change.js => devtools/client/projecteditor/test/browser_projecteditor_external_change.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_immediate_destroy.js => devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_init.js => devtools/client/projecteditor/test/browser_projecteditor_init.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_menubar_01.js => devtools/client/projecteditor/test/browser_projecteditor_menubar_01.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_menubar_02.js => devtools/client/projecteditor/test/browser_projecteditor_menubar_02.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_new_file.js => devtools/client/projecteditor/test/browser_projecteditor_new_file.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_rename_file.js => devtools/client/projecteditor/test/browser_projecteditor_rename_file.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_stores.js => devtools/client/projecteditor/test/browser_projecteditor_stores.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_tree_selection_01.js => devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js
rename : browser/devtools/projecteditor/test/browser_projecteditor_tree_selection_02.js => devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js
rename : browser/devtools/projecteditor/test/head.js => devtools/client/projecteditor/test/head.js
rename : browser/devtools/projecteditor/test/helper_edits.js => devtools/client/projecteditor/test/helper_edits.js
rename : browser/devtools/projecteditor/test/helper_homepage.html => devtools/client/projecteditor/test/helper_homepage.html
rename : browser/devtools/promisedebugger/moz.build => devtools/client/promisedebugger/moz.build
rename : browser/devtools/promisedebugger/promise-controller.js => devtools/client/promisedebugger/promise-controller.js
rename : browser/devtools/promisedebugger/promise-debugger.xhtml => devtools/client/promisedebugger/promise-debugger.xhtml
rename : browser/devtools/promisedebugger/promise-panel.js => devtools/client/promisedebugger/promise-panel.js
rename : browser/devtools/promisedebugger/test/.eslintrc => devtools/client/promisedebugger/test/.eslintrc
rename : browser/devtools/promisedebugger/test/browser.ini => devtools/client/promisedebugger/test/browser.ini
rename : browser/devtools/promisedebugger/test/head.js => devtools/client/promisedebugger/test/head.js
rename : browser/devtools/responsivedesign/moz.build => devtools/client/responsivedesign/moz.build
rename : browser/devtools/responsivedesign/resize-commands.js => devtools/client/responsivedesign/resize-commands.js
rename : browser/devtools/responsivedesign/responsivedesign-child.js => devtools/client/responsivedesign/responsivedesign-child.js
rename : browser/devtools/responsivedesign/responsivedesign.jsm => devtools/client/responsivedesign/responsivedesign.jsm
rename : browser/devtools/responsivedesign/test/.eslintrc => devtools/client/responsivedesign/test/.eslintrc
rename : browser/devtools/responsivedesign/test/browser.ini => devtools/client/responsivedesign/test/browser.ini
rename : browser/devtools/responsivedesign/test/browser_responsive_cmd.js => devtools/client/responsivedesign/test/browser_responsive_cmd.js
rename : browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js => devtools/client/responsivedesign/test/browser_responsive_devicewidth.js
rename : browser/devtools/responsivedesign/test/browser_responsivecomputedview.js => devtools/client/responsivedesign/test/browser_responsivecomputedview.js
rename : browser/devtools/responsivedesign/test/browser_responsiveruleview.js => devtools/client/responsivedesign/test/browser_responsiveruleview.js
rename : browser/devtools/responsivedesign/test/browser_responsiveui.js => devtools/client/responsivedesign/test/browser_responsiveui.js
rename : browser/devtools/responsivedesign/test/browser_responsiveui_touch.js => devtools/client/responsivedesign/test/browser_responsiveui_touch.js
rename : browser/devtools/responsivedesign/test/browser_responsiveuiaddcustompreset.js => devtools/client/responsivedesign/test/browser_responsiveuiaddcustompreset.js
rename : browser/devtools/responsivedesign/test/head.js => devtools/client/responsivedesign/test/head.js
rename : browser/devtools/responsivedesign/test/touch.html => devtools/client/responsivedesign/test/touch.html
rename : browser/devtools/scratchpad/moz.build => devtools/client/scratchpad/moz.build
rename : browser/devtools/scratchpad/scratchpad-commands.js => devtools/client/scratchpad/scratchpad-commands.js
rename : browser/devtools/scratchpad/scratchpad-manager.jsm => devtools/client/scratchpad/scratchpad-manager.jsm
rename : browser/devtools/scratchpad/scratchpad-panel.js => devtools/client/scratchpad/scratchpad-panel.js
rename : browser/devtools/scratchpad/scratchpad.js => devtools/client/scratchpad/scratchpad.js
rename : browser/devtools/scratchpad/scratchpad.xul => devtools/client/scratchpad/scratchpad.xul
rename : browser/devtools/scratchpad/test/.eslintrc => devtools/client/scratchpad/test/.eslintrc
rename : browser/devtools/scratchpad/test/NS_ERROR_ILLEGAL_INPUT.txt => devtools/client/scratchpad/test/NS_ERROR_ILLEGAL_INPUT.txt
rename : browser/devtools/scratchpad/test/browser.ini => devtools/client/scratchpad/test/browser.ini
rename : browser/devtools/scratchpad/test/browser_scratchpad_autocomplete.js => devtools/client/scratchpad/test/browser_scratchpad_autocomplete.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_browser_last_window_closing.js => devtools/client/scratchpad/test/browser_scratchpad_browser_last_window_closing.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_chrome_context_pref.js => devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_close_toolbox.js => devtools/client/scratchpad/test/browser_scratchpad_close_toolbox.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_confirm_close.js => devtools/client/scratchpad/test/browser_scratchpad_confirm_close.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_contexts.js => devtools/client/scratchpad/test/browser_scratchpad_contexts.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_disable_view_menu_items.js => devtools/client/scratchpad/test/browser_scratchpad_disable_view_menu_items.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_display_non_error_exceptions.js => devtools/client/scratchpad/test/browser_scratchpad_display_non_error_exceptions.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_display_outputs_errors.js => devtools/client/scratchpad/test/browser_scratchpad_display_outputs_errors.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_edit_ui_updates.js => devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_eval_func.js => devtools/client/scratchpad/test/browser_scratchpad_eval_func.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_execute_print.js => devtools/client/scratchpad/test/browser_scratchpad_execute_print.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_falsy.js => devtools/client/scratchpad/test/browser_scratchpad_falsy.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_files.js => devtools/client/scratchpad/test/browser_scratchpad_files.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_goto_line_ui.js => devtools/client/scratchpad/test/browser_scratchpad_goto_line_ui.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_help_key.js => devtools/client/scratchpad/test/browser_scratchpad_help_key.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_initialization.js => devtools/client/scratchpad/test/browser_scratchpad_initialization.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_inspect.js => devtools/client/scratchpad/test/browser_scratchpad_inspect.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_inspect_primitives.js => devtools/client/scratchpad/test/browser_scratchpad_inspect_primitives.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_long_string.js => devtools/client/scratchpad/test/browser_scratchpad_long_string.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_modeline.js => devtools/client/scratchpad/test/browser_scratchpad_modeline.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_open.js => devtools/client/scratchpad/test/browser_scratchpad_open.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_open_error_console.js => devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint-02.js => devtools/client/scratchpad/test/browser_scratchpad_pprint-02.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint.js => devtools/client/scratchpad/test/browser_scratchpad_pprint.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint_error_goto_line.js => devtools/client/scratchpad/test/browser_scratchpad_pprint_error_goto_line.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_recent_files.js => devtools/client/scratchpad/test/browser_scratchpad_recent_files.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_reload_and_run.js => devtools/client/scratchpad/test/browser_scratchpad_reload_and_run.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_remember_view_options.js => devtools/client/scratchpad/test/browser_scratchpad_remember_view_options.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_reset_undo.js => devtools/client/scratchpad/test/browser_scratchpad_reset_undo.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_restore.js => devtools/client/scratchpad/test/browser_scratchpad_restore.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_revert_to_saved.js => devtools/client/scratchpad/test/browser_scratchpad_revert_to_saved.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_run_error_goto_line.js => devtools/client/scratchpad/test/browser_scratchpad_run_error_goto_line.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_tab.js => devtools/client/scratchpad/test/browser_scratchpad_tab.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_tab_switch.js => devtools/client/scratchpad/test/browser_scratchpad_tab_switch.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_throw_output.js => devtools/client/scratchpad/test/browser_scratchpad_throw_output.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_ui.js => devtools/client/scratchpad/test/browser_scratchpad_ui.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_unsaved.js => devtools/client/scratchpad/test/browser_scratchpad_unsaved.js
rename : browser/devtools/scratchpad/test/browser_scratchpad_wrong_window_focus.js => devtools/client/scratchpad/test/browser_scratchpad_wrong_window_focus.js
rename : browser/devtools/scratchpad/test/head.js => devtools/client/scratchpad/test/head.js
rename : browser/devtools/shadereditor/moz.build => devtools/client/shadereditor/moz.build
rename : browser/devtools/shadereditor/panel.js => devtools/client/shadereditor/panel.js
rename : browser/devtools/shadereditor/shadereditor.js => devtools/client/shadereditor/shadereditor.js
rename : browser/devtools/shadereditor/shadereditor.xul => devtools/client/shadereditor/shadereditor.xul
rename : browser/devtools/shadereditor/test/.eslintrc => devtools/client/shadereditor/test/.eslintrc
rename : browser/devtools/shadereditor/test/browser.ini => devtools/client/shadereditor/test/browser.ini
rename : browser/devtools/shadereditor/test/browser_se_aaa_run_first_leaktest.js => devtools/client/shadereditor/test/browser_se_aaa_run_first_leaktest.js
rename : browser/devtools/shadereditor/test/browser_se_bfcache.js => devtools/client/shadereditor/test/browser_se_bfcache.js
rename : browser/devtools/shadereditor/test/browser_se_editors-contents.js => devtools/client/shadereditor/test/browser_se_editors-contents.js
rename : browser/devtools/shadereditor/test/browser_se_editors-error-gutter.js => devtools/client/shadereditor/test/browser_se_editors-error-gutter.js
rename : browser/devtools/shadereditor/test/browser_se_editors-error-tooltip.js => devtools/client/shadereditor/test/browser_se_editors-error-tooltip.js
rename : browser/devtools/shadereditor/test/browser_se_editors-lazy-init.js => devtools/client/shadereditor/test/browser_se_editors-lazy-init.js
rename : browser/devtools/shadereditor/test/browser_se_first-run.js => devtools/client/shadereditor/test/browser_se_first-run.js
rename : browser/devtools/shadereditor/test/browser_se_navigation.js => devtools/client/shadereditor/test/browser_se_navigation.js
rename : browser/devtools/shadereditor/test/browser_se_programs-blackbox-01.js => devtools/client/shadereditor/test/browser_se_programs-blackbox-01.js
rename : browser/devtools/shadereditor/test/browser_se_programs-blackbox-02.js => devtools/client/shadereditor/test/browser_se_programs-blackbox-02.js
rename : browser/devtools/shadereditor/test/browser_se_programs-cache.js => devtools/client/shadereditor/test/browser_se_programs-cache.js
rename : browser/devtools/shadereditor/test/browser_se_programs-highlight-01.js => devtools/client/shadereditor/test/browser_se_programs-highlight-01.js
rename : browser/devtools/shadereditor/test/browser_se_programs-highlight-02.js => devtools/client/shadereditor/test/browser_se_programs-highlight-02.js
rename : browser/devtools/shadereditor/test/browser_se_programs-list.js => devtools/client/shadereditor/test/browser_se_programs-list.js
rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-01.js => devtools/client/shadereditor/test/browser_se_shaders-edit-01.js
rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-02.js => devtools/client/shadereditor/test/browser_se_shaders-edit-02.js
rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-03.js => devtools/client/shadereditor/test/browser_se_shaders-edit-03.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-01.js => devtools/client/shadereditor/test/browser_webgl-actor-test-01.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-02.js => devtools/client/shadereditor/test/browser_webgl-actor-test-02.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-03.js => devtools/client/shadereditor/test/browser_webgl-actor-test-03.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-04.js => devtools/client/shadereditor/test/browser_webgl-actor-test-04.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-05.js => devtools/client/shadereditor/test/browser_webgl-actor-test-05.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-06.js => devtools/client/shadereditor/test/browser_webgl-actor-test-06.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-07.js => devtools/client/shadereditor/test/browser_webgl-actor-test-07.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-08.js => devtools/client/shadereditor/test/browser_webgl-actor-test-08.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-09.js => devtools/client/shadereditor/test/browser_webgl-actor-test-09.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-10.js => devtools/client/shadereditor/test/browser_webgl-actor-test-10.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-11.js => devtools/client/shadereditor/test/browser_webgl-actor-test-11.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-12.js => devtools/client/shadereditor/test/browser_webgl-actor-test-12.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-13.js => devtools/client/shadereditor/test/browser_webgl-actor-test-13.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-14.js => devtools/client/shadereditor/test/browser_webgl-actor-test-14.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-15.js => devtools/client/shadereditor/test/browser_webgl-actor-test-15.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-16.js => devtools/client/shadereditor/test/browser_webgl-actor-test-16.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-17.js => devtools/client/shadereditor/test/browser_webgl-actor-test-17.js
rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-18.js => devtools/client/shadereditor/test/browser_webgl-actor-test-18.js
rename : browser/devtools/shadereditor/test/doc_blended-geometry.html => devtools/client/shadereditor/test/doc_blended-geometry.html
rename : browser/devtools/shadereditor/test/doc_multiple-contexts.html => devtools/client/shadereditor/test/doc_multiple-contexts.html
rename : browser/devtools/shadereditor/test/doc_overlapping-geometry.html => devtools/client/shadereditor/test/doc_overlapping-geometry.html
rename : browser/devtools/shadereditor/test/doc_shader-order.html => devtools/client/shadereditor/test/doc_shader-order.html
rename : browser/devtools/shadereditor/test/doc_simple-canvas.html => devtools/client/shadereditor/test/doc_simple-canvas.html
rename : browser/devtools/shadereditor/test/head.js => devtools/client/shadereditor/test/head.js
rename : browser/devtools/shared/AppCacheUtils.jsm => devtools/client/shared/AppCacheUtils.jsm
rename : browser/devtools/shared/Curl.jsm => devtools/client/shared/Curl.jsm
rename : browser/devtools/shared/DOMHelpers.jsm => devtools/client/shared/DOMHelpers.jsm
rename : browser/devtools/shared/DeveloperToolbar.jsm => devtools/client/shared/DeveloperToolbar.jsm
rename : browser/devtools/shared/Jsbeautify.jsm => devtools/client/shared/Jsbeautify.jsm
rename : browser/devtools/shared/Parser.jsm => devtools/client/shared/Parser.jsm
rename : browser/devtools/shared/SplitView.jsm => devtools/client/shared/SplitView.jsm
rename : browser/devtools/shared/autocomplete-popup.js => devtools/client/shared/autocomplete-popup.js
rename : browser/devtools/shared/browser-loader.js => devtools/client/shared/browser-loader.js
rename : browser/devtools/shared/devices.js => devtools/client/shared/devices.js
rename : browser/devtools/shared/doorhanger.js => devtools/client/shared/doorhanger.js
rename : browser/devtools/shared/frame-script-utils.js => devtools/client/shared/frame-script-utils.js
rename : browser/devtools/shared/getjson.js => devtools/client/shared/getjson.js
rename : browser/devtools/shared/inplace-editor.js => devtools/client/shared/inplace-editor.js
rename : browser/devtools/shared/moz.build => devtools/client/shared/moz.build
rename : browser/devtools/shared/node-attribute-parser.js => devtools/client/shared/node-attribute-parser.js
rename : browser/devtools/shared/observable-object.js => devtools/client/shared/observable-object.js
rename : browser/devtools/shared/options-view.js => devtools/client/shared/options-view.js
rename : browser/devtools/shared/poller.js => devtools/client/shared/poller.js
rename : browser/devtools/shared/redux/create-store.js => devtools/client/shared/redux/create-store.js
rename : browser/devtools/shared/redux/middleware/log.js => devtools/client/shared/redux/middleware/log.js
rename : browser/devtools/shared/redux/middleware/thunk.js => devtools/client/shared/redux/middleware/thunk.js
rename : browser/devtools/shared/redux/middleware/wait-service.js => devtools/client/shared/redux/middleware/wait-service.js
rename : browser/devtools/shared/redux/moz.build => devtools/client/shared/redux/moz.build
rename : browser/devtools/shared/redux/reducers.js => devtools/client/shared/redux/reducers.js
rename : browser/devtools/shared/source-utils.js => devtools/client/shared/source-utils.js
rename : browser/devtools/shared/splitview.css => devtools/client/shared/splitview.css
rename : browser/devtools/shared/telemetry.js => devtools/client/shared/telemetry.js
rename : browser/devtools/shared/test/.eslintrc => devtools/client/shared/test/.eslintrc
rename : browser/devtools/shared/test/browser.ini => devtools/client/shared/test/browser.ini
rename : browser/devtools/shared/test/browser_css_color.js => devtools/client/shared/test/browser_css_color.js
rename : browser/devtools/shared/test/browser_cubic-bezier-01.js => devtools/client/shared/test/browser_cubic-bezier-01.js
rename : browser/devtools/shared/test/browser_cubic-bezier-02.js => devtools/client/shared/test/browser_cubic-bezier-02.js
rename : browser/devtools/shared/test/browser_cubic-bezier-03.js => devtools/client/shared/test/browser_cubic-bezier-03.js
rename : browser/devtools/shared/test/browser_cubic-bezier-04.js => devtools/client/shared/test/browser_cubic-bezier-04.js
rename : browser/devtools/shared/test/browser_cubic-bezier-05.js => devtools/client/shared/test/browser_cubic-bezier-05.js
rename : browser/devtools/shared/test/browser_cubic-bezier-06.js => devtools/client/shared/test/browser_cubic-bezier-06.js
rename : browser/devtools/shared/test/browser_devices.js => devtools/client/shared/test/browser_devices.js
rename : browser/devtools/shared/test/browser_devices.json => devtools/client/shared/test/browser_devices.json
rename : browser/devtools/shared/test/browser_filter-editor-01.js => devtools/client/shared/test/browser_filter-editor-01.js
rename : browser/devtools/shared/test/browser_filter-editor-02.js => devtools/client/shared/test/browser_filter-editor-02.js
rename : browser/devtools/shared/test/browser_filter-editor-03.js => devtools/client/shared/test/browser_filter-editor-03.js
rename : browser/devtools/shared/test/browser_filter-editor-04.js => devtools/client/shared/test/browser_filter-editor-04.js
rename : browser/devtools/shared/test/browser_filter-editor-05.js => devtools/client/shared/test/browser_filter-editor-05.js
rename : browser/devtools/shared/test/browser_filter-editor-06.js => devtools/client/shared/test/browser_filter-editor-06.js
rename : browser/devtools/shared/test/browser_filter-editor-07.js => devtools/client/shared/test/browser_filter-editor-07.js
rename : browser/devtools/shared/test/browser_filter-editor-08.js => devtools/client/shared/test/browser_filter-editor-08.js
rename : browser/devtools/shared/test/browser_filter-editor-09.js => devtools/client/shared/test/browser_filter-editor-09.js
rename : browser/devtools/shared/test/browser_filter-editor-10.js => devtools/client/shared/test/browser_filter-editor-10.js
rename : browser/devtools/shared/test/browser_filter-presets-01.js => devtools/client/shared/test/browser_filter-presets-01.js
rename : browser/devtools/shared/test/browser_filter-presets-02.js => devtools/client/shared/test/browser_filter-presets-02.js
rename : browser/devtools/shared/test/browser_filter-presets-03.js => devtools/client/shared/test/browser_filter-presets-03.js
rename : browser/devtools/shared/test/browser_flame-graph-01.js => devtools/client/shared/test/browser_flame-graph-01.js
rename : browser/devtools/shared/test/browser_flame-graph-02.js => devtools/client/shared/test/browser_flame-graph-02.js
rename : browser/devtools/shared/test/browser_flame-graph-03a.js => devtools/client/shared/test/browser_flame-graph-03a.js
rename : browser/devtools/shared/test/browser_flame-graph-03b.js => devtools/client/shared/test/browser_flame-graph-03b.js
rename : browser/devtools/shared/test/browser_flame-graph-03c.js => devtools/client/shared/test/browser_flame-graph-03c.js
rename : browser/devtools/shared/test/browser_flame-graph-04.js => devtools/client/shared/test/browser_flame-graph-04.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-01.js => devtools/client/shared/test/browser_flame-graph-utils-01.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-02.js => devtools/client/shared/test/browser_flame-graph-utils-02.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-03.js => devtools/client/shared/test/browser_flame-graph-utils-03.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-04.js => devtools/client/shared/test/browser_flame-graph-utils-04.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-05.js => devtools/client/shared/test/browser_flame-graph-utils-05.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-06.js => devtools/client/shared/test/browser_flame-graph-utils-06.js
rename : browser/devtools/shared/test/browser_flame-graph-utils-hash.js => devtools/client/shared/test/browser_flame-graph-utils-hash.js
rename : browser/devtools/shared/test/browser_graphs-01.js => devtools/client/shared/test/browser_graphs-01.js
rename : browser/devtools/shared/test/browser_graphs-02.js => devtools/client/shared/test/browser_graphs-02.js
rename : browser/devtools/shared/test/browser_graphs-03.js => devtools/client/shared/test/browser_graphs-03.js
rename : browser/devtools/shared/test/browser_graphs-04.js => devtools/client/shared/test/browser_graphs-04.js
rename : browser/devtools/shared/test/browser_graphs-05.js => devtools/client/shared/test/browser_graphs-05.js
rename : browser/devtools/shared/test/browser_graphs-06.js => devtools/client/shared/test/browser_graphs-06.js
rename : browser/devtools/shared/test/browser_graphs-07a.js => devtools/client/shared/test/browser_graphs-07a.js
rename : browser/devtools/shared/test/browser_graphs-07b.js => devtools/client/shared/test/browser_graphs-07b.js
rename : browser/devtools/shared/test/browser_graphs-07c.js => devtools/client/shared/test/browser_graphs-07c.js
rename : browser/devtools/shared/test/browser_graphs-07d.js => devtools/client/shared/test/browser_graphs-07d.js
rename : browser/devtools/shared/test/browser_graphs-07e.js => devtools/client/shared/test/browser_graphs-07e.js
rename : browser/devtools/shared/test/browser_graphs-08.js => devtools/client/shared/test/browser_graphs-08.js
rename : browser/devtools/shared/test/browser_graphs-09a.js => devtools/client/shared/test/browser_graphs-09a.js
rename : browser/devtools/shared/test/browser_graphs-09b.js => devtools/client/shared/test/browser_graphs-09b.js
rename : browser/devtools/shared/test/browser_graphs-09c.js => devtools/client/shared/test/browser_graphs-09c.js
rename : browser/devtools/shared/test/browser_graphs-09d.js => devtools/client/shared/test/browser_graphs-09d.js
rename : browser/devtools/shared/test/browser_graphs-09e.js => devtools/client/shared/test/browser_graphs-09e.js
rename : browser/devtools/shared/test/browser_graphs-09f.js => devtools/client/shared/test/browser_graphs-09f.js
rename : browser/devtools/shared/test/browser_graphs-10a.js => devtools/client/shared/test/browser_graphs-10a.js
rename : browser/devtools/shared/test/browser_graphs-10b.js => devtools/client/shared/test/browser_graphs-10b.js
rename : browser/devtools/shared/test/browser_graphs-10c.js => devtools/client/shared/test/browser_graphs-10c.js
rename : browser/devtools/shared/test/browser_graphs-11a.js => devtools/client/shared/test/browser_graphs-11a.js
rename : browser/devtools/shared/test/browser_graphs-11b.js => devtools/client/shared/test/browser_graphs-11b.js
rename : browser/devtools/shared/test/browser_graphs-12.js => devtools/client/shared/test/browser_graphs-12.js
rename : browser/devtools/shared/test/browser_graphs-13.js => devtools/client/shared/test/browser_graphs-13.js
rename : browser/devtools/shared/test/browser_graphs-14.js => devtools/client/shared/test/browser_graphs-14.js
rename : browser/devtools/shared/test/browser_graphs-15.js => devtools/client/shared/test/browser_graphs-15.js
rename : browser/devtools/shared/test/browser_graphs-16.js => devtools/client/shared/test/browser_graphs-16.js
rename : browser/devtools/shared/test/browser_inplace-editor-01.js => devtools/client/shared/test/browser_inplace-editor-01.js
rename : browser/devtools/shared/test/browser_inplace-editor-02.js => devtools/client/shared/test/browser_inplace-editor-02.js
rename : browser/devtools/shared/test/browser_layoutHelpers-getBoxQuads.html => devtools/client/shared/test/browser_layoutHelpers-getBoxQuads.html
rename : browser/devtools/shared/test/browser_layoutHelpers-getBoxQuads.js => devtools/client/shared/test/browser_layoutHelpers-getBoxQuads.js
rename : browser/devtools/shared/test/browser_layoutHelpers.html => devtools/client/shared/test/browser_layoutHelpers.html
rename : browser/devtools/shared/test/browser_layoutHelpers.js => devtools/client/shared/test/browser_layoutHelpers.js
rename : browser/devtools/shared/test/browser_mdn-docs-01.js => devtools/client/shared/test/browser_mdn-docs-01.js
rename : browser/devtools/shared/test/browser_mdn-docs-02.js => devtools/client/shared/test/browser_mdn-docs-02.js
rename : browser/devtools/shared/test/browser_mdn-docs-03.js => devtools/client/shared/test/browser_mdn-docs-03.js
rename : browser/devtools/shared/test/browser_num-l10n.js => devtools/client/shared/test/browser_num-l10n.js
rename : browser/devtools/shared/test/browser_observableobject.js => devtools/client/shared/test/browser_observableobject.js
rename : browser/devtools/shared/test/browser_options-view-01.js => devtools/client/shared/test/browser_options-view-01.js
rename : browser/devtools/shared/test/browser_outputparser.js => devtools/client/shared/test/browser_outputparser.js
rename : browser/devtools/shared/test/browser_poller.js => devtools/client/shared/test/browser_poller.js
rename : browser/devtools/shared/test/browser_prefs-01.js => devtools/client/shared/test/browser_prefs-01.js
rename : browser/devtools/shared/test/browser_prefs-02.js => devtools/client/shared/test/browser_prefs-02.js
rename : browser/devtools/shared/test/browser_spectrum.js => devtools/client/shared/test/browser_spectrum.js
rename : browser/devtools/shared/test/browser_tableWidget_basic.js => devtools/client/shared/test/browser_tableWidget_basic.js
rename : browser/devtools/shared/test/browser_tableWidget_keyboard_interaction.js => devtools/client/shared/test/browser_tableWidget_keyboard_interaction.js
rename : browser/devtools/shared/test/browser_tableWidget_mouse_interaction.js => devtools/client/shared/test/browser_tableWidget_mouse_interaction.js
rename : browser/devtools/shared/test/browser_telemetry_button_eyedropper.js => devtools/client/shared/test/browser_telemetry_button_eyedropper.js
rename : browser/devtools/shared/test/browser_telemetry_button_paintflashing.js => devtools/client/shared/test/browser_telemetry_button_paintflashing.js
rename : browser/devtools/shared/test/browser_telemetry_button_responsive.js => devtools/client/shared/test/browser_telemetry_button_responsive.js
rename : browser/devtools/shared/test/browser_telemetry_button_scratchpad.js => devtools/client/shared/test/browser_telemetry_button_scratchpad.js
rename : browser/devtools/shared/test/browser_telemetry_button_tilt.js => devtools/client/shared/test/browser_telemetry_button_tilt.js
rename : browser/devtools/shared/test/browser_telemetry_sidebar.js => devtools/client/shared/test/browser_telemetry_sidebar.js
rename : browser/devtools/shared/test/browser_telemetry_toolbox.js => devtools/client/shared/test/browser_telemetry_toolbox.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_canvasdebugger.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_canvasdebugger.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_inspector.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_inspector.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_jsdebugger.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_jsdebugger.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_jsprofiler.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_jsprofiler.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_netmonitor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_netmonitor.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_options.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_options.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_shadereditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_shadereditor.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_storage.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_storage.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_styleeditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_styleeditor.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_webaudioeditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_webaudioeditor.js
rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_webconsole.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_webconsole.js
rename : browser/devtools/shared/test/browser_templater_basic.html => devtools/client/shared/test/browser_templater_basic.html
rename : browser/devtools/shared/test/browser_templater_basic.js => devtools/client/shared/test/browser_templater_basic.js
rename : browser/devtools/shared/test/browser_theme.js => devtools/client/shared/test/browser_theme.js
rename : browser/devtools/shared/test/browser_toolbar_basic.html => devtools/client/shared/test/browser_toolbar_basic.html
rename : browser/devtools/shared/test/browser_toolbar_basic.js => devtools/client/shared/test/browser_toolbar_basic.js
rename : browser/devtools/shared/test/browser_toolbar_tooltip.js => devtools/client/shared/test/browser_toolbar_tooltip.js
rename : browser/devtools/shared/test/browser_toolbar_webconsole_errors_count.html => devtools/client/shared/test/browser_toolbar_webconsole_errors_count.html
rename : browser/devtools/shared/test/browser_toolbar_webconsole_errors_count.js => devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js
rename : browser/devtools/shared/test/browser_treeWidget_basic.js => devtools/client/shared/test/browser_treeWidget_basic.js
rename : browser/devtools/shared/test/browser_treeWidget_keyboard_interaction.js => devtools/client/shared/test/browser_treeWidget_keyboard_interaction.js
rename : browser/devtools/shared/test/browser_treeWidget_mouse_interaction.js => devtools/client/shared/test/browser_treeWidget_mouse_interaction.js
rename : browser/devtools/shared/test/doc_options-view.xul => devtools/client/shared/test/doc_options-view.xul
rename : browser/devtools/shared/test/head.js => devtools/client/shared/test/head.js
rename : browser/devtools/shared/test/html-mdn-css-basic-testing.html => devtools/client/shared/test/html-mdn-css-basic-testing.html
rename : browser/devtools/shared/test/html-mdn-css-no-summary-or-syntax.html => devtools/client/shared/test/html-mdn-css-no-summary-or-syntax.html
rename : browser/devtools/shared/test/html-mdn-css-no-summary.html => devtools/client/shared/test/html-mdn-css-no-summary.html
rename : browser/devtools/shared/test/html-mdn-css-no-syntax.html => devtools/client/shared/test/html-mdn-css-no-syntax.html
rename : browser/devtools/shared/test/html-mdn-css-syntax-old-style.html => devtools/client/shared/test/html-mdn-css-syntax-old-style.html
rename : browser/devtools/shared/test/leakhunt.js => devtools/client/shared/test/leakhunt.js
rename : browser/devtools/shared/test/test-actor-registry.js => devtools/client/shared/test/test-actor-registry.js
rename : browser/devtools/shared/test/test-actor.js => devtools/client/shared/test/test-actor.js
rename : browser/devtools/shared/test/unit/.eslintrc => devtools/client/shared/test/unit/.eslintrc
rename : browser/devtools/shared/test/unit/test_VariablesView_filtering-without-controller.js => devtools/client/shared/test/unit/test_VariablesView_filtering-without-controller.js
rename : browser/devtools/shared/test/unit/test_VariablesView_getString_promise.js => devtools/client/shared/test/unit/test_VariablesView_getString_promise.js
rename : browser/devtools/shared/test/unit/test_advanceValidate.js => devtools/client/shared/test/unit/test_advanceValidate.js
rename : browser/devtools/shared/test/unit/test_attribute-parsing-01.js => devtools/client/shared/test/unit/test_attribute-parsing-01.js
rename : browser/devtools/shared/test/unit/test_attribute-parsing-02.js => devtools/client/shared/test/unit/test_attribute-parsing-02.js
rename : browser/devtools/shared/test/unit/test_bezierCanvas.js => devtools/client/shared/test/unit/test_bezierCanvas.js
rename : browser/devtools/shared/test/unit/test_cubicBezier.js => devtools/client/shared/test/unit/test_cubicBezier.js
rename : browser/devtools/shared/test/unit/test_undoStack.js => devtools/client/shared/test/unit/test_undoStack.js
rename : browser/devtools/shared/test/unit/xpcshell.ini => devtools/client/shared/test/unit/xpcshell.ini
rename : browser/devtools/shared/theme-switching.js => devtools/client/shared/theme-switching.js
rename : browser/devtools/shared/theme.js => devtools/client/shared/theme.js
rename : browser/devtools/shared/undo.js => devtools/client/shared/undo.js
rename : browser/devtools/shared/vendor/D3_LICENSE => devtools/client/shared/vendor/D3_LICENSE
rename : browser/devtools/shared/vendor/DAGRE_D3_LICENSE => devtools/client/shared/vendor/DAGRE_D3_LICENSE
rename : browser/devtools/shared/vendor/REDUX_LICENSE => devtools/client/shared/vendor/REDUX_LICENSE
rename : browser/devtools/shared/vendor/d3.js => devtools/client/shared/vendor/d3.js
rename : browser/devtools/shared/vendor/dagre-d3.js => devtools/client/shared/vendor/dagre-d3.js
rename : browser/devtools/shared/vendor/moz.build => devtools/client/shared/vendor/moz.build
rename : browser/devtools/shared/vendor/react-dev.js => devtools/client/shared/vendor/react-dev.js
rename : browser/devtools/shared/vendor/react.js => devtools/client/shared/vendor/react.js
rename : browser/devtools/shared/vendor/redux.js => devtools/client/shared/vendor/redux.js
rename : browser/devtools/shared/widgets/AbstractTreeItem.jsm => devtools/client/shared/widgets/AbstractTreeItem.jsm
rename : browser/devtools/shared/widgets/BarGraphWidget.js => devtools/client/shared/widgets/BarGraphWidget.js
rename : browser/devtools/shared/widgets/BreadcrumbsWidget.jsm => devtools/client/shared/widgets/BreadcrumbsWidget.jsm
rename : browser/devtools/shared/widgets/Chart.jsm => devtools/client/shared/widgets/Chart.jsm
rename : browser/devtools/shared/widgets/CubicBezierPresets.js => devtools/client/shared/widgets/CubicBezierPresets.js
rename : browser/devtools/shared/widgets/CubicBezierWidget.js => devtools/client/shared/widgets/CubicBezierWidget.js
rename : browser/devtools/shared/widgets/FastListWidget.js => devtools/client/shared/widgets/FastListWidget.js
rename : browser/devtools/shared/widgets/FilterWidget.js => devtools/client/shared/widgets/FilterWidget.js
rename : browser/devtools/shared/widgets/FlameGraph.js => devtools/client/shared/widgets/FlameGraph.js
rename : browser/devtools/shared/widgets/Graphs.js => devtools/client/shared/widgets/Graphs.js
rename : browser/devtools/shared/widgets/GraphsWorker.js => devtools/client/shared/widgets/GraphsWorker.js
rename : browser/devtools/shared/widgets/LineGraphWidget.js => devtools/client/shared/widgets/LineGraphWidget.js
rename : browser/devtools/shared/widgets/MdnDocsWidget.js => devtools/client/shared/widgets/MdnDocsWidget.js
rename : browser/devtools/shared/widgets/MountainGraphWidget.js => devtools/client/shared/widgets/MountainGraphWidget.js
rename : browser/devtools/shared/widgets/SideMenuWidget.jsm => devtools/client/shared/widgets/SideMenuWidget.jsm
rename : browser/devtools/shared/widgets/SimpleListWidget.jsm => devtools/client/shared/widgets/SimpleListWidget.jsm
rename : browser/devtools/shared/widgets/Spectrum.js => devtools/client/shared/widgets/Spectrum.js
rename : browser/devtools/shared/widgets/TableWidget.js => devtools/client/shared/widgets/TableWidget.js
rename : browser/devtools/shared/widgets/Tooltip.js => devtools/client/shared/widgets/Tooltip.js
rename : browser/devtools/shared/widgets/TreeWidget.js => devtools/client/shared/widgets/TreeWidget.js
rename : browser/devtools/shared/widgets/VariablesView.jsm => devtools/client/shared/widgets/VariablesView.jsm
rename : browser/devtools/shared/widgets/VariablesView.xul => devtools/client/shared/widgets/VariablesView.xul
rename : browser/devtools/shared/widgets/VariablesViewController.jsm => devtools/client/shared/widgets/VariablesViewController.jsm
rename : browser/devtools/shared/widgets/ViewHelpers.jsm => devtools/client/shared/widgets/ViewHelpers.jsm
rename : browser/devtools/shared/widgets/cubic-bezier-frame.xhtml => devtools/client/shared/widgets/cubic-bezier-frame.xhtml
rename : browser/devtools/shared/widgets/cubic-bezier.css => devtools/client/shared/widgets/cubic-bezier.css
rename : browser/devtools/shared/widgets/filter-frame.xhtml => devtools/client/shared/widgets/filter-frame.xhtml
rename : browser/devtools/shared/widgets/filter-widget.css => devtools/client/shared/widgets/filter-widget.css
rename : browser/devtools/shared/widgets/graphs-frame.xhtml => devtools/client/shared/widgets/graphs-frame.xhtml
rename : browser/devtools/shared/widgets/mdn-docs-frame.xhtml => devtools/client/shared/widgets/mdn-docs-frame.xhtml
rename : browser/devtools/shared/widgets/mdn-docs.css => devtools/client/shared/widgets/mdn-docs.css
rename : browser/devtools/shared/widgets/spectrum-frame.xhtml => devtools/client/shared/widgets/spectrum-frame.xhtml
rename : browser/devtools/shared/widgets/spectrum.css => devtools/client/shared/widgets/spectrum.css
rename : browser/devtools/shared/widgets/widgets.css => devtools/client/shared/widgets/widgets.css
rename : browser/devtools/sourceeditor/autocomplete.js => devtools/client/sourceeditor/autocomplete.js
rename : browser/devtools/sourceeditor/codemirror/LICENSE => devtools/client/sourceeditor/codemirror/LICENSE
rename : browser/devtools/sourceeditor/codemirror/README => devtools/client/sourceeditor/codemirror/README
rename : browser/devtools/sourceeditor/codemirror/codemirror.css => devtools/client/sourceeditor/codemirror/codemirror.css
rename : browser/devtools/sourceeditor/codemirror/codemirror.js => devtools/client/sourceeditor/codemirror/codemirror.js
rename : browser/devtools/sourceeditor/codemirror/comment/comment.js => devtools/client/sourceeditor/codemirror/comment/comment.js
rename : browser/devtools/sourceeditor/codemirror/comment/continuecomment.js => devtools/client/sourceeditor/codemirror/comment/continuecomment.js
rename : browser/devtools/sourceeditor/codemirror/dialog/dialog.css => devtools/client/sourceeditor/codemirror/dialog/dialog.css
rename : browser/devtools/sourceeditor/codemirror/dialog/dialog.js => devtools/client/sourceeditor/codemirror/dialog/dialog.js
rename : browser/devtools/sourceeditor/codemirror/edit/closebrackets.js => devtools/client/sourceeditor/codemirror/edit/closebrackets.js
rename : browser/devtools/sourceeditor/codemirror/edit/closetag.js => devtools/client/sourceeditor/codemirror/edit/closetag.js
rename : browser/devtools/sourceeditor/codemirror/edit/continuelist.js => devtools/client/sourceeditor/codemirror/edit/continuelist.js
rename : browser/devtools/sourceeditor/codemirror/edit/matchbrackets.js => devtools/client/sourceeditor/codemirror/edit/matchbrackets.js
rename : browser/devtools/sourceeditor/codemirror/edit/matchtags.js => devtools/client/sourceeditor/codemirror/edit/matchtags.js
rename : browser/devtools/sourceeditor/codemirror/edit/trailingspace.js => devtools/client/sourceeditor/codemirror/edit/trailingspace.js
rename : browser/devtools/sourceeditor/codemirror/fold/brace-fold.js => devtools/client/sourceeditor/codemirror/fold/brace-fold.js
rename : browser/devtools/sourceeditor/codemirror/fold/comment-fold.js => devtools/client/sourceeditor/codemirror/fold/comment-fold.js
rename : browser/devtools/sourceeditor/codemirror/fold/foldcode.js => devtools/client/sourceeditor/codemirror/fold/foldcode.js
rename : browser/devtools/sourceeditor/codemirror/fold/foldgutter.css => devtools/client/sourceeditor/codemirror/fold/foldgutter.css
rename : browser/devtools/sourceeditor/codemirror/fold/foldgutter.js => devtools/client/sourceeditor/codemirror/fold/foldgutter.js
rename : browser/devtools/sourceeditor/codemirror/fold/indent-fold.js => devtools/client/sourceeditor/codemirror/fold/indent-fold.js
rename : browser/devtools/sourceeditor/codemirror/fold/markdown-fold.js => devtools/client/sourceeditor/codemirror/fold/markdown-fold.js
rename : browser/devtools/sourceeditor/codemirror/fold/xml-fold.js => devtools/client/sourceeditor/codemirror/fold/xml-fold.js
rename : browser/devtools/sourceeditor/codemirror/hint/show-hint.js => devtools/client/sourceeditor/codemirror/hint/show-hint.js
rename : browser/devtools/sourceeditor/codemirror/keymap/emacs.js => devtools/client/sourceeditor/codemirror/keymap/emacs.js
rename : browser/devtools/sourceeditor/codemirror/keymap/sublime.js => devtools/client/sourceeditor/codemirror/keymap/sublime.js
rename : browser/devtools/sourceeditor/codemirror/keymap/vim.js => devtools/client/sourceeditor/codemirror/keymap/vim.js
rename : browser/devtools/sourceeditor/codemirror/mode/clike.js => devtools/client/sourceeditor/codemirror/mode/clike.js
rename : browser/devtools/sourceeditor/codemirror/mode/css.js => devtools/client/sourceeditor/codemirror/mode/css.js
rename : browser/devtools/sourceeditor/codemirror/mode/htmlmixed.js => devtools/client/sourceeditor/codemirror/mode/htmlmixed.js
rename : browser/devtools/sourceeditor/codemirror/mode/javascript.js => devtools/client/sourceeditor/codemirror/mode/javascript.js
rename : browser/devtools/sourceeditor/codemirror/mode/xml.js => devtools/client/sourceeditor/codemirror/mode/xml.js
rename : browser/devtools/sourceeditor/codemirror/mozilla.css => devtools/client/sourceeditor/codemirror/mozilla.css
rename : browser/devtools/sourceeditor/codemirror/search/match-highlighter.js => devtools/client/sourceeditor/codemirror/search/match-highlighter.js
rename : browser/devtools/sourceeditor/codemirror/search/search.js => devtools/client/sourceeditor/codemirror/search/search.js
rename : browser/devtools/sourceeditor/codemirror/search/searchcursor.js => devtools/client/sourceeditor/codemirror/search/searchcursor.js
rename : browser/devtools/sourceeditor/codemirror/selection/active-line.js => devtools/client/sourceeditor/codemirror/selection/active-line.js
rename : browser/devtools/sourceeditor/codemirror/selection/mark-selection.js => devtools/client/sourceeditor/codemirror/selection/mark-selection.js
rename : browser/devtools/sourceeditor/codemirror/tern/tern.css => devtools/client/sourceeditor/codemirror/tern/tern.css
rename : browser/devtools/sourceeditor/codemirror/tern/tern.js => devtools/client/sourceeditor/codemirror/tern/tern.js
rename : browser/devtools/sourceeditor/css-autocompleter.js => devtools/client/sourceeditor/css-autocompleter.js
rename : browser/devtools/sourceeditor/css-tokenizer.js => devtools/client/sourceeditor/css-tokenizer.js
rename : browser/devtools/sourceeditor/debugger.js => devtools/client/sourceeditor/debugger.js
rename : browser/devtools/sourceeditor/editor.js => devtools/client/sourceeditor/editor.js
rename : browser/devtools/sourceeditor/moz.build => devtools/client/sourceeditor/moz.build
rename : browser/devtools/sourceeditor/test/.eslintrc => devtools/client/sourceeditor/test/.eslintrc
rename : browser/devtools/sourceeditor/test/browser.ini => devtools/client/sourceeditor/test/browser.ini
rename : browser/devtools/sourceeditor/test/browser_codemirror.js => devtools/client/sourceeditor/test/browser_codemirror.js
rename : browser/devtools/sourceeditor/test/browser_css_autocompletion.js => devtools/client/sourceeditor/test/browser_css_autocompletion.js
rename : browser/devtools/sourceeditor/test/browser_css_getInfo.js => devtools/client/sourceeditor/test/browser_css_getInfo.js
rename : browser/devtools/sourceeditor/test/browser_css_statemachine.js => devtools/client/sourceeditor/test/browser_css_statemachine.js
rename : browser/devtools/sourceeditor/test/browser_detectindent.js => devtools/client/sourceeditor/test/browser_detectindent.js
rename : browser/devtools/sourceeditor/test/browser_editor_addons.js => devtools/client/sourceeditor/test/browser_editor_addons.js
rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_basic.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_basic.js
rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_events.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_events.js
rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_js.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_js.js
rename : browser/devtools/sourceeditor/test/browser_editor_basic.js => devtools/client/sourceeditor/test/browser_editor_basic.js
rename : browser/devtools/sourceeditor/test/browser_editor_cursor.js => devtools/client/sourceeditor/test/browser_editor_cursor.js
rename : browser/devtools/sourceeditor/test/browser_editor_find_again.js => devtools/client/sourceeditor/test/browser_editor_find_again.js
rename : browser/devtools/sourceeditor/test/browser_editor_goto_line.js => devtools/client/sourceeditor/test/browser_editor_goto_line.js
rename : browser/devtools/sourceeditor/test/browser_editor_history.js => devtools/client/sourceeditor/test/browser_editor_history.js
rename : browser/devtools/sourceeditor/test/browser_editor_markers.js => devtools/client/sourceeditor/test/browser_editor_markers.js
rename : browser/devtools/sourceeditor/test/browser_editor_movelines.js => devtools/client/sourceeditor/test/browser_editor_movelines.js
rename : browser/devtools/sourceeditor/test/browser_editor_prefs.js => devtools/client/sourceeditor/test/browser_editor_prefs.js
rename : browser/devtools/sourceeditor/test/browser_editor_script_injection.js => devtools/client/sourceeditor/test/browser_editor_script_injection.js
rename : browser/devtools/sourceeditor/test/browser_vimemacs.js => devtools/client/sourceeditor/test/browser_vimemacs.js
rename : browser/devtools/sourceeditor/test/cm_comment_test.js => devtools/client/sourceeditor/test/cm_comment_test.js
rename : browser/devtools/sourceeditor/test/cm_doc_test.js => devtools/client/sourceeditor/test/cm_doc_test.js
rename : browser/devtools/sourceeditor/test/cm_driver.js => devtools/client/sourceeditor/test/cm_driver.js
rename : browser/devtools/sourceeditor/test/cm_emacs_test.js => devtools/client/sourceeditor/test/cm_emacs_test.js
rename : browser/devtools/sourceeditor/test/cm_mode_javascript_test.js => devtools/client/sourceeditor/test/cm_mode_javascript_test.js
rename : browser/devtools/sourceeditor/test/cm_mode_ruby.js => devtools/client/sourceeditor/test/cm_mode_ruby.js
rename : browser/devtools/sourceeditor/test/cm_mode_test.css => devtools/client/sourceeditor/test/cm_mode_test.css
rename : browser/devtools/sourceeditor/test/cm_mode_test.js => devtools/client/sourceeditor/test/cm_mode_test.js
rename : browser/devtools/sourceeditor/test/cm_multi_test.js => devtools/client/sourceeditor/test/cm_multi_test.js
rename : browser/devtools/sourceeditor/test/cm_script_injection_test.js => devtools/client/sourceeditor/test/cm_script_injection_test.js
rename : browser/devtools/sourceeditor/test/cm_search_test.js => devtools/client/sourceeditor/test/cm_search_test.js
rename : browser/devtools/sourceeditor/test/cm_sublime_test.js => devtools/client/sourceeditor/test/cm_sublime_test.js
rename : browser/devtools/sourceeditor/test/cm_test.js => devtools/client/sourceeditor/test/cm_test.js
rename : browser/devtools/sourceeditor/test/cm_vim_test.js => devtools/client/sourceeditor/test/cm_vim_test.js
rename : browser/devtools/sourceeditor/test/codemirror.html => devtools/client/sourceeditor/test/codemirror.html
rename : browser/devtools/sourceeditor/test/css_autocompletion_tests.json => devtools/client/sourceeditor/test/css_autocompletion_tests.json
rename : browser/devtools/sourceeditor/test/css_statemachine_testcases.css => devtools/client/sourceeditor/test/css_statemachine_testcases.css
rename : browser/devtools/sourceeditor/test/css_statemachine_tests.json => devtools/client/sourceeditor/test/css_statemachine_tests.json
rename : browser/devtools/sourceeditor/test/head.js => devtools/client/sourceeditor/test/head.js
rename : browser/devtools/sourceeditor/test/helper_codemirror_runner.js => devtools/client/sourceeditor/test/helper_codemirror_runner.js
rename : browser/devtools/sourceeditor/test/vimemacs.html => devtools/client/sourceeditor/test/vimemacs.html
rename : browser/devtools/storage/moz.build => devtools/client/storage/moz.build
rename : browser/devtools/storage/panel.js => devtools/client/storage/panel.js
rename : browser/devtools/storage/storage.xul => devtools/client/storage/storage.xul
rename : browser/devtools/storage/test/.eslintrc => devtools/client/storage/test/.eslintrc
rename : browser/devtools/storage/test/browser.ini => devtools/client/storage/test/browser.ini
rename : browser/devtools/storage/test/browser_storage_basic.js => devtools/client/storage/test/browser_storage_basic.js
rename : browser/devtools/storage/test/browser_storage_dynamic_updates.js => devtools/client/storage/test/browser_storage_dynamic_updates.js
rename : browser/devtools/storage/test/browser_storage_sidebar.js => devtools/client/storage/test/browser_storage_sidebar.js
rename : browser/devtools/storage/test/browser_storage_values.js => devtools/client/storage/test/browser_storage_values.js
rename : browser/devtools/storage/test/head.js => devtools/client/storage/test/head.js
rename : browser/devtools/storage/test/storage-complex-values.html => devtools/client/storage/test/storage-complex-values.html
rename : browser/devtools/storage/test/storage-listings.html => devtools/client/storage/test/storage-listings.html
rename : browser/devtools/storage/test/storage-secured-iframe.html => devtools/client/storage/test/storage-secured-iframe.html
rename : browser/devtools/storage/test/storage-unsecured-iframe.html => devtools/client/storage/test/storage-unsecured-iframe.html
rename : browser/devtools/storage/test/storage-updates.html => devtools/client/storage/test/storage-updates.html
rename : browser/devtools/storage/ui.js => devtools/client/storage/ui.js
rename : browser/devtools/styleeditor/StyleEditorUI.jsm => devtools/client/styleeditor/StyleEditorUI.jsm
rename : browser/devtools/styleeditor/StyleEditorUtil.jsm => devtools/client/styleeditor/StyleEditorUtil.jsm
rename : browser/devtools/styleeditor/StyleSheetEditor.jsm => devtools/client/styleeditor/StyleSheetEditor.jsm
rename : browser/devtools/styleeditor/moz.build => devtools/client/styleeditor/moz.build
rename : browser/devtools/styleeditor/styleeditor-commands.js => devtools/client/styleeditor/styleeditor-commands.js
rename : browser/devtools/styleeditor/styleeditor-panel.js => devtools/client/styleeditor/styleeditor-panel.js
rename : browser/devtools/styleeditor/styleeditor.css => devtools/client/styleeditor/styleeditor.css
rename : browser/devtools/styleeditor/styleeditor.xul => devtools/client/styleeditor/styleeditor.xul
rename : browser/devtools/styleeditor/test/.eslintrc => devtools/client/styleeditor/test/.eslintrc
rename : browser/devtools/styleeditor/test/autocomplete.html => devtools/client/styleeditor/test/autocomplete.html
rename : browser/devtools/styleeditor/test/browser.ini => devtools/client/styleeditor/test/browser.ini
rename : browser/devtools/styleeditor/test/browser_styleeditor_autocomplete-disabled.js => devtools/client/styleeditor/test/browser_styleeditor_autocomplete-disabled.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_autocomplete.js => devtools/client/styleeditor/test/browser_styleeditor_autocomplete.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_740541_iframes.js => devtools/client/styleeditor/test/browser_styleeditor_bug_740541_iframes.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_851132_middle_click.js => devtools/client/styleeditor/test/browser_styleeditor_bug_851132_middle_click.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_870339.js => devtools/client/styleeditor/test/browser_styleeditor_bug_870339.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_cmd_edit.html => devtools/client/styleeditor/test/browser_styleeditor_cmd_edit.html
rename : browser/devtools/styleeditor/test/browser_styleeditor_cmd_edit.js => devtools/client/styleeditor/test/browser_styleeditor_cmd_edit.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_enabled.js => devtools/client/styleeditor/test/browser_styleeditor_enabled.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_fetch-from-cache.js => devtools/client/styleeditor/test/browser_styleeditor_fetch-from-cache.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_filesave.js => devtools/client/styleeditor/test/browser_styleeditor_filesave.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_highlight-selector.js => devtools/client/styleeditor/test/browser_styleeditor_highlight-selector.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_import.js => devtools/client/styleeditor/test/browser_styleeditor_import.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_import_rule.js => devtools/client/styleeditor/test/browser_styleeditor_import_rule.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_init.js => devtools/client/styleeditor/test/browser_styleeditor_init.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_inline_friendly_names.js => devtools/client/styleeditor/test/browser_styleeditor_inline_friendly_names.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_loading.js => devtools/client/styleeditor/test/browser_styleeditor_loading.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar.js => devtools/client/styleeditor/test/browser_styleeditor_media_sidebar.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js => devtools/client/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_missing_stylesheet.js => devtools/client/styleeditor/test/browser_styleeditor_missing_stylesheet.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_navigate.js => devtools/client/styleeditor/test/browser_styleeditor_navigate.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_new.js => devtools/client/styleeditor/test/browser_styleeditor_new.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_nostyle.js => devtools/client/styleeditor/test/browser_styleeditor_nostyle.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_opentab.js => devtools/client/styleeditor/test/browser_styleeditor_opentab.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_pretty.js => devtools/client/styleeditor/test/browser_styleeditor_pretty.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_private_perwindowpb.js => devtools/client/styleeditor/test/browser_styleeditor_private_perwindowpb.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_reload.js => devtools/client/styleeditor/test/browser_styleeditor_reload.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_scroll.js => devtools/client/styleeditor/test/browser_styleeditor_scroll.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js => devtools/client/styleeditor/test/browser_styleeditor_selectstylesheet.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_large.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemap_large.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_watching.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemap_watching.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemaps.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_sv_keynav.js => devtools/client/styleeditor/test/browser_styleeditor_sv_keynav.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_sv_resize.js => devtools/client/styleeditor/test/browser_styleeditor_sv_resize.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_transition_rule.js => devtools/client/styleeditor/test/browser_styleeditor_transition_rule.js
rename : browser/devtools/styleeditor/test/browser_styleeditor_xul.js => devtools/client/styleeditor/test/browser_styleeditor_xul.js
rename : browser/devtools/styleeditor/test/doc_long.css => devtools/client/styleeditor/test/doc_long.css
rename : browser/devtools/styleeditor/test/doc_uncached.css => devtools/client/styleeditor/test/doc_uncached.css
rename : browser/devtools/styleeditor/test/doc_uncached.html => devtools/client/styleeditor/test/doc_uncached.html
rename : browser/devtools/styleeditor/test/doc_xulpage.xul => devtools/client/styleeditor/test/doc_xulpage.xul
rename : browser/devtools/styleeditor/test/four.html => devtools/client/styleeditor/test/four.html
rename : browser/devtools/styleeditor/test/head.js => devtools/client/styleeditor/test/head.js
rename : browser/devtools/styleeditor/test/import.css => devtools/client/styleeditor/test/import.css
rename : browser/devtools/styleeditor/test/import.html => devtools/client/styleeditor/test/import.html
rename : browser/devtools/styleeditor/test/import2.css => devtools/client/styleeditor/test/import2.css
rename : browser/devtools/styleeditor/test/inline-1.html => devtools/client/styleeditor/test/inline-1.html
rename : browser/devtools/styleeditor/test/inline-2.html => devtools/client/styleeditor/test/inline-2.html
rename : browser/devtools/styleeditor/test/longload.html => devtools/client/styleeditor/test/longload.html
rename : browser/devtools/styleeditor/test/media-rules-sourcemaps.html => devtools/client/styleeditor/test/media-rules-sourcemaps.html
rename : browser/devtools/styleeditor/test/media-rules.css => devtools/client/styleeditor/test/media-rules.css
rename : browser/devtools/styleeditor/test/media-rules.html => devtools/client/styleeditor/test/media-rules.html
rename : browser/devtools/styleeditor/test/media-small.css => devtools/client/styleeditor/test/media-small.css
rename : browser/devtools/styleeditor/test/media.html => devtools/client/styleeditor/test/media.html
rename : browser/devtools/styleeditor/test/minified.html => devtools/client/styleeditor/test/minified.html
rename : browser/devtools/styleeditor/test/missing.html => devtools/client/styleeditor/test/missing.html
rename : browser/devtools/styleeditor/test/nostyle.html => devtools/client/styleeditor/test/nostyle.html
rename : browser/devtools/styleeditor/test/pretty.css => devtools/client/styleeditor/test/pretty.css
rename : browser/devtools/styleeditor/test/resources_inpage.jsi => devtools/client/styleeditor/test/resources_inpage.jsi
rename : browser/devtools/styleeditor/test/resources_inpage1.css => devtools/client/styleeditor/test/resources_inpage1.css
rename : browser/devtools/styleeditor/test/resources_inpage2.css => devtools/client/styleeditor/test/resources_inpage2.css
rename : browser/devtools/styleeditor/test/simple.css => devtools/client/styleeditor/test/simple.css
rename : browser/devtools/styleeditor/test/simple.css.gz => devtools/client/styleeditor/test/simple.css.gz
rename : browser/devtools/styleeditor/test/simple.css.gz^headers^ => devtools/client/styleeditor/test/simple.css.gz^headers^
rename : browser/devtools/styleeditor/test/simple.gz.html => devtools/client/styleeditor/test/simple.gz.html
rename : browser/devtools/styleeditor/test/simple.html => devtools/client/styleeditor/test/simple.html
rename : browser/devtools/styleeditor/test/sourcemap-css/contained.css => devtools/client/styleeditor/test/sourcemap-css/contained.css
rename : browser/devtools/styleeditor/test/sourcemap-css/media-rules.css => devtools/client/styleeditor/test/sourcemap-css/media-rules.css
rename : browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map => devtools/client/styleeditor/test/sourcemap-css/media-rules.css.map
rename : browser/devtools/styleeditor/test/sourcemap-css/sourcemaps.css => devtools/client/styleeditor/test/sourcemap-css/sourcemaps.css
rename : browser/devtools/styleeditor/test/sourcemap-css/sourcemaps.css.map => devtools/client/styleeditor/test/sourcemap-css/sourcemaps.css.map
rename : browser/devtools/styleeditor/test/sourcemap-css/test-bootstrap-scss.css => devtools/client/styleeditor/test/sourcemap-css/test-bootstrap-scss.css
rename : browser/devtools/styleeditor/test/sourcemap-css/test-stylus.css => devtools/client/styleeditor/test/sourcemap-css/test-stylus.css
rename : browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss => devtools/client/styleeditor/test/sourcemap-sass/media-rules.scss
rename : browser/devtools/styleeditor/test/sourcemap-sass/sourcemaps.scss => devtools/client/styleeditor/test/sourcemap-sass/sourcemaps.scss
rename : browser/devtools/styleeditor/test/sourcemap-styl/test-stylus.styl => devtools/client/styleeditor/test/sourcemap-styl/test-stylus.styl
rename : browser/devtools/styleeditor/test/sourcemaps-large.html => devtools/client/styleeditor/test/sourcemaps-large.html
rename : browser/devtools/styleeditor/test/sourcemaps-watching.html => devtools/client/styleeditor/test/sourcemaps-watching.html
rename : browser/devtools/styleeditor/test/sourcemaps.html => devtools/client/styleeditor/test/sourcemaps.html
rename : browser/devtools/styleeditor/test/test_private.css => devtools/client/styleeditor/test/test_private.css
rename : browser/devtools/styleeditor/test/test_private.html => devtools/client/styleeditor/test/test_private.html
rename : browser/devtools/styleeditor/utils.js => devtools/client/styleeditor/utils.js
rename : browser/devtools/styleinspector/computed-view.js => devtools/client/styleinspector/computed-view.js
rename : browser/devtools/styleinspector/computedview.xhtml => devtools/client/styleinspector/computedview.xhtml
rename : browser/devtools/styleinspector/css-parsing-utils.js => devtools/client/styleinspector/css-parsing-utils.js
rename : browser/devtools/styleinspector/cssruleview.xhtml => devtools/client/styleinspector/cssruleview.xhtml
rename : browser/devtools/styleinspector/moz.build => devtools/client/styleinspector/moz.build
rename : browser/devtools/styleinspector/rule-view.js => devtools/client/styleinspector/rule-view.js
rename : browser/devtools/styleinspector/ruleview.css => devtools/client/styleinspector/ruleview.css
rename : browser/devtools/styleinspector/style-inspector-menu.js => devtools/client/styleinspector/style-inspector-menu.js
rename : browser/devtools/styleinspector/style-inspector-overlays.js => devtools/client/styleinspector/style-inspector-overlays.js
rename : browser/devtools/styleinspector/style-inspector.js => devtools/client/styleinspector/style-inspector.js
rename : browser/devtools/styleinspector/test/.eslintrc => devtools/client/styleinspector/test/.eslintrc
rename : browser/devtools/styleinspector/test/browser.ini => devtools/client/styleinspector/test/browser.ini
rename : browser/devtools/styleinspector/test/browser_computedview_browser-styles.js => devtools/client/styleinspector/test/browser_computedview_browser-styles.js
rename : browser/devtools/styleinspector/test/browser_computedview_cycle_color.js => devtools/client/styleinspector/test/browser_computedview_cycle_color.js
rename : browser/devtools/styleinspector/test/browser_computedview_getNodeInfo.js => devtools/client/styleinspector/test/browser_computedview_getNodeInfo.js
rename : browser/devtools/styleinspector/test/browser_computedview_keybindings_01.js => devtools/client/styleinspector/test/browser_computedview_keybindings_01.js
rename : browser/devtools/styleinspector/test/browser_computedview_keybindings_02.js => devtools/client/styleinspector/test/browser_computedview_keybindings_02.js
rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors-toggle.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors-toggle.js
rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors_01.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors_01.js
rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors_02.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors_02.js
rename : browser/devtools/styleinspector/test/browser_computedview_media-queries.js => devtools/client/styleinspector/test/browser_computedview_media-queries.js
rename : browser/devtools/styleinspector/test/browser_computedview_no-results-placeholder.js => devtools/client/styleinspector/test/browser_computedview_no-results-placeholder.js
rename : browser/devtools/styleinspector/test/browser_computedview_original-source-link.js => devtools/client/styleinspector/test/browser_computedview_original-source-link.js
rename : browser/devtools/styleinspector/test/browser_computedview_pseudo-element_01.js => devtools/client/styleinspector/test/browser_computedview_pseudo-element_01.js
rename : browser/devtools/styleinspector/test/browser_computedview_refresh-on-style-change_01.js => devtools/client/styleinspector/test/browser_computedview_refresh-on-style-change_01.js
rename : browser/devtools/styleinspector/test/browser_computedview_search-filter.js => devtools/client/styleinspector/test/browser_computedview_search-filter.js
rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_clear.js => devtools/client/styleinspector/test/browser_computedview_search-filter_clear.js
rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_context-menu.js => devtools/client/styleinspector/test/browser_computedview_search-filter_context-menu.js
rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_escape-keypress.js => devtools/client/styleinspector/test/browser_computedview_search-filter_escape-keypress.js
rename : browser/devtools/styleinspector/test/browser_computedview_select-and-copy-styles.js => devtools/client/styleinspector/test/browser_computedview_select-and-copy-styles.js
rename : browser/devtools/styleinspector/test/browser_computedview_style-editor-link.js => devtools/client/styleinspector/test/browser_computedview_style-editor-link.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-and-reselect.js => devtools/client/styleinspector/test/browser_ruleview_add-property-and-reselect.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_01.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_02.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_03.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-svg.js => devtools/client/styleinspector/test/browser_ruleview_add-property-svg.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property_01.js => devtools/client/styleinspector/test/browser_ruleview_add-property_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-property_02.js => devtools/client/styleinspector/test/browser_ruleview_add-property_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_01.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_02.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_03.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_04.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_pseudo_class.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_pseudo_class.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_01.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_02.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-appears-on-swatch-click.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-commit-on-ENTER.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-edit-gradient.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-edit-gradient.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-hides-on-tooltip.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-hides-on-tooltip.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-multiple-changes.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-multiple-changes.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-release-outside-frame.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-release-outside-frame.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-revert-on-ESC.js
rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-swatch-displayed.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-swatch-displayed.js
rename : browser/devtools/styleinspector/test/browser_ruleview_completion-existing-property_01.js => devtools/client/styleinspector/test/browser_ruleview_completion-existing-property_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_completion-existing-property_02.js => devtools/client/styleinspector/test/browser_ruleview_completion-existing-property_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_completion-new-property_01.js => devtools/client/styleinspector/test/browser_ruleview_completion-new-property_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_completion-new-property_02.js => devtools/client/styleinspector/test/browser_ruleview_completion-new-property_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_completion-popup-hidden-after-navigation.js => devtools/client/styleinspector/test/browser_ruleview_completion-popup-hidden-after-navigation.js
rename : browser/devtools/styleinspector/test/browser_ruleview_computed-lists_01.js => devtools/client/styleinspector/test/browser_ruleview_computed-lists_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_computed-lists_02.js => devtools/client/styleinspector/test/browser_ruleview_computed-lists_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_content_01.js => devtools/client/styleinspector/test/browser_ruleview_content_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_content_02.js => devtools/client/styleinspector/test/browser_ruleview_content_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_copy_styles.js => devtools/client/styleinspector/test/browser_ruleview_copy_styles.js
rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-appears-on-swatch-click.js
rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-commit-on-ENTER.js
rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-revert-on-ESC.js
rename : browser/devtools/styleinspector/test/browser_ruleview_custom.js => devtools/client/styleinspector/test/browser_ruleview_custom.js
rename : browser/devtools/styleinspector/test/browser_ruleview_cycle-color.js => devtools/client/styleinspector/test/browser_ruleview_cycle-color.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-cancel.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-cancel.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-commit.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-commit.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-computed.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-computed.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-increments.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-increments.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-order.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-order.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_04.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_05.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_05.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_06.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_06.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_07.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_07.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector-commit.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector-commit.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_04.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_05.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_05.js
rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_06.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_06.js
rename : browser/devtools/styleinspector/test/browser_ruleview_editable-field-focus_01.js => devtools/client/styleinspector/test/browser_ruleview_editable-field-focus_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_editable-field-focus_02.js => devtools/client/styleinspector/test/browser_ruleview_editable-field-focus_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_eyedropper.js => devtools/client/styleinspector/test/browser_ruleview_eyedropper.js
rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-appears-on-swatch-click.js
rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-commit-on-ENTER.js
rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-revert-on-ESC.js
rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_01.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_02.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_03.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_keybindings.js => devtools/client/styleinspector/test/browser_ruleview_keybindings.js
rename : browser/devtools/styleinspector/test/browser_ruleview_keyframes-rule_01.js => devtools/client/styleinspector/test/browser_ruleview_keyframes-rule_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_keyframes-rule_02.js => devtools/client/styleinspector/test/browser_ruleview_keyframes-rule_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_livepreview.js => devtools/client/styleinspector/test/browser_ruleview_livepreview.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_01.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_02.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_03.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_04.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_05.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_05.js
rename : browser/devtools/styleinspector/test/browser_ruleview_mathml-element.js => devtools/client/styleinspector/test/browser_ruleview_mathml-element.js
rename : browser/devtools/styleinspector/test/browser_ruleview_media-queries.js => devtools/client/styleinspector/test/browser_ruleview_media-queries.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-duplicates.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-duplicates.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-priority.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-priority.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-unfinished_01.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-unfinished_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-unfinished_02.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-unfinished_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple_properties_01.js => devtools/client/styleinspector/test/browser_ruleview_multiple_properties_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_multiple_properties_02.js => devtools/client/styleinspector/test/browser_ruleview_multiple_properties_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_original-source-link.js => devtools/client/styleinspector/test/browser_ruleview_original-source-link.js
rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo-element_01.js => devtools/client/styleinspector/test/browser_ruleview_pseudo-element_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo-element_02.js => devtools/client/styleinspector/test/browser_ruleview_pseudo-element_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo_lock_options.js => devtools/client/styleinspector/test/browser_ruleview_pseudo_lock_options.js
rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-attribute-change_01.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-attribute-change_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-attribute-change_02.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-attribute-change_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-style-change.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-style-change.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_01.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_02.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_03.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_04.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_expander.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_expander.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-overridden-property.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-overridden-property.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_01.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_02.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_03.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_04.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_04.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_05.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_05.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_06.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_06.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_07.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_07.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_08.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_08.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_09.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_09.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_10.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_10.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_context-menu.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_context-menu.js
rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_escape-keypress.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_escape-keypress.js
rename : browser/devtools/styleinspector/test/browser_ruleview_select-and-copy-styles.js => devtools/client/styleinspector/test/browser_ruleview_select-and-copy-styles.js
rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_01.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_02.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_03.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_selector_highlight.js => devtools/client/styleinspector/test/browser_ruleview_selector_highlight.js
rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter-computed-list_01.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter-computed-list_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_01.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_01.js
rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_02.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_02.js
rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_03.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_03.js
rename : browser/devtools/styleinspector/test/browser_ruleview_style-editor-link.js => devtools/client/styleinspector/test/browser_ruleview_style-editor-link.js
rename : browser/devtools/styleinspector/test/browser_ruleview_urls-clickable.js => devtools/client/styleinspector/test/browser_ruleview_urls-clickable.js
rename : browser/devtools/styleinspector/test/browser_ruleview_user-agent-styles-uneditable.js => devtools/client/styleinspector/test/browser_ruleview_user-agent-styles-uneditable.js
rename : browser/devtools/styleinspector/test/browser_ruleview_user-agent-styles.js => devtools/client/styleinspector/test/browser_ruleview_user-agent-styles.js
rename : browser/devtools/styleinspector/test/browser_ruleview_user-property-reset.js => devtools/client/styleinspector/test/browser_ruleview_user-property-reset.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-color_01.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-color_01.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-color_02.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-color_02.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_csslogic-content-stylesheets.js => devtools/client/styleinspector/test/browser_styleinspector_csslogic-content-stylesheets.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_output-parser.js => devtools/client/styleinspector/test/browser_styleinspector_output-parser.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_refresh_when_active.js => devtools/client/styleinspector/test/browser_styleinspector_refresh_when_active.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-background-image.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-background-image.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-closes-on-new-selection.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-closes-on-new-selection.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-longhand-fontfamily.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-longhand-fontfamily.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-multiple-background-images.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-multiple-background-images.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-shorthand-fontfamily.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-shorthand-fontfamily.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-size.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-size.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-01.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-01.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-02.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-02.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-03.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-03.js
rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-04.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-04.js
rename : browser/devtools/styleinspector/test/doc_content_stylesheet.html => devtools/client/styleinspector/test/doc_content_stylesheet.html
rename : browser/devtools/styleinspector/test/doc_content_stylesheet.xul => devtools/client/styleinspector/test/doc_content_stylesheet.xul
rename : browser/devtools/styleinspector/test/doc_content_stylesheet_imported.css => devtools/client/styleinspector/test/doc_content_stylesheet_imported.css
rename : browser/devtools/styleinspector/test/doc_content_stylesheet_imported2.css => devtools/client/styleinspector/test/doc_content_stylesheet_imported2.css
rename : browser/devtools/styleinspector/test/doc_content_stylesheet_linked.css => devtools/client/styleinspector/test/doc_content_stylesheet_linked.css
rename : browser/devtools/styleinspector/test/doc_content_stylesheet_script.css => devtools/client/styleinspector/test/doc_content_stylesheet_script.css
rename : browser/devtools/styleinspector/test/doc_content_stylesheet_xul.css => devtools/client/styleinspector/test/doc_content_stylesheet_xul.css
rename : browser/devtools/styleinspector/test/doc_copystyles.css => devtools/client/styleinspector/test/doc_copystyles.css
rename : browser/devtools/styleinspector/test/doc_copystyles.html => devtools/client/styleinspector/test/doc_copystyles.html
rename : browser/devtools/styleinspector/test/doc_custom.html => devtools/client/styleinspector/test/doc_custom.html
rename : browser/devtools/styleinspector/test/doc_filter.html => devtools/client/styleinspector/test/doc_filter.html
rename : browser/devtools/styleinspector/test/doc_frame_script.js => devtools/client/styleinspector/test/doc_frame_script.js
rename : browser/devtools/styleinspector/test/doc_keyframeanimation.css => devtools/client/styleinspector/test/doc_keyframeanimation.css
rename : browser/devtools/styleinspector/test/doc_keyframeanimation.html => devtools/client/styleinspector/test/doc_keyframeanimation.html
rename : browser/devtools/styleinspector/test/doc_matched_selectors.html => devtools/client/styleinspector/test/doc_matched_selectors.html
rename : browser/devtools/styleinspector/test/doc_media_queries.html => devtools/client/styleinspector/test/doc_media_queries.html
rename : browser/devtools/styleinspector/test/doc_pseudoelement.html => devtools/client/styleinspector/test/doc_pseudoelement.html
rename : browser/devtools/styleinspector/test/doc_sourcemaps.css => devtools/client/styleinspector/test/doc_sourcemaps.css
rename : browser/devtools/styleinspector/test/doc_sourcemaps.css.map => devtools/client/styleinspector/test/doc_sourcemaps.css.map
rename : browser/devtools/styleinspector/test/doc_sourcemaps.html => devtools/client/styleinspector/test/doc_sourcemaps.html
rename : browser/devtools/styleinspector/test/doc_sourcemaps.scss => devtools/client/styleinspector/test/doc_sourcemaps.scss
rename : browser/devtools/styleinspector/test/doc_style_editor_link.css => devtools/client/styleinspector/test/doc_style_editor_link.css
rename : browser/devtools/styleinspector/test/doc_test_image.png => devtools/client/styleinspector/test/doc_test_image.png
rename : browser/devtools/styleinspector/test/doc_urls_clickable.css => devtools/client/styleinspector/test/doc_urls_clickable.css
rename : browser/devtools/styleinspector/test/doc_urls_clickable.html => devtools/client/styleinspector/test/doc_urls_clickable.html
rename : browser/devtools/styleinspector/test/head.js => devtools/client/styleinspector/test/head.js
rename : browser/devtools/styleinspector/test/unit/.eslintrc => devtools/client/styleinspector/test/unit/.eslintrc
rename : browser/devtools/styleinspector/test/unit/test_parseDeclarations.js => devtools/client/styleinspector/test/unit/test_parseDeclarations.js
rename : browser/devtools/styleinspector/test/unit/test_parsePseudoClassesAndAttributes.js => devtools/client/styleinspector/test/unit/test_parsePseudoClassesAndAttributes.js
rename : browser/devtools/styleinspector/test/unit/test_parseSingleValue.js => devtools/client/styleinspector/test/unit/test_parseSingleValue.js
rename : browser/devtools/styleinspector/test/unit/xpcshell.ini => devtools/client/styleinspector/test/unit/xpcshell.ini
rename : browser/devtools/styleinspector/utils.js => devtools/client/styleinspector/utils.js
rename : browser/devtools/tilt/TiltWorkerCrafter.js => devtools/client/tilt/TiltWorkerCrafter.js
rename : browser/devtools/tilt/TiltWorkerPicker.js => devtools/client/tilt/TiltWorkerPicker.js
rename : browser/devtools/tilt/moz.build => devtools/client/tilt/moz.build
rename : browser/devtools/tilt/test/.eslintrc => devtools/client/tilt/test/.eslintrc
rename : browser/devtools/tilt/test/browser.ini => devtools/client/tilt/test/browser.ini
rename : browser/devtools/tilt/test/browser_tilt_01_lazy_getter.js => devtools/client/tilt/test/browser_tilt_01_lazy_getter.js
rename : browser/devtools/tilt/test/browser_tilt_02_notifications-seq.js => devtools/client/tilt/test/browser_tilt_02_notifications-seq.js
rename : browser/devtools/tilt/test/browser_tilt_02_notifications-tabs.js => devtools/client/tilt/test/browser_tilt_02_notifications-tabs.js
rename : browser/devtools/tilt/test/browser_tilt_02_notifications.js => devtools/client/tilt/test/browser_tilt_02_notifications.js
rename : browser/devtools/tilt/test/browser_tilt_03_tab_switch.js => devtools/client/tilt/test/browser_tilt_03_tab_switch.js
rename : browser/devtools/tilt/test/browser_tilt_04_initialization.js => devtools/client/tilt/test/browser_tilt_04_initialization.js
rename : browser/devtools/tilt/test/browser_tilt_05_destruction-esc.js => devtools/client/tilt/test/browser_tilt_05_destruction-esc.js
rename : browser/devtools/tilt/test/browser_tilt_05_destruction-url.js => devtools/client/tilt/test/browser_tilt_05_destruction-url.js
rename : browser/devtools/tilt/test/browser_tilt_05_destruction.js => devtools/client/tilt/test/browser_tilt_05_destruction.js
rename : browser/devtools/tilt/test/browser_tilt_arcball-reset-typeahead.js => devtools/client/tilt/test/browser_tilt_arcball-reset-typeahead.js
rename : browser/devtools/tilt/test/browser_tilt_arcball-reset.js => devtools/client/tilt/test/browser_tilt_arcball-reset.js
rename : browser/devtools/tilt/test/browser_tilt_arcball.js => devtools/client/tilt/test/browser_tilt_arcball.js
rename : browser/devtools/tilt/test/browser_tilt_controller.js => devtools/client/tilt/test/browser_tilt_controller.js
rename : browser/devtools/tilt/test/browser_tilt_gl01.js => devtools/client/tilt/test/browser_tilt_gl01.js
rename : browser/devtools/tilt/test/browser_tilt_gl02.js => devtools/client/tilt/test/browser_tilt_gl02.js
rename : browser/devtools/tilt/test/browser_tilt_gl03.js => devtools/client/tilt/test/browser_tilt_gl03.js
rename : browser/devtools/tilt/test/browser_tilt_gl04.js => devtools/client/tilt/test/browser_tilt_gl04.js
rename : browser/devtools/tilt/test/browser_tilt_gl05.js => devtools/client/tilt/test/browser_tilt_gl05.js
rename : browser/devtools/tilt/test/browser_tilt_gl06.js => devtools/client/tilt/test/browser_tilt_gl06.js
rename : browser/devtools/tilt/test/browser_tilt_gl07.js => devtools/client/tilt/test/browser_tilt_gl07.js
rename : browser/devtools/tilt/test/browser_tilt_gl08.js => devtools/client/tilt/test/browser_tilt_gl08.js
rename : browser/devtools/tilt/test/browser_tilt_math01.js => devtools/client/tilt/test/browser_tilt_math01.js
rename : browser/devtools/tilt/test/browser_tilt_math02.js => devtools/client/tilt/test/browser_tilt_math02.js
rename : browser/devtools/tilt/test/browser_tilt_math03.js => devtools/client/tilt/test/browser_tilt_math03.js
rename : browser/devtools/tilt/test/browser_tilt_math04.js => devtools/client/tilt/test/browser_tilt_math04.js
rename : browser/devtools/tilt/test/browser_tilt_math05.js => devtools/client/tilt/test/browser_tilt_math05.js
rename : browser/devtools/tilt/test/browser_tilt_math06.js => devtools/client/tilt/test/browser_tilt_math06.js
rename : browser/devtools/tilt/test/browser_tilt_math07.js => devtools/client/tilt/test/browser_tilt_math07.js
rename : browser/devtools/tilt/test/browser_tilt_picking.js => devtools/client/tilt/test/browser_tilt_picking.js
rename : browser/devtools/tilt/test/browser_tilt_picking_delete.js => devtools/client/tilt/test/browser_tilt_picking_delete.js
rename : browser/devtools/tilt/test/browser_tilt_picking_highlight01-offs.js => devtools/client/tilt/test/browser_tilt_picking_highlight01-offs.js
rename : browser/devtools/tilt/test/browser_tilt_picking_highlight01.js => devtools/client/tilt/test/browser_tilt_picking_highlight01.js
rename : browser/devtools/tilt/test/browser_tilt_picking_highlight02.js => devtools/client/tilt/test/browser_tilt_picking_highlight02.js
rename : browser/devtools/tilt/test/browser_tilt_picking_highlight03.js => devtools/client/tilt/test/browser_tilt_picking_highlight03.js
rename : browser/devtools/tilt/test/browser_tilt_picking_inspector.js => devtools/client/tilt/test/browser_tilt_picking_inspector.js
rename : browser/devtools/tilt/test/browser_tilt_picking_miv.js => devtools/client/tilt/test/browser_tilt_picking_miv.js
rename : browser/devtools/tilt/test/browser_tilt_utils01.js => devtools/client/tilt/test/browser_tilt_utils01.js
rename : browser/devtools/tilt/test/browser_tilt_utils02.js => devtools/client/tilt/test/browser_tilt_utils02.js
rename : browser/devtools/tilt/test/browser_tilt_utils03.js => devtools/client/tilt/test/browser_tilt_utils03.js
rename : browser/devtools/tilt/test/browser_tilt_utils04.js => devtools/client/tilt/test/browser_tilt_utils04.js
rename : browser/devtools/tilt/test/browser_tilt_utils05.js => devtools/client/tilt/test/browser_tilt_utils05.js
rename : browser/devtools/tilt/test/browser_tilt_utils06.js => devtools/client/tilt/test/browser_tilt_utils06.js
rename : browser/devtools/tilt/test/browser_tilt_utils07.js => devtools/client/tilt/test/browser_tilt_utils07.js
rename : browser/devtools/tilt/test/browser_tilt_utils08.js => devtools/client/tilt/test/browser_tilt_utils08.js
rename : browser/devtools/tilt/test/browser_tilt_visualizer.js => devtools/client/tilt/test/browser_tilt_visualizer.js
rename : browser/devtools/tilt/test/browser_tilt_zoom.js => devtools/client/tilt/test/browser_tilt_zoom.js
rename : browser/devtools/tilt/test/head.js => devtools/client/tilt/test/head.js
rename : browser/devtools/tilt/tilt-commands.js => devtools/client/tilt/tilt-commands.js
rename : browser/devtools/tilt/tilt-gl.js => devtools/client/tilt/tilt-gl.js
rename : browser/devtools/tilt/tilt-math.js => devtools/client/tilt/tilt-math.js
rename : browser/devtools/tilt/tilt-utils.js => devtools/client/tilt/tilt-utils.js
rename : browser/devtools/tilt/tilt-visualizer-style.js => devtools/client/tilt/tilt-visualizer-style.js
rename : browser/devtools/tilt/tilt-visualizer.js => devtools/client/tilt/tilt-visualizer.js
rename : browser/devtools/tilt/tilt.js => devtools/client/tilt/tilt.js
rename : browser/devtools/webaudioeditor/controller.js => devtools/client/webaudioeditor/controller.js
rename : browser/devtools/webaudioeditor/includes.js => devtools/client/webaudioeditor/includes.js
rename : browser/devtools/webaudioeditor/models.js => devtools/client/webaudioeditor/models.js
rename : browser/devtools/webaudioeditor/moz.build => devtools/client/webaudioeditor/moz.build
rename : browser/devtools/webaudioeditor/panel.js => devtools/client/webaudioeditor/panel.js
rename : browser/devtools/webaudioeditor/test/.eslintrc => devtools/client/webaudioeditor/test/.eslintrc
rename : browser/devtools/webaudioeditor/test/440hz_sine.ogg => devtools/client/webaudioeditor/test/440hz_sine.ogg
rename : browser/devtools/webaudioeditor/test/browser.ini => devtools/client/webaudioeditor/test/browser.ini
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-add-automation-event.js => devtools/client/webaudioeditor/test/browser_audionode-actor-add-automation-event.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-bypass.js => devtools/client/webaudioeditor/test/browser_audionode-actor-bypass.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-bypassable.js => devtools/client/webaudioeditor/test/browser_audionode-actor-bypassable.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-connectnode-disconnect.js => devtools/client/webaudioeditor/test/browser_audionode-actor-connectnode-disconnect.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-connectparam.js => devtools/client/webaudioeditor/test/browser_audionode-actor-connectparam.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-01.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-01.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-02.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-02.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-03.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-03.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-param-flags.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-param-flags.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-params-01.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-params-01.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-params-02.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-params-02.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-set-param.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-set-param.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-source.js => devtools/client/webaudioeditor/test/browser_audionode-actor-source.js
rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-type.js => devtools/client/webaudioeditor/test/browser_audionode-actor-type.js
rename : browser/devtools/webaudioeditor/test/browser_callwatcher-01.js => devtools/client/webaudioeditor/test/browser_callwatcher-01.js
rename : browser/devtools/webaudioeditor/test/browser_callwatcher-02.js => devtools/client/webaudioeditor/test/browser_callwatcher-02.js
rename : browser/devtools/webaudioeditor/test/browser_wa_automation-view-01.js => devtools/client/webaudioeditor/test/browser_wa_automation-view-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_automation-view-02.js => devtools/client/webaudioeditor/test/browser_wa_automation-view-02.js
rename : browser/devtools/webaudioeditor/test/browser_wa_controller-01.js => devtools/client/webaudioeditor/test/browser_wa_controller-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_destroy-node-01.js => devtools/client/webaudioeditor/test/browser_wa_destroy-node-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_first-run.js => devtools/client/webaudioeditor/test/browser_wa_first-run.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-click.js => devtools/client/webaudioeditor/test/browser_wa_graph-click.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-markers.js => devtools/client/webaudioeditor/test/browser_wa_graph-markers.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-01.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-02.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-02.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-03.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-03.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-04.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-04.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-05.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-05.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-06.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-06.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-selected.js => devtools/client/webaudioeditor/test/browser_wa_graph-selected.js
rename : browser/devtools/webaudioeditor/test/browser_wa_graph-zoom.js => devtools/client/webaudioeditor/test/browser_wa_graph-zoom.js
rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-bypass-01.js => devtools/client/webaudioeditor/test/browser_wa_inspector-bypass-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-toggle.js => devtools/client/webaudioeditor/test/browser_wa_inspector-toggle.js
rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-width.js => devtools/client/webaudioeditor/test/browser_wa_inspector-width.js
rename : browser/devtools/webaudioeditor/test/browser_wa_inspector.js => devtools/client/webaudioeditor/test/browser_wa_inspector.js
rename : browser/devtools/webaudioeditor/test/browser_wa_navigate.js => devtools/client/webaudioeditor/test/browser_wa_navigate.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-edit-01.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-edit-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-edit-02.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-edit-02.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-media-nodes.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-media-nodes.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-params-objects.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-params-objects.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-params.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-params.js
rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view.js => devtools/client/webaudioeditor/test/browser_wa_properties-view.js
rename : browser/devtools/webaudioeditor/test/browser_wa_reset-01.js => devtools/client/webaudioeditor/test/browser_wa_reset-01.js
rename : browser/devtools/webaudioeditor/test/browser_wa_reset-02.js => devtools/client/webaudioeditor/test/browser_wa_reset-02.js
rename : browser/devtools/webaudioeditor/test/browser_wa_reset-03.js => devtools/client/webaudioeditor/test/browser_wa_reset-03.js
rename : browser/devtools/webaudioeditor/test/browser_wa_reset-04.js => devtools/client/webaudioeditor/test/browser_wa_reset-04.js
rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-automation-event.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-automation-event.js
rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-connect-param.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-connect-param.js
rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-destroy-node.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-destroy-node.js
rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-simple.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-simple.js
rename : browser/devtools/webaudioeditor/test/doc_automation.html => devtools/client/webaudioeditor/test/doc_automation.html
rename : browser/devtools/webaudioeditor/test/doc_buffer-and-array.html => devtools/client/webaudioeditor/test/doc_buffer-and-array.html
rename : browser/devtools/webaudioeditor/test/doc_bug_1112378.html => devtools/client/webaudioeditor/test/doc_bug_1112378.html
rename : browser/devtools/webaudioeditor/test/doc_bug_1125817.html => devtools/client/webaudioeditor/test/doc_bug_1125817.html
rename : browser/devtools/webaudioeditor/test/doc_bug_1130901.html => devtools/client/webaudioeditor/test/doc_bug_1130901.html
rename : browser/devtools/webaudioeditor/test/doc_bug_1141261.html => devtools/client/webaudioeditor/test/doc_bug_1141261.html
rename : browser/devtools/webaudioeditor/test/doc_complex-context.html => devtools/client/webaudioeditor/test/doc_complex-context.html
rename : browser/devtools/webaudioeditor/test/doc_connect-multi-param.html => devtools/client/webaudioeditor/test/doc_connect-multi-param.html
rename : browser/devtools/webaudioeditor/test/doc_connect-param.html => devtools/client/webaudioeditor/test/doc_connect-param.html
rename : browser/devtools/webaudioeditor/test/doc_destroy-nodes.html => devtools/client/webaudioeditor/test/doc_destroy-nodes.html
rename : browser/devtools/webaudioeditor/test/doc_iframe-context.html => devtools/client/webaudioeditor/test/doc_iframe-context.html
rename : browser/devtools/webaudioeditor/test/doc_media-node-creation.html => devtools/client/webaudioeditor/test/doc_media-node-creation.html
rename : browser/devtools/webaudioeditor/test/doc_simple-context.html => devtools/client/webaudioeditor/test/doc_simple-context.html
rename : browser/devtools/webaudioeditor/test/doc_simple-node-creation.html => devtools/client/webaudioeditor/test/doc_simple-node-creation.html
rename : browser/devtools/webaudioeditor/test/head.js => devtools/client/webaudioeditor/test/head.js
rename : browser/devtools/webaudioeditor/views/automation.js => devtools/client/webaudioeditor/views/automation.js
rename : browser/devtools/webaudioeditor/views/context.js => devtools/client/webaudioeditor/views/context.js
rename : browser/devtools/webaudioeditor/views/inspector.js => devtools/client/webaudioeditor/views/inspector.js
rename : browser/devtools/webaudioeditor/views/properties.js => devtools/client/webaudioeditor/views/properties.js
rename : browser/devtools/webaudioeditor/views/utils.js => devtools/client/webaudioeditor/views/utils.js
rename : browser/devtools/webaudioeditor/webaudioeditor.xul => devtools/client/webaudioeditor/webaudioeditor.xul
rename : browser/devtools/webconsole/console-commands.js => devtools/client/webconsole/console-commands.js
rename : browser/devtools/webconsole/console-output.js => devtools/client/webconsole/console-output.js
rename : browser/devtools/webconsole/hudservice.js => devtools/client/webconsole/hudservice.js
rename : browser/devtools/webconsole/moz.build => devtools/client/webconsole/moz.build
rename : browser/devtools/webconsole/panel.js => devtools/client/webconsole/panel.js
rename : browser/devtools/webconsole/test/.eslintrc => devtools/client/webconsole/test/.eslintrc
rename : browser/devtools/webconsole/test/browser.ini => devtools/client/webconsole/test/browser.ini
rename : browser/devtools/webconsole/test/browser_bug1045902_console_csp_ignore_reflected_xss_message.js => devtools/client/webconsole/test/browser_bug1045902_console_csp_ignore_reflected_xss_message.js
rename : browser/devtools/webconsole/test/browser_bug664688_sandbox_update_after_navigation.js => devtools/client/webconsole/test/browser_bug664688_sandbox_update_after_navigation.js
rename : browser/devtools/webconsole/test/browser_bug_638949_copy_link_location.js => devtools/client/webconsole/test/browser_bug_638949_copy_link_location.js
rename : browser/devtools/webconsole/test/browser_bug_862916_console_dir_and_filter_off.js => devtools/client/webconsole/test/browser_bug_862916_console_dir_and_filter_off.js
rename : browser/devtools/webconsole/test/browser_bug_865288_repeat_different_objects.js => devtools/client/webconsole/test/browser_bug_865288_repeat_different_objects.js
rename : browser/devtools/webconsole/test/browser_bug_865871_variables_view_close_on_esc_key.js => devtools/client/webconsole/test/browser_bug_865871_variables_view_close_on_esc_key.js
rename : browser/devtools/webconsole/test/browser_bug_869003_inspect_cross_domain_object.js => devtools/client/webconsole/test/browser_bug_869003_inspect_cross_domain_object.js
rename : browser/devtools/webconsole/test/browser_bug_871156_ctrlw_close_tab.js => devtools/client/webconsole/test/browser_bug_871156_ctrlw_close_tab.js
rename : browser/devtools/webconsole/test/browser_cached_messages.js => devtools/client/webconsole/test/browser_cached_messages.js
rename : browser/devtools/webconsole/test/browser_console.js => devtools/client/webconsole/test/browser_console.js
rename : browser/devtools/webconsole/test/browser_console_addonsdk_loader_exception.js => devtools/client/webconsole/test/browser_console_addonsdk_loader_exception.js
rename : browser/devtools/webconsole/test/browser_console_clear_on_reload.js => devtools/client/webconsole/test/browser_console_clear_on_reload.js
rename : browser/devtools/webconsole/test/browser_console_click_focus.js => devtools/client/webconsole/test/browser_console_click_focus.js
rename : browser/devtools/webconsole/test/browser_console_consolejsm_output.js => devtools/client/webconsole/test/browser_console_consolejsm_output.js
rename : browser/devtools/webconsole/test/browser_console_copy_command.js => devtools/client/webconsole/test/browser_console_copy_command.js
rename : browser/devtools/webconsole/test/browser_console_copy_entire_message_context_menu.js => devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js
rename : browser/devtools/webconsole/test/browser_console_dead_objects.js => devtools/client/webconsole/test/browser_console_dead_objects.js
rename : browser/devtools/webconsole/test/browser_console_error_source_click.js => devtools/client/webconsole/test/browser_console_error_source_click.js
rename : browser/devtools/webconsole/test/browser_console_filters.js => devtools/client/webconsole/test/browser_console_filters.js
rename : browser/devtools/webconsole/test/browser_console_hide_jsterm_when_devtools_chrome_enabled_false.js => devtools/client/webconsole/test/browser_console_hide_jsterm_when_devtools_chrome_enabled_false.js
rename : browser/devtools/webconsole/test/browser_console_history_persist.js => devtools/client/webconsole/test/browser_console_history_persist.js
rename : browser/devtools/webconsole/test/browser_console_iframe_messages.js => devtools/client/webconsole/test/browser_console_iframe_messages.js
rename : browser/devtools/webconsole/test/browser_console_keyboard_accessibility.js => devtools/client/webconsole/test/browser_console_keyboard_accessibility.js
rename : browser/devtools/webconsole/test/browser_console_log_inspectable_object.js => devtools/client/webconsole/test/browser_console_log_inspectable_object.js
rename : browser/devtools/webconsole/test/browser_console_native_getters.js => devtools/client/webconsole/test/browser_console_native_getters.js
rename : browser/devtools/webconsole/test/browser_console_navigation_marker.js => devtools/client/webconsole/test/browser_console_navigation_marker.js
rename : browser/devtools/webconsole/test/browser_console_nsiconsolemessage.js => devtools/client/webconsole/test/browser_console_nsiconsolemessage.js
rename : browser/devtools/webconsole/test/browser_console_open_or_focus.js => devtools/client/webconsole/test/browser_console_open_or_focus.js
rename : browser/devtools/webconsole/test/browser_console_optimized_out_vars.js => devtools/client/webconsole/test/browser_console_optimized_out_vars.js
rename : browser/devtools/webconsole/test/browser_console_private_browsing.js => devtools/client/webconsole/test/browser_console_private_browsing.js
rename : browser/devtools/webconsole/test/browser_console_server_logging.js => devtools/client/webconsole/test/browser_console_server_logging.js
rename : browser/devtools/webconsole/test/browser_console_variables_view.js => devtools/client/webconsole/test/browser_console_variables_view.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_dom_nodes.js => devtools/client/webconsole/test/browser_console_variables_view_dom_nodes.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_dont_sort_non_sortable_classes_properties.js => devtools/client/webconsole/test/browser_console_variables_view_dont_sort_non_sortable_classes_properties.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_filter.js => devtools/client/webconsole/test/browser_console_variables_view_filter.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_highlighter.js => devtools/client/webconsole/test/browser_console_variables_view_highlighter.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_while_debugging.js => devtools/client/webconsole/test/browser_console_variables_view_while_debugging.js
rename : browser/devtools/webconsole/test/browser_console_variables_view_while_debugging_and_inspecting.js => devtools/client/webconsole/test/browser_console_variables_view_while_debugging_and_inspecting.js
rename : browser/devtools/webconsole/test/browser_eval_in_debugger_stackframe.js => devtools/client/webconsole/test/browser_eval_in_debugger_stackframe.js
rename : browser/devtools/webconsole/test/browser_eval_in_debugger_stackframe2.js => devtools/client/webconsole/test/browser_eval_in_debugger_stackframe2.js
rename : browser/devtools/webconsole/test/browser_jsterm_inspect.js => devtools/client/webconsole/test/browser_jsterm_inspect.js
rename : browser/devtools/webconsole/test/browser_longstring_hang.js => devtools/client/webconsole/test/browser_longstring_hang.js
rename : browser/devtools/webconsole/test/browser_netmonitor_shows_reqs_in_webconsole.js => devtools/client/webconsole/test/browser_netmonitor_shows_reqs_in_webconsole.js
rename : browser/devtools/webconsole/test/browser_output_breaks_after_console_dir_uninspectable.js => devtools/client/webconsole/test/browser_output_breaks_after_console_dir_uninspectable.js
rename : browser/devtools/webconsole/test/browser_output_longstring_expand.js => devtools/client/webconsole/test/browser_output_longstring_expand.js
rename : browser/devtools/webconsole/test/browser_repeated_messages_accuracy.js => devtools/client/webconsole/test/browser_repeated_messages_accuracy.js
rename : browser/devtools/webconsole/test/browser_result_format_as_string.js => devtools/client/webconsole/test/browser_result_format_as_string.js
rename : browser/devtools/webconsole/test/browser_warn_user_about_replaced_api.js => devtools/client/webconsole/test/browser_warn_user_about_replaced_api.js
rename : browser/devtools/webconsole/test/browser_webconsole_abbreviate_source_url.js => devtools/client/webconsole/test/browser_webconsole_abbreviate_source_url.js
rename : browser/devtools/webconsole/test/browser_webconsole_allow_mixedcontent_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_allow_mixedcontent_securityerrors.js
rename : browser/devtools/webconsole/test/browser_webconsole_assert.js => devtools/client/webconsole/test/browser_webconsole_assert.js
rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete-properties-with-non-alphanumeric-names.js => devtools/client/webconsole/test/browser_webconsole_autocomplete-properties-with-non-alphanumeric-names.js
rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_and_selfxss.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_and_selfxss.js
rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_crossdomain_iframe.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_crossdomain_iframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_in_debugger_stackframe.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_in_debugger_stackframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_popup_close_on_tab_switch.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_popup_close_on_tab_switch.js
rename : browser/devtools/webconsole/test/browser_webconsole_basic_net_logging.js => devtools/client/webconsole/test/browser_webconsole_basic_net_logging.js
rename : browser/devtools/webconsole/test/browser_webconsole_block_mixedcontent_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_block_mixedcontent_securityerrors.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js => devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_1010953_cspro.js => devtools/client/webconsole/test/browser_webconsole_bug_1010953_cspro.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_1050691_click_function_to_source.js => devtools/client/webconsole/test/browser_webconsole_bug_1050691_click_function_to_source.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_578437_page_reload.js => devtools/client/webconsole/test/browser_webconsole_bug_578437_page_reload.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_579412_input_focus.js => devtools/client/webconsole/test/browser_webconsole_bug_579412_input_focus.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_580001_closing_after_completion.js => devtools/client/webconsole/test/browser_webconsole_bug_580001_closing_after_completion.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_580030_errors_after_page_reload.js => devtools/client/webconsole/test/browser_webconsole_bug_580030_errors_after_page_reload.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_580454_timestamp_l10n.js => devtools/client/webconsole/test/browser_webconsole_bug_580454_timestamp_l10n.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_582201_duplicate_errors.js => devtools/client/webconsole/test/browser_webconsole_bug_582201_duplicate_errors.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_583816_No_input_and_Tab_key_pressed.js => devtools/client/webconsole/test/browser_webconsole_bug_583816_No_input_and_Tab_key_pressed.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_585237_line_limit.js => devtools/client/webconsole/test/browser_webconsole_bug_585237_line_limit.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_585956_console_trace.js => devtools/client/webconsole/test/browser_webconsole_bug_585956_console_trace.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js => devtools/client/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_popup.js => devtools/client/webconsole/test/browser_webconsole_bug_585991_autocomplete_popup.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_586388_select_all.js => devtools/client/webconsole/test/browser_webconsole_bug_586388_select_all.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_587617_output_copy.js => devtools/client/webconsole/test/browser_webconsole_bug_587617_output_copy.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_588342_document_focus.js => devtools/client/webconsole/test/browser_webconsole_bug_588342_document_focus.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_588730_text_node_insertion.js => devtools/client/webconsole/test/browser_webconsole_bug_588730_text_node_insertion.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_588967_input_expansion.js => devtools/client/webconsole/test/browser_webconsole_bug_588967_input_expansion.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_589162_css_filter.js => devtools/client/webconsole/test/browser_webconsole_bug_589162_css_filter.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_592442_closing_brackets.js => devtools/client/webconsole/test/browser_webconsole_bug_592442_closing_brackets.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_593003_iframe_wrong_hud.js => devtools/client/webconsole/test/browser_webconsole_bug_593003_iframe_wrong_hud.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_594497_history_arrow_keys.js => devtools/client/webconsole/test/browser_webconsole_bug_594497_history_arrow_keys.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_595223_file_uri.js => devtools/client/webconsole/test/browser_webconsole_bug_595223_file_uri.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_595350_multiple_windows_and_tabs.js => devtools/client/webconsole/test/browser_webconsole_bug_595350_multiple_windows_and_tabs.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_595934_message_categories.js => devtools/client/webconsole/test/browser_webconsole_bug_595934_message_categories.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_597103_deactivateHUDForContext_unfocused_window.js => devtools/client/webconsole/test/browser_webconsole_bug_597103_deactivateHUDForContext_unfocused_window.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_597136_external_script_errors.js => devtools/client/webconsole/test/browser_webconsole_bug_597136_external_script_errors.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_597136_network_requests_from_chrome.js => devtools/client/webconsole/test/browser_webconsole_bug_597136_network_requests_from_chrome.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_597460_filter_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_597460_filter_scroll.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_597756_reopen_closed_tab.js => devtools/client/webconsole/test/browser_webconsole_bug_597756_reopen_closed_tab.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_599725_response_headers.js => devtools/client/webconsole/test/browser_webconsole_bug_599725_response_headers.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_600183_charset.js => devtools/client/webconsole/test/browser_webconsole_bug_600183_charset.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_601177_log_levels.js => devtools/client/webconsole/test/browser_webconsole_bug_601177_log_levels.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_601352_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_601352_scroll.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_601667_filter_buttons.js => devtools/client/webconsole/test/browser_webconsole_bug_601667_filter_buttons.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_603750_websocket.js => devtools/client/webconsole/test/browser_webconsole_bug_603750_websocket.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_611795.js => devtools/client/webconsole/test/browser_webconsole_bug_611795.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_613013_console_api_iframe.js => devtools/client/webconsole/test/browser_webconsole_bug_613013_console_api_iframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_613280_jsterm_copy.js => devtools/client/webconsole/test/browser_webconsole_bug_613280_jsterm_copy.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_613642_maintain_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_613642_maintain_scroll.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_613642_prune_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_613642_prune_scroll.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_614793_jsterm_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_614793_jsterm_scroll.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_618078_network_exceptions.js => devtools/client/webconsole/test/browser_webconsole_bug_618078_network_exceptions.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_621644_jsterm_dollar.js => devtools/client/webconsole/test/browser_webconsole_bug_621644_jsterm_dollar.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js => devtools/client/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js => devtools/client/webconsole/test/browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_630733_response_redirect_headers.js => devtools/client/webconsole/test/browser_webconsole_bug_630733_response_redirect_headers.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_632275_getters_document_width.js => devtools/client/webconsole/test/browser_webconsole_bug_632275_getters_document_width.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_632347_iterators_generators.js => devtools/client/webconsole/test/browser_webconsole_bug_632347_iterators_generators.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_632817.js => devtools/client/webconsole/test/browser_webconsole_bug_632817.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_642108_pruneTest.js => devtools/client/webconsole/test/browser_webconsole_bug_642108_pruneTest.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_644419_log_limits.js => devtools/client/webconsole/test/browser_webconsole_bug_644419_log_limits.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_646025_console_file_location.js => devtools/client/webconsole/test/browser_webconsole_bug_646025_console_file_location.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_651501_document_body_autocomplete.js => devtools/client/webconsole/test/browser_webconsole_bug_651501_document_body_autocomplete.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js => devtools/client/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_658368_time_methods.js => devtools/client/webconsole/test/browser_webconsole_bug_658368_time_methods.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_659907_console_dir.js => devtools/client/webconsole/test/browser_webconsole_bug_659907_console_dir.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_660806_history_nav.js => devtools/client/webconsole/test/browser_webconsole_bug_660806_history_nav.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_664131_console_group.js => devtools/client/webconsole/test/browser_webconsole_bug_664131_console_group.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js => devtools/client/webconsole/test/browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_704295.js => devtools/client/webconsole/test/browser_webconsole_bug_704295.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_734061_No_input_change_and_Tab_key_pressed.js => devtools/client/webconsole/test/browser_webconsole_bug_734061_No_input_change_and_Tab_key_pressed.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_737873_mixedcontent.js => devtools/client/webconsole/test/browser_webconsole_bug_737873_mixedcontent.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_752559_ineffective_iframe_sandbox_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_752559_ineffective_iframe_sandbox_warning.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_764572_output_open_url.js => devtools/client/webconsole/test/browser_webconsole_bug_764572_output_open_url.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_766001_JS_Console_in_Debugger.js => devtools/client/webconsole/test/browser_webconsole_bug_766001_JS_Console_in_Debugger.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_770099_violation.js => devtools/client/webconsole/test/browser_webconsole_bug_770099_violation.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js => devtools/client/webconsole/test/browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_804845_ctrl_key_nav.js => devtools/client/webconsole/test/browser_webconsole_bug_804845_ctrl_key_nav.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_817834_add_edited_input_to_history.js => devtools/client/webconsole/test/browser_webconsole_bug_817834_add_edited_input_to_history.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_837351_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_bug_837351_securityerrors.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_915141_toggle_response_logging_with_keyboard.js => devtools/client/webconsole/test/browser_webconsole_bug_915141_toggle_response_logging_with_keyboard.js
rename : browser/devtools/webconsole/test/browser_webconsole_bug_922212_console_dirxml.js => devtools/client/webconsole/test/browser_webconsole_bug_922212_console_dirxml.js
rename : browser/devtools/webconsole/test/browser_webconsole_cached_autocomplete.js => devtools/client/webconsole/test/browser_webconsole_cached_autocomplete.js
rename : browser/devtools/webconsole/test/browser_webconsole_cd_iframe.js => devtools/client/webconsole/test/browser_webconsole_cd_iframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_certificate_messages.js => devtools/client/webconsole/test/browser_webconsole_certificate_messages.js
rename : browser/devtools/webconsole/test/browser_webconsole_change_font_size.js => devtools/client/webconsole/test/browser_webconsole_change_font_size.js
rename : browser/devtools/webconsole/test/browser_webconsole_chrome.js => devtools/client/webconsole/test/browser_webconsole_chrome.js
rename : browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js => devtools/client/webconsole/test/browser_webconsole_clickable_urls.js
rename : browser/devtools/webconsole/test/browser_webconsole_closure_inspection.js => devtools/client/webconsole/test/browser_webconsole_closure_inspection.js
rename : browser/devtools/webconsole/test/browser_webconsole_column_numbers.js => devtools/client/webconsole/test/browser_webconsole_column_numbers.js
rename : browser/devtools/webconsole/test/browser_webconsole_completion.js => devtools/client/webconsole/test/browser_webconsole_completion.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_api_stackframe.js => devtools/client/webconsole/test/browser_webconsole_console_api_stackframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_custom_styles.js => devtools/client/webconsole/test/browser_webconsole_console_custom_styles.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_extras.js => devtools/client/webconsole/test/browser_webconsole_console_extras.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_logging_api.js => devtools/client/webconsole/test/browser_webconsole_console_logging_api.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_logging_workers_api.js => devtools/client/webconsole/test/browser_webconsole_console_logging_workers_api.js
rename : browser/devtools/webconsole/test/browser_webconsole_console_trace_duplicates.js => devtools/client/webconsole/test/browser_webconsole_console_trace_duplicates.js
rename : browser/devtools/webconsole/test/browser_webconsole_context_menu_open_in_var_view.js => devtools/client/webconsole/test/browser_webconsole_context_menu_open_in_var_view.js
rename : browser/devtools/webconsole/test/browser_webconsole_count.js => devtools/client/webconsole/test/browser_webconsole_count.js
rename : browser/devtools/webconsole/test/browser_webconsole_dont_navigate_on_doubleclick.js => devtools/client/webconsole/test/browser_webconsole_dont_navigate_on_doubleclick.js
rename : browser/devtools/webconsole/test/browser_webconsole_exception_stackframe.js => devtools/client/webconsole/test/browser_webconsole_exception_stackframe.js
rename : browser/devtools/webconsole/test/browser_webconsole_execution_scope.js => devtools/client/webconsole/test/browser_webconsole_execution_scope.js
rename : browser/devtools/webconsole/test/browser_webconsole_expandable_timestamps.js => devtools/client/webconsole/test/browser_webconsole_expandable_timestamps.js
rename : browser/devtools/webconsole/test/browser_webconsole_filter_buttons_contextmenu.js => devtools/client/webconsole/test/browser_webconsole_filter_buttons_contextmenu.js
rename : browser/devtools/webconsole/test/browser_webconsole_for_of.js => devtools/client/webconsole/test/browser_webconsole_for_of.js
rename : browser/devtools/webconsole/test/browser_webconsole_history.js => devtools/client/webconsole/test/browser_webconsole_history.js
rename : browser/devtools/webconsole/test/browser_webconsole_hpkp_invalid-headers.js => devtools/client/webconsole/test/browser_webconsole_hpkp_invalid-headers.js
rename : browser/devtools/webconsole/test/browser_webconsole_hsts_invalid-headers.js => devtools/client/webconsole/test/browser_webconsole_hsts_invalid-headers.js
rename : browser/devtools/webconsole/test/browser_webconsole_input_field_focus_on_panel_select.js => devtools/client/webconsole/test/browser_webconsole_input_field_focus_on_panel_select.js
rename : browser/devtools/webconsole/test/browser_webconsole_inspect-parsed-documents.js => devtools/client/webconsole/test/browser_webconsole_inspect-parsed-documents.js
rename : browser/devtools/webconsole/test/browser_webconsole_js_input_expansion.js => devtools/client/webconsole/test/browser_webconsole_js_input_expansion.js
rename : browser/devtools/webconsole/test/browser_webconsole_jsterm.js => devtools/client/webconsole/test/browser_webconsole_jsterm.js
rename : browser/devtools/webconsole/test/browser_webconsole_live_filtering_of_message_types.js => devtools/client/webconsole/test/browser_webconsole_live_filtering_of_message_types.js
rename : browser/devtools/webconsole/test/browser_webconsole_live_filtering_on_search_strings.js => devtools/client/webconsole/test/browser_webconsole_live_filtering_on_search_strings.js
rename : browser/devtools/webconsole/test/browser_webconsole_log_file_filter.js => devtools/client/webconsole/test/browser_webconsole_log_file_filter.js
rename : browser/devtools/webconsole/test/browser_webconsole_message_node_id.js => devtools/client/webconsole/test/browser_webconsole_message_node_id.js
rename : browser/devtools/webconsole/test/browser_webconsole_netlogging.js => devtools/client/webconsole/test/browser_webconsole_netlogging.js
rename : browser/devtools/webconsole/test/browser_webconsole_netlogging_reset_filter.js => devtools/client/webconsole/test/browser_webconsole_netlogging_reset_filter.js
rename : browser/devtools/webconsole/test/browser_webconsole_notifications.js => devtools/client/webconsole/test/browser_webconsole_notifications.js
rename : browser/devtools/webconsole/test/browser_webconsole_open-links-without-callback.js => devtools/client/webconsole/test/browser_webconsole_open-links-without-callback.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_01.js => devtools/client/webconsole/test/browser_webconsole_output_01.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_02.js => devtools/client/webconsole/test/browser_webconsole_output_02.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_03.js => devtools/client/webconsole/test/browser_webconsole_output_03.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_04.js => devtools/client/webconsole/test/browser_webconsole_output_04.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_05.js => devtools/client/webconsole/test/browser_webconsole_output_05.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_06.js => devtools/client/webconsole/test/browser_webconsole_output_06.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_copy_newlines.js => devtools/client/webconsole/test/browser_webconsole_output_copy_newlines.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_01.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_01.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_02.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_02.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_03.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_03.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_04.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_04.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_events.js => devtools/client/webconsole/test/browser_webconsole_output_events.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_order.js => devtools/client/webconsole/test/browser_webconsole_output_order.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_regexp.js => devtools/client/webconsole/test/browser_webconsole_output_regexp.js
rename : browser/devtools/webconsole/test/browser_webconsole_output_table.js => devtools/client/webconsole/test/browser_webconsole_output_table.js
rename : browser/devtools/webconsole/test/browser_webconsole_promise.js => devtools/client/webconsole/test/browser_webconsole_promise.js
rename : browser/devtools/webconsole/test/browser_webconsole_property_provider.js => devtools/client/webconsole/test/browser_webconsole_property_provider.js
rename : browser/devtools/webconsole/test/browser_webconsole_reflow.js => devtools/client/webconsole/test/browser_webconsole_reflow.js
rename : browser/devtools/webconsole/test/browser_webconsole_scratchpad_panel_link.js => devtools/client/webconsole/test/browser_webconsole_scratchpad_panel_link.js
rename : browser/devtools/webconsole/test/browser_webconsole_show_subresource_security_errors.js => devtools/client/webconsole/test/browser_webconsole_show_subresource_security_errors.js
rename : browser/devtools/webconsole/test/browser_webconsole_shows_reqs_in_netmonitor.js => devtools/client/webconsole/test/browser_webconsole_shows_reqs_in_netmonitor.js
rename : browser/devtools/webconsole/test/browser_webconsole_split.js => devtools/client/webconsole/test/browser_webconsole_split.js
rename : browser/devtools/webconsole/test/browser_webconsole_split_escape_key.js => devtools/client/webconsole/test/browser_webconsole_split_escape_key.js
rename : browser/devtools/webconsole/test/browser_webconsole_split_focus.js => devtools/client/webconsole/test/browser_webconsole_split_focus.js
rename : browser/devtools/webconsole/test/browser_webconsole_split_persist.js => devtools/client/webconsole/test/browser_webconsole_split_persist.js
rename : browser/devtools/webconsole/test/browser_webconsole_start_netmon_first.js => devtools/client/webconsole/test/browser_webconsole_start_netmon_first.js
rename : browser/devtools/webconsole/test/browser_webconsole_trackingprotection_errors.js => devtools/client/webconsole/test/browser_webconsole_trackingprotection_errors.js
rename : browser/devtools/webconsole/test/browser_webconsole_view_source.js => devtools/client/webconsole/test/browser_webconsole_view_source.js
rename : browser/devtools/webconsole/test/head.js => devtools/client/webconsole/test/head.js
rename : browser/devtools/webconsole/test/test-autocomplete-in-stackframe.html => devtools/client/webconsole/test/test-autocomplete-in-stackframe.html
rename : browser/devtools/webconsole/test/test-bug-585956-console-trace.html => devtools/client/webconsole/test/test-bug-585956-console-trace.html
rename : browser/devtools/webconsole/test/test-bug-593003-iframe-wrong-hud-iframe.html => devtools/client/webconsole/test/test-bug-593003-iframe-wrong-hud-iframe.html
rename : browser/devtools/webconsole/test/test-bug-593003-iframe-wrong-hud.html => devtools/client/webconsole/test/test-bug-593003-iframe-wrong-hud.html
rename : browser/devtools/webconsole/test/test-bug-595934-canvas-css.html => devtools/client/webconsole/test/test-bug-595934-canvas-css.html
rename : browser/devtools/webconsole/test/test-bug-595934-canvas-css.js => devtools/client/webconsole/test/test-bug-595934-canvas-css.js
rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.css => devtools/client/webconsole/test/test-bug-595934-css-loader.css
rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.css^headers^ => devtools/client/webconsole/test/test-bug-595934-css-loader.css^headers^
rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.html => devtools/client/webconsole/test/test-bug-595934-css-loader.html
rename : browser/devtools/webconsole/test/test-bug-595934-css-parser.css => devtools/client/webconsole/test/test-bug-595934-css-parser.css
rename : browser/devtools/webconsole/test/test-bug-595934-css-parser.html => devtools/client/webconsole/test/test-bug-595934-css-parser.html
rename : browser/devtools/webconsole/test/test-bug-595934-empty-getelementbyid.html => devtools/client/webconsole/test/test-bug-595934-empty-getelementbyid.html
rename : browser/devtools/webconsole/test/test-bug-595934-empty-getelementbyid.js => devtools/client/webconsole/test/test-bug-595934-empty-getelementbyid.js
rename : browser/devtools/webconsole/test/test-bug-595934-html.html => devtools/client/webconsole/test/test-bug-595934-html.html
rename : browser/devtools/webconsole/test/test-bug-595934-image.html => devtools/client/webconsole/test/test-bug-595934-image.html
rename : browser/devtools/webconsole/test/test-bug-595934-image.jpg => devtools/client/webconsole/test/test-bug-595934-image.jpg
rename : browser/devtools/webconsole/test/test-bug-595934-imagemap.html => devtools/client/webconsole/test/test-bug-595934-imagemap.html
rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml-external.html => devtools/client/webconsole/test/test-bug-595934-malformedxml-external.html
rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml-external.xml => devtools/client/webconsole/test/test-bug-595934-malformedxml-external.xml
rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml.xhtml => devtools/client/webconsole/test/test-bug-595934-malformedxml.xhtml
rename : browser/devtools/webconsole/test/test-bug-595934-svg.xhtml => devtools/client/webconsole/test/test-bug-595934-svg.xhtml
rename : browser/devtools/webconsole/test/test-bug-595934-workers.html => devtools/client/webconsole/test/test-bug-595934-workers.html
rename : browser/devtools/webconsole/test/test-bug-595934-workers.js => devtools/client/webconsole/test/test-bug-595934-workers.js
rename : browser/devtools/webconsole/test/test-bug-597136-external-script-errors.html => devtools/client/webconsole/test/test-bug-597136-external-script-errors.html
rename : browser/devtools/webconsole/test/test-bug-597136-external-script-errors.js => devtools/client/webconsole/test/test-bug-597136-external-script-errors.js
rename : browser/devtools/webconsole/test/test-bug-597756-reopen-closed-tab.html => devtools/client/webconsole/test/test-bug-597756-reopen-closed-tab.html
rename : browser/devtools/webconsole/test/test-bug-599725-response-headers.sjs => devtools/client/webconsole/test/test-bug-599725-response-headers.sjs
rename : browser/devtools/webconsole/test/test-bug-600183-charset.html => devtools/client/webconsole/test/test-bug-600183-charset.html
rename : browser/devtools/webconsole/test/test-bug-600183-charset.html^headers^ => devtools/client/webconsole/test/test-bug-600183-charset.html^headers^
rename : browser/devtools/webconsole/test/test-bug-601177-log-levels.html => devtools/client/webconsole/test/test-bug-601177-log-levels.html
rename : browser/devtools/webconsole/test/test-bug-601177-log-levels.js => devtools/client/webconsole/test/test-bug-601177-log-levels.js
rename : browser/devtools/webconsole/test/test-bug-603750-websocket.html => devtools/client/webconsole/test/test-bug-603750-websocket.html
rename : browser/devtools/webconsole/test/test-bug-603750-websocket.js => devtools/client/webconsole/test/test-bug-603750-websocket.js
rename : browser/devtools/webconsole/test/test-bug-609872-cd-iframe-child.html => devtools/client/webconsole/test/test-bug-609872-cd-iframe-child.html
rename : browser/devtools/webconsole/test/test-bug-609872-cd-iframe-parent.html => devtools/client/webconsole/test/test-bug-609872-cd-iframe-parent.html
rename : browser/devtools/webconsole/test/test-bug-613013-console-api-iframe.html => devtools/client/webconsole/test/test-bug-613013-console-api-iframe.html
rename : browser/devtools/webconsole/test/test-bug-618078-network-exceptions.html => devtools/client/webconsole/test/test-bug-618078-network-exceptions.html
rename : browser/devtools/webconsole/test/test-bug-621644-jsterm-dollar.html => devtools/client/webconsole/test/test-bug-621644-jsterm-dollar.html
rename : browser/devtools/webconsole/test/test-bug-630733-response-redirect-headers.sjs => devtools/client/webconsole/test/test-bug-630733-response-redirect-headers.sjs
rename : browser/devtools/webconsole/test/test-bug-632275-getters.html => devtools/client/webconsole/test/test-bug-632275-getters.html
rename : browser/devtools/webconsole/test/test-bug-632347-iterators-generators.html => devtools/client/webconsole/test/test-bug-632347-iterators-generators.html
rename : browser/devtools/webconsole/test/test-bug-644419-log-limits.html => devtools/client/webconsole/test/test-bug-644419-log-limits.html
rename : browser/devtools/webconsole/test/test-bug-646025-console-file-location.html => devtools/client/webconsole/test/test-bug-646025-console-file-location.html
rename : browser/devtools/webconsole/test/test-bug-658368-time-methods.html => devtools/client/webconsole/test/test-bug-658368-time-methods.html
rename : browser/devtools/webconsole/test/test-bug-737873-mixedcontent.html => devtools/client/webconsole/test/test-bug-737873-mixedcontent.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-inner.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-inner.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested1.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested1.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested2.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested2.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning0.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning0.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning1.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning1.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning2.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning2.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning3.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning3.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning4.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning4.html
rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning5.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning5.html
rename : browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html => devtools/client/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html
rename : browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html => devtools/client/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html
rename : browser/devtools/webconsole/test/test-bug-766001-console-log.js => devtools/client/webconsole/test/test-bug-766001-console-log.js
rename : browser/devtools/webconsole/test/test-bug-766001-js-console-links.html => devtools/client/webconsole/test/test-bug-766001-js-console-links.html
rename : browser/devtools/webconsole/test/test-bug-766001-js-errors.js => devtools/client/webconsole/test/test-bug-766001-js-errors.js
rename : browser/devtools/webconsole/test/test-bug-782653-css-errors-1.css => devtools/client/webconsole/test/test-bug-782653-css-errors-1.css
rename : browser/devtools/webconsole/test/test-bug-782653-css-errors-2.css => devtools/client/webconsole/test/test-bug-782653-css-errors-2.css
rename : browser/devtools/webconsole/test/test-bug-782653-css-errors.html => devtools/client/webconsole/test/test-bug-782653-css-errors.html
rename : browser/devtools/webconsole/test/test-bug-837351-security-errors.html => devtools/client/webconsole/test/test-bug-837351-security-errors.html
rename : browser/devtools/webconsole/test/test-bug-859170-longstring-hang.html => devtools/client/webconsole/test/test-bug-859170-longstring-hang.html
rename : browser/devtools/webconsole/test/test-bug-869003-iframe.html => devtools/client/webconsole/test/test-bug-869003-iframe.html
rename : browser/devtools/webconsole/test/test-bug-869003-top-window.html => devtools/client/webconsole/test/test-bug-869003-top-window.html
rename : browser/devtools/webconsole/test/test-bug-952277-highlight-nodes-in-vview.html => devtools/client/webconsole/test/test-bug-952277-highlight-nodes-in-vview.html
rename : browser/devtools/webconsole/test/test-bug-989025-iframe-parent.html => devtools/client/webconsole/test/test-bug-989025-iframe-parent.html
rename : browser/devtools/webconsole/test/test-bug_1050691_click_function_to_source.html => devtools/client/webconsole/test/test-bug_1050691_click_function_to_source.html
rename : browser/devtools/webconsole/test/test-bug_1050691_click_function_to_source.js => devtools/client/webconsole/test/test-bug_1050691_click_function_to_source.js
rename : browser/devtools/webconsole/test/test-bug_923281_console_log_filter.html => devtools/client/webconsole/test/test-bug_923281_console_log_filter.html
rename : browser/devtools/webconsole/test/test-bug_923281_test1.js => devtools/client/webconsole/test/test-bug_923281_test1.js
rename : browser/devtools/webconsole/test/test-bug_923281_test2.js => devtools/client/webconsole/test/test-bug_923281_test2.js
rename : browser/devtools/webconsole/test/test-bug_939783_console_trace_duplicates.html => devtools/client/webconsole/test/test-bug_939783_console_trace_duplicates.html
rename : browser/devtools/webconsole/test/test-certificate-messages.html => devtools/client/webconsole/test/test-certificate-messages.html
rename : browser/devtools/webconsole/test/test-closure-optimized-out.html => devtools/client/webconsole/test/test-closure-optimized-out.html
rename : browser/devtools/webconsole/test/test-closures.html => devtools/client/webconsole/test/test-closures.html
rename : browser/devtools/webconsole/test/test-console-api-stackframe.html => devtools/client/webconsole/test/test-console-api-stackframe.html
rename : browser/devtools/webconsole/test/test-console-assert.html => devtools/client/webconsole/test/test-console-assert.html
rename : browser/devtools/webconsole/test/test-console-column.html => devtools/client/webconsole/test/test-console-column.html
rename : browser/devtools/webconsole/test/test-console-count-external-file.js => devtools/client/webconsole/test/test-console-count-external-file.js
rename : browser/devtools/webconsole/test/test-console-count.html => devtools/client/webconsole/test/test-console-count.html
rename : browser/devtools/webconsole/test/test-console-extras.html => devtools/client/webconsole/test/test-console-extras.html
rename : browser/devtools/webconsole/test/test-console-output-02.html => devtools/client/webconsole/test/test-console-output-02.html
rename : browser/devtools/webconsole/test/test-console-output-03.html => devtools/client/webconsole/test/test-console-output-03.html
rename : browser/devtools/webconsole/test/test-console-output-04.html => devtools/client/webconsole/test/test-console-output-04.html
rename : browser/devtools/webconsole/test/test-console-output-dom-elements.html => devtools/client/webconsole/test/test-console-output-dom-elements.html
rename : browser/devtools/webconsole/test/test-console-output-events.html => devtools/client/webconsole/test/test-console-output-events.html
rename : browser/devtools/webconsole/test/test-console-output-regexp.html => devtools/client/webconsole/test/test-console-output-regexp.html
rename : browser/devtools/webconsole/test/test-console-replaced-api.html => devtools/client/webconsole/test/test-console-replaced-api.html
rename : browser/devtools/webconsole/test/test-console-server-logging.sjs => devtools/client/webconsole/test/test-console-server-logging.sjs
rename : browser/devtools/webconsole/test/test-console-table.html => devtools/client/webconsole/test/test-console-table.html
rename : browser/devtools/webconsole/test/test-console-workers.html => devtools/client/webconsole/test/test-console-workers.html
rename : browser/devtools/webconsole/test/test-console.html => devtools/client/webconsole/test/test-console.html
rename : browser/devtools/webconsole/test/test-consoleiframes.html => devtools/client/webconsole/test/test-consoleiframes.html
rename : browser/devtools/webconsole/test/test-data.json => devtools/client/webconsole/test/test-data.json
rename : browser/devtools/webconsole/test/test-data.json^headers^ => devtools/client/webconsole/test/test-data.json^headers^
rename : browser/devtools/webconsole/test/test-duplicate-error.html => devtools/client/webconsole/test/test-duplicate-error.html
rename : browser/devtools/webconsole/test/test-encoding-ISO-8859-1.html => devtools/client/webconsole/test/test-encoding-ISO-8859-1.html
rename : browser/devtools/webconsole/test/test-error.html => devtools/client/webconsole/test/test-error.html
rename : browser/devtools/webconsole/test/test-eval-in-stackframe.html => devtools/client/webconsole/test/test-eval-in-stackframe.html
rename : browser/devtools/webconsole/test/test-exception-stackframe.html => devtools/client/webconsole/test/test-exception-stackframe.html
rename : browser/devtools/webconsole/test/test-file-location.js => devtools/client/webconsole/test/test-file-location.js
rename : browser/devtools/webconsole/test/test-filter.html => devtools/client/webconsole/test/test-filter.html
rename : browser/devtools/webconsole/test/test-for-of.html => devtools/client/webconsole/test/test-for-of.html
rename : browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html => devtools/client/webconsole/test/test-iframe-762593-insecure-form-action.html
rename : browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html => devtools/client/webconsole/test/test-iframe-762593-insecure-frame.html
rename : browser/devtools/webconsole/test/test-iframe1.html => devtools/client/webconsole/test/test-iframe1.html
rename : browser/devtools/webconsole/test/test-iframe2.html => devtools/client/webconsole/test/test-iframe2.html
rename : browser/devtools/webconsole/test/test-iframe3.html => devtools/client/webconsole/test/test-iframe3.html
rename : browser/devtools/webconsole/test/test-image.png => devtools/client/webconsole/test/test-image.png
rename : browser/devtools/webconsole/test/test-mixedcontent-securityerrors.html => devtools/client/webconsole/test/test-mixedcontent-securityerrors.html
rename : browser/devtools/webconsole/test/test-mutation.html => devtools/client/webconsole/test/test-mutation.html
rename : browser/devtools/webconsole/test/test-network-request.html => devtools/client/webconsole/test/test-network-request.html
rename : browser/devtools/webconsole/test/test-network.html => devtools/client/webconsole/test/test-network.html
rename : browser/devtools/webconsole/test/test-observe-http-ajax.html => devtools/client/webconsole/test/test-observe-http-ajax.html
rename : browser/devtools/webconsole/test/test-own-console.html => devtools/client/webconsole/test/test-own-console.html
rename : browser/devtools/webconsole/test/test-property-provider.html => devtools/client/webconsole/test/test-property-provider.html
rename : browser/devtools/webconsole/test/test-repeated-messages.html => devtools/client/webconsole/test/test-repeated-messages.html
rename : browser/devtools/webconsole/test/test-result-format-as-string.html => devtools/client/webconsole/test/test-result-format-as-string.html
rename : browser/devtools/webconsole/test/test-trackingprotection-securityerrors.html => devtools/client/webconsole/test/test-trackingprotection-securityerrors.html
rename : browser/devtools/webconsole/test/test-webconsole-error-observer.html => devtools/client/webconsole/test/test-webconsole-error-observer.html
rename : browser/devtools/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html => devtools/client/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html
rename : browser/devtools/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html^headers^ => devtools/client/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html^headers^
rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.html => devtools/client/webconsole/test/test_bug1092055_shouldwarn.html
rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.js => devtools/client/webconsole/test/test_bug1092055_shouldwarn.js
rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.js^headers^ => devtools/client/webconsole/test/test_bug1092055_shouldwarn.js^headers^
rename : browser/devtools/webconsole/test/test_bug_1010953_cspro.html => devtools/client/webconsole/test/test_bug_1010953_cspro.html
rename : browser/devtools/webconsole/test/test_bug_1010953_cspro.html^headers^ => devtools/client/webconsole/test/test_bug_1010953_cspro.html^headers^
rename : browser/devtools/webconsole/test/test_bug_770099_violation.html => devtools/client/webconsole/test/test_bug_770099_violation.html
rename : browser/devtools/webconsole/test/test_bug_770099_violation.html^headers^ => devtools/client/webconsole/test/test_bug_770099_violation.html^headers^
rename : browser/devtools/webconsole/test/test_hpkp-invalid-headers.sjs => devtools/client/webconsole/test/test_hpkp-invalid-headers.sjs
rename : browser/devtools/webconsole/test/test_hsts-invalid-headers.sjs => devtools/client/webconsole/test/test_hsts-invalid-headers.sjs
rename : browser/devtools/webconsole/test/testscript.js => devtools/client/webconsole/test/testscript.js
rename : browser/devtools/webconsole/webconsole.js => devtools/client/webconsole/webconsole.js
rename : browser/devtools/webconsole/webconsole.xul => devtools/client/webconsole/webconsole.xul
rename : browser/devtools/webide/components/moz.build => devtools/client/webide/components/moz.build
rename : browser/devtools/webide/components/webideCli.js => devtools/client/webide/components/webideCli.js
rename : browser/devtools/webide/components/webideComponents.manifest => devtools/client/webide/components/webideComponents.manifest
rename : browser/devtools/webide/content/addons.js => devtools/client/webide/content/addons.js
rename : browser/devtools/webide/content/addons.xhtml => devtools/client/webide/content/addons.xhtml
rename : browser/devtools/webide/content/details.js => devtools/client/webide/content/details.js
rename : browser/devtools/webide/content/details.xhtml => devtools/client/webide/content/details.xhtml
rename : browser/devtools/webide/content/devicepreferences.js => devtools/client/webide/content/devicepreferences.js
rename : browser/devtools/webide/content/devicepreferences.xhtml => devtools/client/webide/content/devicepreferences.xhtml
rename : browser/devtools/webide/content/devicesettings.js => devtools/client/webide/content/devicesettings.js
rename : browser/devtools/webide/content/devicesettings.xhtml => devtools/client/webide/content/devicesettings.xhtml
rename : browser/devtools/webide/content/jar.mn => devtools/client/webide/content/jar.mn
rename : browser/devtools/webide/content/logs.js => devtools/client/webide/content/logs.js
rename : browser/devtools/webide/content/logs.xhtml => devtools/client/webide/content/logs.xhtml
rename : browser/devtools/webide/content/monitor.js => devtools/client/webide/content/monitor.js
rename : browser/devtools/webide/content/monitor.xhtml => devtools/client/webide/content/monitor.xhtml
rename : browser/devtools/webide/content/moz.build => devtools/client/webide/content/moz.build
rename : browser/devtools/webide/content/newapp.js => devtools/client/webide/content/newapp.js
rename : browser/devtools/webide/content/newapp.xul => devtools/client/webide/content/newapp.xul
rename : browser/devtools/webide/content/permissionstable.js => devtools/client/webide/content/permissionstable.js
rename : browser/devtools/webide/content/permissionstable.xhtml => devtools/client/webide/content/permissionstable.xhtml
rename : browser/devtools/webide/content/prefs.js => devtools/client/webide/content/prefs.js
rename : browser/devtools/webide/content/prefs.xhtml => devtools/client/webide/content/prefs.xhtml
rename : browser/devtools/webide/content/project-listing.js => devtools/client/webide/content/project-listing.js
rename : browser/devtools/webide/content/project-listing.xhtml => devtools/client/webide/content/project-listing.xhtml
rename : browser/devtools/webide/content/project-panel.js => devtools/client/webide/content/project-panel.js
rename : browser/devtools/webide/content/runtime-listing.js => devtools/client/webide/content/runtime-listing.js
rename : browser/devtools/webide/content/runtime-listing.xhtml => devtools/client/webide/content/runtime-listing.xhtml
rename : browser/devtools/webide/content/runtime-panel.js => devtools/client/webide/content/runtime-panel.js
rename : browser/devtools/webide/content/runtimedetails.js => devtools/client/webide/content/runtimedetails.js
rename : browser/devtools/webide/content/runtimedetails.xhtml => devtools/client/webide/content/runtimedetails.xhtml
rename : browser/devtools/webide/content/simulator.js => devtools/client/webide/content/simulator.js
rename : browser/devtools/webide/content/simulator.xhtml => devtools/client/webide/content/simulator.xhtml
rename : browser/devtools/webide/content/webide.js => devtools/client/webide/content/webide.js
rename : browser/devtools/webide/content/webide.xul => devtools/client/webide/content/webide.xul
rename : browser/devtools/webide/content/wifi-auth.js => devtools/client/webide/content/wifi-auth.js
rename : browser/devtools/webide/content/wifi-auth.xhtml => devtools/client/webide/content/wifi-auth.xhtml
rename : browser/devtools/webide/modules/addons.js => devtools/client/webide/modules/addons.js
rename : browser/devtools/webide/modules/app-manager.js => devtools/client/webide/modules/app-manager.js
rename : browser/devtools/webide/modules/build.js => devtools/client/webide/modules/build.js
rename : browser/devtools/webide/modules/config-view.js => devtools/client/webide/modules/config-view.js
rename : browser/devtools/webide/modules/project-list.js => devtools/client/webide/modules/project-list.js
rename : browser/devtools/webide/modules/runtime-list.js => devtools/client/webide/modules/runtime-list.js
rename : browser/devtools/webide/modules/runtimes.js => devtools/client/webide/modules/runtimes.js
rename : browser/devtools/webide/modules/simulator-process.js => devtools/client/webide/modules/simulator-process.js
rename : browser/devtools/webide/modules/simulators.js => devtools/client/webide/modules/simulators.js
rename : browser/devtools/webide/modules/tab-store.js => devtools/client/webide/modules/tab-store.js
rename : browser/devtools/webide/modules/utils.js => devtools/client/webide/modules/utils.js
rename : browser/devtools/webide/moz.build => devtools/client/webide/moz.build
rename : browser/devtools/webide/test/.eslintrc => devtools/client/webide/test/.eslintrc
rename : browser/devtools/webide/test/addons/adbhelper-linux.xpi => devtools/client/webide/test/addons/adbhelper-linux.xpi
rename : browser/devtools/webide/test/addons/adbhelper-linux64.xpi => devtools/client/webide/test/addons/adbhelper-linux64.xpi
rename : browser/devtools/webide/test/addons/adbhelper-mac64.xpi => devtools/client/webide/test/addons/adbhelper-mac64.xpi
rename : browser/devtools/webide/test/addons/adbhelper-win32.xpi => devtools/client/webide/test/addons/adbhelper-win32.xpi
rename : browser/devtools/webide/test/addons/fxdt-adapters-linux32.xpi => devtools/client/webide/test/addons/fxdt-adapters-linux32.xpi
rename : browser/devtools/webide/test/addons/fxdt-adapters-linux64.xpi => devtools/client/webide/test/addons/fxdt-adapters-linux64.xpi
rename : browser/devtools/webide/test/addons/fxdt-adapters-mac64.xpi => devtools/client/webide/test/addons/fxdt-adapters-mac64.xpi
rename : browser/devtools/webide/test/addons/fxdt-adapters-win32.xpi => devtools/client/webide/test/addons/fxdt-adapters-win32.xpi
rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpi
rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpi
rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpi
rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpi
rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpi
rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpi
rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpi
rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpi
rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpi
rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpi
rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpi
rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpi
rename : browser/devtools/webide/test/addons/simulators.json => devtools/client/webide/test/addons/simulators.json
rename : browser/devtools/webide/test/app.zip => devtools/client/webide/test/app.zip
rename : browser/devtools/webide/test/app/index.html => devtools/client/webide/test/app/index.html
rename : browser/devtools/webide/test/app/manifest.webapp => devtools/client/webide/test/app/manifest.webapp
rename : browser/devtools/webide/test/browser.ini => devtools/client/webide/test/browser.ini
rename : browser/devtools/webide/test/browser_tabs.js => devtools/client/webide/test/browser_tabs.js
rename : browser/devtools/webide/test/browser_widget.js => devtools/client/webide/test/browser_widget.js
rename : browser/devtools/webide/test/build_app1/package.json => devtools/client/webide/test/build_app1/package.json
rename : browser/devtools/webide/test/build_app2/manifest.webapp => devtools/client/webide/test/build_app2/manifest.webapp
rename : browser/devtools/webide/test/build_app2/package.json => devtools/client/webide/test/build_app2/package.json
rename : browser/devtools/webide/test/build_app2/stage/empty-directory => devtools/client/webide/test/build_app2/stage/empty-directory
rename : browser/devtools/webide/test/build_app_windows1/package.json => devtools/client/webide/test/build_app_windows1/package.json
rename : browser/devtools/webide/test/build_app_windows2/manifest.webapp => devtools/client/webide/test/build_app_windows2/manifest.webapp
rename : browser/devtools/webide/test/build_app_windows2/package.json => devtools/client/webide/test/build_app_windows2/package.json
rename : browser/devtools/webide/test/build_app_windows2/stage/empty-directory => devtools/client/webide/test/build_app_windows2/stage/empty-directory
rename : browser/devtools/webide/test/chrome.ini => devtools/client/webide/test/chrome.ini
rename : browser/devtools/webide/test/device_front_shared.js => devtools/client/webide/test/device_front_shared.js
rename : browser/devtools/webide/test/doc_tabs.html => devtools/client/webide/test/doc_tabs.html
rename : browser/devtools/webide/test/head.js => devtools/client/webide/test/head.js
rename : browser/devtools/webide/test/hosted_app.manifest => devtools/client/webide/test/hosted_app.manifest
rename : browser/devtools/webide/test/sidebars/browser.ini => devtools/client/webide/test/sidebars/browser.ini
rename : browser/devtools/webide/test/sidebars/browser_tabs.js => devtools/client/webide/test/sidebars/browser_tabs.js
rename : browser/devtools/webide/test/sidebars/chrome.ini => devtools/client/webide/test/sidebars/chrome.ini
rename : browser/devtools/webide/test/sidebars/test_addons.html => devtools/client/webide/test/sidebars/test_addons.html
rename : browser/devtools/webide/test/sidebars/test_autoconnect_runtime.html => devtools/client/webide/test/sidebars/test_autoconnect_runtime.html
rename : browser/devtools/webide/test/sidebars/test_autoselect_project.html => devtools/client/webide/test/sidebars/test_autoselect_project.html
rename : browser/devtools/webide/test/sidebars/test_device_permissions.html => devtools/client/webide/test/sidebars/test_device_permissions.html
rename : browser/devtools/webide/test/sidebars/test_device_preferences.html => devtools/client/webide/test/sidebars/test_device_preferences.html
rename : browser/devtools/webide/test/sidebars/test_device_runtime.html => devtools/client/webide/test/sidebars/test_device_runtime.html
rename : browser/devtools/webide/test/sidebars/test_device_settings.html => devtools/client/webide/test/sidebars/test_device_settings.html
rename : browser/devtools/webide/test/sidebars/test_duplicate_import.html => devtools/client/webide/test/sidebars/test_duplicate_import.html
rename : browser/devtools/webide/test/sidebars/test_fullscreenToolbox.html => devtools/client/webide/test/sidebars/test_fullscreenToolbox.html
rename : browser/devtools/webide/test/sidebars/test_import.html => devtools/client/webide/test/sidebars/test_import.html
rename : browser/devtools/webide/test/sidebars/test_manifestUpdate.html => devtools/client/webide/test/sidebars/test_manifestUpdate.html
rename : browser/devtools/webide/test/sidebars/test_newapp.html => devtools/client/webide/test/sidebars/test_newapp.html
rename : browser/devtools/webide/test/sidebars/test_runtime.html => devtools/client/webide/test/sidebars/test_runtime.html
rename : browser/devtools/webide/test/sidebars/test_telemetry.html => devtools/client/webide/test/sidebars/test_telemetry.html
rename : browser/devtools/webide/test/templates.json => devtools/client/webide/test/templates.json
rename : browser/devtools/webide/test/test_addons.html => devtools/client/webide/test/test_addons.html
rename : browser/devtools/webide/test/test_autoconnect_runtime.html => devtools/client/webide/test/test_autoconnect_runtime.html
rename : browser/devtools/webide/test/test_autoselect_project.html => devtools/client/webide/test/test_autoselect_project.html
rename : browser/devtools/webide/test/test_basic.html => devtools/client/webide/test/test_basic.html
rename : browser/devtools/webide/test/test_build.html => devtools/client/webide/test/test_build.html
rename : browser/devtools/webide/test/test_device_permissions.html => devtools/client/webide/test/test_device_permissions.html
rename : browser/devtools/webide/test/test_device_preferences.html => devtools/client/webide/test/test_device_preferences.html
rename : browser/devtools/webide/test/test_device_runtime.html => devtools/client/webide/test/test_device_runtime.html
rename : browser/devtools/webide/test/test_device_settings.html => devtools/client/webide/test/test_device_settings.html
rename : browser/devtools/webide/test/test_duplicate_import.html => devtools/client/webide/test/test_duplicate_import.html
rename : browser/devtools/webide/test/test_fullscreenToolbox.html => devtools/client/webide/test/test_fullscreenToolbox.html
rename : browser/devtools/webide/test/test_import.html => devtools/client/webide/test/test_import.html
rename : browser/devtools/webide/test/test_manifestUpdate.html => devtools/client/webide/test/test_manifestUpdate.html
rename : browser/devtools/webide/test/test_newapp.html => devtools/client/webide/test/test_newapp.html
rename : browser/devtools/webide/test/test_runtime.html => devtools/client/webide/test/test_runtime.html
rename : browser/devtools/webide/test/test_simulators.html => devtools/client/webide/test/test_simulators.html
rename : browser/devtools/webide/test/test_telemetry.html => devtools/client/webide/test/test_telemetry.html
rename : browser/devtools/webide/test/test_zoom.html => devtools/client/webide/test/test_zoom.html
rename : browser/devtools/webide/themes/addons.css => devtools/client/webide/themes/addons.css
rename : browser/devtools/webide/themes/config-view.css => devtools/client/webide/themes/config-view.css
rename : browser/devtools/webide/themes/deck.css => devtools/client/webide/themes/deck.css
rename : browser/devtools/webide/themes/details.css => devtools/client/webide/themes/details.css
rename : browser/devtools/webide/themes/icons.png => devtools/client/webide/themes/icons.png
rename : browser/devtools/webide/themes/jar.mn => devtools/client/webide/themes/jar.mn
rename : browser/devtools/webide/themes/logs.css => devtools/client/webide/themes/logs.css
rename : browser/devtools/webide/themes/monitor.css => devtools/client/webide/themes/monitor.css
rename : browser/devtools/webide/themes/moz.build => devtools/client/webide/themes/moz.build
rename : browser/devtools/webide/themes/newapp.css => devtools/client/webide/themes/newapp.css
rename : browser/devtools/webide/themes/panel-listing.css => devtools/client/webide/themes/panel-listing.css
rename : browser/devtools/webide/themes/permissionstable.css => devtools/client/webide/themes/permissionstable.css
rename : browser/devtools/webide/themes/runtimedetails.css => devtools/client/webide/themes/runtimedetails.css
rename : browser/devtools/webide/themes/simulator.css => devtools/client/webide/themes/simulator.css
rename : browser/devtools/webide/themes/throbber.svg => devtools/client/webide/themes/throbber.svg
rename : browser/devtools/webide/themes/webide.css => devtools/client/webide/themes/webide.css
rename : browser/devtools/webide/themes/wifi-auth.css => devtools/client/webide/themes/wifi-auth.css
rename : browser/devtools/webide/webide-prefs.js => devtools/client/webide/webide-prefs.js
rename : toolkit/devtools/server/actors/actor-registry.js => devtools/server/actors/actor-registry.js
rename : toolkit/devtools/server/actors/addon.js => devtools/server/actors/addon.js
rename : toolkit/devtools/server/actors/animation.js => devtools/server/actors/animation.js
rename : toolkit/devtools/server/actors/call-watcher.js => devtools/server/actors/call-watcher.js
rename : toolkit/devtools/server/actors/canvas.js => devtools/server/actors/canvas.js
rename : toolkit/devtools/server/actors/child-process.js => devtools/server/actors/child-process.js
rename : toolkit/devtools/server/actors/childtab.js => devtools/server/actors/childtab.js
rename : toolkit/devtools/server/actors/chrome.js => devtools/server/actors/chrome.js
rename : toolkit/devtools/server/actors/common.js => devtools/server/actors/common.js
rename : toolkit/devtools/server/actors/csscoverage.js => devtools/server/actors/csscoverage.js
rename : toolkit/devtools/server/actors/device.js => devtools/server/actors/device.js
rename : toolkit/devtools/server/actors/director-manager.js => devtools/server/actors/director-manager.js
rename : toolkit/devtools/server/actors/director-registry.js => devtools/server/actors/director-registry.js
rename : toolkit/devtools/server/actors/eventlooplag.js => devtools/server/actors/eventlooplag.js
rename : toolkit/devtools/server/actors/framerate.js => devtools/server/actors/framerate.js
rename : toolkit/devtools/server/actors/gcli.js => devtools/server/actors/gcli.js
rename : toolkit/devtools/server/actors/highlighters.css => devtools/server/actors/highlighters.css
rename : toolkit/devtools/server/actors/highlighters.js => devtools/server/actors/highlighters.js
rename : toolkit/devtools/server/actors/highlighters/auto-refresh.js => devtools/server/actors/highlighters/auto-refresh.js
rename : toolkit/devtools/server/actors/highlighters/box-model.js => devtools/server/actors/highlighters/box-model.js
rename : toolkit/devtools/server/actors/highlighters/css-transform.js => devtools/server/actors/highlighters/css-transform.js
rename : toolkit/devtools/server/actors/highlighters/geometry-editor.js => devtools/server/actors/highlighters/geometry-editor.js
rename : toolkit/devtools/server/actors/highlighters/rect.js => devtools/server/actors/highlighters/rect.js
rename : toolkit/devtools/server/actors/highlighters/rulers.js => devtools/server/actors/highlighters/rulers.js
rename : toolkit/devtools/server/actors/highlighters/selector.js => devtools/server/actors/highlighters/selector.js
rename : toolkit/devtools/server/actors/highlighters/simple-outline.js => devtools/server/actors/highlighters/simple-outline.js
rename : toolkit/devtools/server/actors/highlighters/utils/markup.js => devtools/server/actors/highlighters/utils/markup.js
rename : toolkit/devtools/server/actors/inspector.js => devtools/server/actors/inspector.js
rename : toolkit/devtools/server/actors/layout.js => devtools/server/actors/layout.js
rename : toolkit/devtools/server/actors/memory.js => devtools/server/actors/memory.js
rename : toolkit/devtools/server/actors/memprof.js => devtools/server/actors/memprof.js
rename : toolkit/devtools/server/actors/monitor.js => devtools/server/actors/monitor.js
rename : toolkit/devtools/server/actors/object.js => devtools/server/actors/object.js
rename : toolkit/devtools/server/actors/performance-entries.js => devtools/server/actors/performance-entries.js
rename : toolkit/devtools/server/actors/performance-recording.js => devtools/server/actors/performance-recording.js
rename : toolkit/devtools/server/actors/performance.js => devtools/server/actors/performance.js
rename : toolkit/devtools/server/actors/preference.js => devtools/server/actors/preference.js
rename : toolkit/devtools/server/actors/pretty-print-worker.js => devtools/server/actors/pretty-print-worker.js
rename : toolkit/devtools/server/actors/profiler.js => devtools/server/actors/profiler.js
rename : toolkit/devtools/server/actors/promises.js => devtools/server/actors/promises.js
rename : toolkit/devtools/server/actors/root.js => devtools/server/actors/root.js
rename : toolkit/devtools/server/actors/script.js => devtools/server/actors/script.js
rename : toolkit/devtools/server/actors/settings.js => devtools/server/actors/settings.js
rename : toolkit/devtools/server/actors/storage.js => devtools/server/actors/storage.js
rename : toolkit/devtools/server/actors/string.js => devtools/server/actors/string.js
rename : toolkit/devtools/server/actors/styleeditor.js => devtools/server/actors/styleeditor.js
rename : toolkit/devtools/server/actors/styles.js => devtools/server/actors/styles.js
rename : toolkit/devtools/server/actors/stylesheets.js => devtools/server/actors/stylesheets.js
rename : toolkit/devtools/server/actors/timeline.js => devtools/server/actors/timeline.js
rename : toolkit/devtools/server/actors/utils/ScriptStore.js => devtools/server/actors/utils/ScriptStore.js
rename : toolkit/devtools/server/actors/utils/TabSources.js => devtools/server/actors/utils/TabSources.js
rename : toolkit/devtools/server/actors/utils/actor-registry-utils.js => devtools/server/actors/utils/actor-registry-utils.js
rename : toolkit/devtools/server/actors/utils/audionodes.json => devtools/server/actors/utils/audionodes.json
rename : toolkit/devtools/server/actors/utils/automation-timeline.js => devtools/server/actors/utils/automation-timeline.js
rename : toolkit/devtools/server/actors/utils/make-debugger.js => devtools/server/actors/utils/make-debugger.js
rename : toolkit/devtools/server/actors/utils/map-uri-to-addon-id.js => devtools/server/actors/utils/map-uri-to-addon-id.js
rename : toolkit/devtools/server/actors/utils/stack.js => devtools/server/actors/utils/stack.js
rename : toolkit/devtools/server/actors/webapps.js => devtools/server/actors/webapps.js
rename : toolkit/devtools/server/actors/webaudio.js => devtools/server/actors/webaudio.js
rename : toolkit/devtools/server/actors/webbrowser.js => devtools/server/actors/webbrowser.js
rename : toolkit/devtools/server/actors/webconsole.js => devtools/server/actors/webconsole.js
rename : toolkit/devtools/server/actors/webgl.js => devtools/server/actors/webgl.js
rename : toolkit/devtools/server/actors/worker.js => devtools/server/actors/worker.js
rename : toolkit/devtools/server/child.js => devtools/server/child.js
rename : toolkit/devtools/server/content-globals.js => devtools/server/content-globals.js
rename : toolkit/devtools/server/content-server.jsm => devtools/server/content-server.jsm
rename : toolkit/devtools/server/dbg-server.jsm => devtools/server/dbg-server.jsm
rename : toolkit/devtools/server/docs/actor-e10s-handling.md => devtools/server/docs/actor-e10s-handling.md
rename : toolkit/devtools/server/docs/actor-hierarchy.md => devtools/server/docs/actor-hierarchy.md
rename : toolkit/devtools/server/docs/actor-registration.md => devtools/server/docs/actor-registration.md
rename : toolkit/devtools/server/docs/protocol.js.md => devtools/server/docs/protocol.js.md
rename : toolkit/devtools/server/main.js => devtools/server/main.js
rename : toolkit/devtools/server/moz.build => devtools/server/moz.build
rename : toolkit/devtools/server/nsIJSInspector.idl => devtools/server/nsIJSInspector.idl
rename : toolkit/devtools/server/nsJSInspector.cpp => devtools/server/nsJSInspector.cpp
rename : toolkit/devtools/server/nsJSInspector.h => devtools/server/nsJSInspector.h
rename : toolkit/devtools/server/protocol.js => devtools/server/protocol.js
rename : toolkit/devtools/server/tests/browser/.eslintrc => devtools/server/tests/browser/.eslintrc
rename : toolkit/devtools/server/tests/browser/animation.html => devtools/server/tests/browser/animation.html
rename : toolkit/devtools/server/tests/browser/browser.ini => devtools/server/tests/browser/browser.ini
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_01.js => devtools/server/tests/browser/browser_animation_actors_01.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_02.js => devtools/server/tests/browser/browser_animation_actors_02.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_03.js => devtools/server/tests/browser/browser_animation_actors_03.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_04.js => devtools/server/tests/browser/browser_animation_actors_04.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_06.js => devtools/server/tests/browser/browser_animation_actors_06.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_07.js => devtools/server/tests/browser/browser_animation_actors_07.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_08.js => devtools/server/tests/browser/browser_animation_actors_08.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_09.js => devtools/server/tests/browser/browser_animation_actors_09.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_10.js => devtools/server/tests/browser/browser_animation_actors_10.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_11.js => devtools/server/tests/browser/browser_animation_actors_11.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_12.js => devtools/server/tests/browser/browser_animation_actors_12.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_13.js => devtools/server/tests/browser/browser_animation_actors_13.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_14.js => devtools/server/tests/browser/browser_animation_actors_14.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_15.js => devtools/server/tests/browser/browser_animation_actors_15.js
rename : toolkit/devtools/server/tests/browser/browser_animation_actors_16.js => devtools/server/tests/browser/browser_animation_actors_16.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_01.js => devtools/server/tests/browser/browser_canvasframe_helper_01.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_02.js => devtools/server/tests/browser/browser_canvasframe_helper_02.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_03.js => devtools/server/tests/browser/browser_canvasframe_helper_03.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_04.js => devtools/server/tests/browser/browser_canvasframe_helper_04.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_05.js => devtools/server/tests/browser/browser_canvasframe_helper_05.js
rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_06.js => devtools/server/tests/browser/browser_canvasframe_helper_06.js
rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors.js => devtools/server/tests/browser/browser_directorscript_actors.js
rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors_error_events.js => devtools/server/tests/browser/browser_directorscript_actors_error_events.js
rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors_exports.js => devtools/server/tests/browser/browser_directorscript_actors_exports.js
rename : toolkit/devtools/server/tests/browser/browser_markers-cycle-collection.js => devtools/server/tests/browser/browser_markers-cycle-collection.js
rename : toolkit/devtools/server/tests/browser/browser_markers-gc.js => devtools/server/tests/browser/browser_markers-gc.js
rename : toolkit/devtools/server/tests/browser/browser_markers-parse-html.js => devtools/server/tests/browser/browser_markers-parse-html.js
rename : toolkit/devtools/server/tests/browser/browser_markers-styles.js => devtools/server/tests/browser/browser_markers-styles.js
rename : toolkit/devtools/server/tests/browser/browser_markers-timestamp.js => devtools/server/tests/browser/browser_markers-timestamp.js
rename : toolkit/devtools/server/tests/browser/browser_navigateEvents.js => devtools/server/tests/browser/browser_navigateEvents.js
rename : toolkit/devtools/server/tests/browser/browser_perf-allocation-data.js => devtools/server/tests/browser/browser_perf-allocation-data.js
rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-01.js => devtools/server/tests/browser/browser_perf-legacy-front-01.js
rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-02.js => devtools/server/tests/browser/browser_perf-legacy-front-02.js
rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-03.js => devtools/server/tests/browser/browser_perf-legacy-front-03.js
rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-01.js => devtools/server/tests/browser/browser_perf-profiler-01.js
rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-02.js => devtools/server/tests/browser/browser_perf-profiler-02.js
rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-03.js => devtools/server/tests/browser/browser_perf-profiler-03.js
rename : toolkit/devtools/server/tests/browser/browser_perf-realtime-markers.js => devtools/server/tests/browser/browser_perf-realtime-markers.js
rename : toolkit/devtools/server/tests/browser/browser_perf-recording-actor-01.js => devtools/server/tests/browser/browser_perf-recording-actor-01.js
rename : toolkit/devtools/server/tests/browser/browser_perf-recording-actor-02.js => devtools/server/tests/browser/browser_perf-recording-actor-02.js
rename : toolkit/devtools/server/tests/browser/browser_perf-samples-01.js => devtools/server/tests/browser/browser_perf-samples-01.js
rename : toolkit/devtools/server/tests/browser/browser_perf-samples-02.js => devtools/server/tests/browser/browser_perf-samples-02.js
rename : toolkit/devtools/server/tests/browser/browser_storage_dynamic_windows.js => devtools/server/tests/browser/browser_storage_dynamic_windows.js
rename : toolkit/devtools/server/tests/browser/browser_storage_listings.js => devtools/server/tests/browser/browser_storage_listings.js
rename : toolkit/devtools/server/tests/browser/browser_storage_updates.js => devtools/server/tests/browser/browser_storage_updates.js
rename : toolkit/devtools/server/tests/browser/browser_stylesheets_nested-iframes.js => devtools/server/tests/browser/browser_stylesheets_nested-iframes.js
rename : toolkit/devtools/server/tests/browser/browser_timeline.js => devtools/server/tests/browser/browser_timeline.js
rename : toolkit/devtools/server/tests/browser/browser_timeline_actors.js => devtools/server/tests/browser/browser_timeline_actors.js
rename : toolkit/devtools/server/tests/browser/browser_timeline_iframes.js => devtools/server/tests/browser/browser_timeline_iframes.js
rename : toolkit/devtools/server/tests/browser/director-script-target.html => devtools/server/tests/browser/director-script-target.html
rename : toolkit/devtools/server/tests/browser/doc_allocations.html => devtools/server/tests/browser/doc_allocations.html
rename : toolkit/devtools/server/tests/browser/doc_force_cc.html => devtools/server/tests/browser/doc_force_cc.html
rename : toolkit/devtools/server/tests/browser/doc_force_gc.html => devtools/server/tests/browser/doc_force_gc.html
rename : toolkit/devtools/server/tests/browser/doc_innerHTML.html => devtools/server/tests/browser/doc_innerHTML.html
rename : toolkit/devtools/server/tests/browser/doc_perf.html => devtools/server/tests/browser/doc_perf.html
rename : toolkit/devtools/server/tests/browser/head.js => devtools/server/tests/browser/head.js
rename : toolkit/devtools/server/tests/browser/navigate-first.html => devtools/server/tests/browser/navigate-first.html
rename : toolkit/devtools/server/tests/browser/navigate-second.html => devtools/server/tests/browser/navigate-second.html
rename : toolkit/devtools/server/tests/browser/storage-dynamic-windows.html => devtools/server/tests/browser/storage-dynamic-windows.html
rename : toolkit/devtools/server/tests/browser/storage-listings.html => devtools/server/tests/browser/storage-listings.html
rename : toolkit/devtools/server/tests/browser/storage-secured-iframe.html => devtools/server/tests/browser/storage-secured-iframe.html
rename : toolkit/devtools/server/tests/browser/storage-unsecured-iframe.html => devtools/server/tests/browser/storage-unsecured-iframe.html
rename : toolkit/devtools/server/tests/browser/storage-updates.html => devtools/server/tests/browser/storage-updates.html
rename : toolkit/devtools/server/tests/browser/stylesheets-nested-iframes.html => devtools/server/tests/browser/stylesheets-nested-iframes.html
rename : toolkit/devtools/server/tests/browser/timeline-iframe-child.html => devtools/server/tests/browser/timeline-iframe-child.html
rename : toolkit/devtools/server/tests/browser/timeline-iframe-parent.html => devtools/server/tests/browser/timeline-iframe-parent.html
rename : toolkit/devtools/server/tests/mochitest/.eslintrc => devtools/server/tests/mochitest/.eslintrc
rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element-2.js => devtools/server/tests/mochitest/Debugger.Source.prototype.element-2.js
rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element.html => devtools/server/tests/mochitest/Debugger.Source.prototype.element.html
rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element.js => devtools/server/tests/mochitest/Debugger.Source.prototype.element.js
rename : toolkit/devtools/server/tests/mochitest/chrome.ini => devtools/server/tests/mochitest/chrome.ini
rename : toolkit/devtools/server/tests/mochitest/director-helpers.js => devtools/server/tests/mochitest/director-helpers.js
rename : toolkit/devtools/server/tests/mochitest/hello-actor.js => devtools/server/tests/mochitest/hello-actor.js
rename : toolkit/devtools/server/tests/mochitest/inspector-delay-image-response.sjs => devtools/server/tests/mochitest/inspector-delay-image-response.sjs
rename : toolkit/devtools/server/tests/mochitest/inspector-helpers.js => devtools/server/tests/mochitest/inspector-helpers.js
rename : toolkit/devtools/server/tests/mochitest/inspector-styles-data.css => devtools/server/tests/mochitest/inspector-styles-data.css
rename : toolkit/devtools/server/tests/mochitest/inspector-styles-data.html => devtools/server/tests/mochitest/inspector-styles-data.html
rename : toolkit/devtools/server/tests/mochitest/inspector-traversal-data.html => devtools/server/tests/mochitest/inspector-traversal-data.html
rename : toolkit/devtools/server/tests/mochitest/inspector_getImageData.html => devtools/server/tests/mochitest/inspector_getImageData.html
rename : toolkit/devtools/server/tests/mochitest/large-image.jpg => devtools/server/tests/mochitest/large-image.jpg
rename : toolkit/devtools/server/tests/mochitest/memory-helpers.js => devtools/server/tests/mochitest/memory-helpers.js
rename : toolkit/devtools/server/tests/mochitest/memprof-helpers.js => devtools/server/tests/mochitest/memprof-helpers.js
rename : toolkit/devtools/server/tests/mochitest/nonchrome_unsafeDereference.html => devtools/server/tests/mochitest/nonchrome_unsafeDereference.html
rename : toolkit/devtools/server/tests/mochitest/setup-in-child.js => devtools/server/tests/mochitest/setup-in-child.js
rename : toolkit/devtools/server/tests/mochitest/setup-in-parent.js => devtools/server/tests/mochitest/setup-in-parent.js
rename : toolkit/devtools/server/tests/mochitest/small-image.gif => devtools/server/tests/mochitest/small-image.gif
rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Script.prototype.global.html => devtools/server/tests/mochitest/test_Debugger.Script.prototype.global.html
rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.element.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.element.html
rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionScript.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionScript.html
rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html
rename : toolkit/devtools/server/tests/mochitest/test_connectToChild.html => devtools/server/tests/mochitest/test_connectToChild.html
rename : toolkit/devtools/server/tests/mochitest/test_connection-manager.html => devtools/server/tests/mochitest/test_connection-manager.html
rename : toolkit/devtools/server/tests/mochitest/test_css-logic-inheritance.html => devtools/server/tests/mochitest/test_css-logic-inheritance.html
rename : toolkit/devtools/server/tests/mochitest/test_css-logic-media-queries.html => devtools/server/tests/mochitest/test_css-logic-media-queries.html
rename : toolkit/devtools/server/tests/mochitest/test_css-logic-specificity.html => devtools/server/tests/mochitest/test_css-logic-specificity.html
rename : toolkit/devtools/server/tests/mochitest/test_css-logic.html => devtools/server/tests/mochitest/test_css-logic.html
rename : toolkit/devtools/server/tests/mochitest/test_device.html => devtools/server/tests/mochitest/test_device.html
rename : toolkit/devtools/server/tests/mochitest/test_director.html => devtools/server/tests/mochitest/test_director.html
rename : toolkit/devtools/server/tests/mochitest/test_director_connectToChild.html => devtools/server/tests/mochitest/test_director_connectToChild.html
rename : toolkit/devtools/server/tests/mochitest/test_executeInGlobal-outerized_this.html => devtools/server/tests/mochitest/test_executeInGlobal-outerized_this.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_01.html => devtools/server/tests/mochitest/test_framerate_01.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_02.html => devtools/server/tests/mochitest/test_framerate_02.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_03.html => devtools/server/tests/mochitest/test_framerate_03.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_04.html => devtools/server/tests/mochitest/test_framerate_04.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_05.html => devtools/server/tests/mochitest/test_framerate_05.html
rename : toolkit/devtools/server/tests/mochitest/test_framerate_06.html => devtools/server/tests/mochitest/test_framerate_06.html
rename : toolkit/devtools/server/tests/mochitest/test_getProcess.html => devtools/server/tests/mochitest/test_getProcess.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-anonymous.html => devtools/server/tests/mochitest/test_inspector-anonymous.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-changeattrs.html => devtools/server/tests/mochitest/test_inspector-changeattrs.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-changevalue.html => devtools/server/tests/mochitest/test_inspector-changevalue.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-dead-nodes.html => devtools/server/tests/mochitest/test_inspector-dead-nodes.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-hide.html => devtools/server/tests/mochitest/test_inspector-hide.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-insert.html => devtools/server/tests/mochitest/test_inspector-insert.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-attr.html => devtools/server/tests/mochitest/test_inspector-mutations-attr.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-childlist.html => devtools/server/tests/mochitest/test_inspector-mutations-childlist.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-frameload.html => devtools/server/tests/mochitest/test_inspector-mutations-frameload.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-value.html => devtools/server/tests/mochitest/test_inspector-mutations-value.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-pseudoclass-lock.html => devtools/server/tests/mochitest/test_inspector-pseudoclass-lock.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-release.html => devtools/server/tests/mochitest/test_inspector-release.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-reload.html => devtools/server/tests/mochitest/test_inspector-reload.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-remove.html => devtools/server/tests/mochitest/test_inspector-remove.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-resolve-url.html => devtools/server/tests/mochitest/test_inspector-resolve-url.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-retain.html => devtools/server/tests/mochitest/test_inspector-retain.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-scroll-into-view.html => devtools/server/tests/mochitest/test_inspector-scroll-into-view.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector-traversal.html => devtools/server/tests/mochitest/test_inspector-traversal.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageData-wait-for-load.html => devtools/server/tests/mochitest/test_inspector_getImageData-wait-for-load.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageData.html => devtools/server/tests/mochitest/test_inspector_getImageData.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageDataFromURL.html => devtools/server/tests/mochitest/test_inspector_getImageDataFromURL.html
rename : toolkit/devtools/server/tests/mochitest/test_inspector_getNodeFromActor.html => devtools/server/tests/mochitest/test_inspector_getNodeFromActor.html
rename : toolkit/devtools/server/tests/mochitest/test_makeGlobalObjectReference.html => devtools/server/tests/mochitest/test_makeGlobalObjectReference.html
rename : toolkit/devtools/server/tests/mochitest/test_memory.html => devtools/server/tests/mochitest/test_memory.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_01.html => devtools/server/tests/mochitest/test_memory_allocations_01.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_02.html => devtools/server/tests/mochitest/test_memory_allocations_02.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_03.html => devtools/server/tests/mochitest/test_memory_allocations_03.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_04.html => devtools/server/tests/mochitest/test_memory_allocations_04.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_05.html => devtools/server/tests/mochitest/test_memory_allocations_05.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_06.html => devtools/server/tests/mochitest/test_memory_allocations_06.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_07.html => devtools/server/tests/mochitest/test_memory_allocations_07.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_attach_01.html => devtools/server/tests/mochitest/test_memory_attach_01.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_attach_02.html => devtools/server/tests/mochitest/test_memory_attach_02.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_census.html => devtools/server/tests/mochitest/test_memory_census.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_gc_01.html => devtools/server/tests/mochitest/test_memory_gc_01.html
rename : toolkit/devtools/server/tests/mochitest/test_memory_gc_events.html => devtools/server/tests/mochitest/test_memory_gc_events.html
rename : toolkit/devtools/server/tests/mochitest/test_memprof.html => devtools/server/tests/mochitest/test_memprof.html
rename : toolkit/devtools/server/tests/mochitest/test_preference.html => devtools/server/tests/mochitest/test_preference.html
rename : toolkit/devtools/server/tests/mochitest/test_registerActor.html => devtools/server/tests/mochitest/test_registerActor.html
rename : toolkit/devtools/server/tests/mochitest/test_settings.html => devtools/server/tests/mochitest/test_settings.html
rename : toolkit/devtools/server/tests/mochitest/test_setupInParentChild.html => devtools/server/tests/mochitest/test_setupInParentChild.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-applied.html => devtools/server/tests/mochitest/test_styles-applied.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-computed.html => devtools/server/tests/mochitest/test_styles-computed.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-layout.html => devtools/server/tests/mochitest/test_styles-layout.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-matched.html => devtools/server/tests/mochitest/test_styles-matched.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-modify.html => devtools/server/tests/mochitest/test_styles-modify.html
rename : toolkit/devtools/server/tests/mochitest/test_styles-svg.html => devtools/server/tests/mochitest/test_styles-svg.html
rename : toolkit/devtools/server/tests/mochitest/test_unsafeDereference.html => devtools/server/tests/mochitest/test_unsafeDereference.html
rename : toolkit/devtools/server/tests/unit/.eslintrc => devtools/server/tests/unit/.eslintrc
rename : toolkit/devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js => devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js
rename : toolkit/devtools/server/tests/unit/head_dbg.js => devtools/server/tests/unit/head_dbg.js
rename : toolkit/devtools/server/tests/unit/hello-actor.js => devtools/server/tests/unit/hello-actor.js
rename : toolkit/devtools/server/tests/unit/post_init_global_actors.js => devtools/server/tests/unit/post_init_global_actors.js
rename : toolkit/devtools/server/tests/unit/post_init_tab_actors.js => devtools/server/tests/unit/post_init_tab_actors.js
rename : toolkit/devtools/server/tests/unit/pre_init_global_actors.js => devtools/server/tests/unit/pre_init_global_actors.js
rename : toolkit/devtools/server/tests/unit/pre_init_tab_actors.js => devtools/server/tests/unit/pre_init_tab_actors.js
rename : toolkit/devtools/server/tests/unit/registertestactors-01.js => devtools/server/tests/unit/registertestactors-01.js
rename : toolkit/devtools/server/tests/unit/registertestactors-02.js => devtools/server/tests/unit/registertestactors-02.js
rename : toolkit/devtools/server/tests/unit/registertestactors-03.js => devtools/server/tests/unit/registertestactors-03.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-column-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-line.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-line.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column.js => devtools/server/tests/unit/setBreakpoint-on-column.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-line-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-offsets.js => devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-offsets.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-statements.js => devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-statements.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-at-end-of-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets.js
rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line.js => devtools/server/tests/unit/setBreakpoint-on-line.js
rename : toolkit/devtools/server/tests/unit/source-map-data/sourcemapped.coffee => devtools/server/tests/unit/source-map-data/sourcemapped.coffee
rename : toolkit/devtools/server/tests/unit/source-map-data/sourcemapped.map => devtools/server/tests/unit/source-map-data/sourcemapped.map
rename : toolkit/devtools/server/tests/unit/sourcemapped.js => devtools/server/tests/unit/sourcemapped.js
rename : toolkit/devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_01.js => devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_01.js
rename : toolkit/devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_02.js => devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_02.js
rename : toolkit/devtools/server/tests/unit/test_ScriptStore.js => devtools/server/tests/unit/test_ScriptStore.js
rename : toolkit/devtools/server/tests/unit/test_actor-registry-actor.js => devtools/server/tests/unit/test_actor-registry-actor.js
rename : toolkit/devtools/server/tests/unit/test_add_actors.js => devtools/server/tests/unit/test_add_actors.js
rename : toolkit/devtools/server/tests/unit/test_attach.js => devtools/server/tests/unit/test_attach.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-01.js => devtools/server/tests/unit/test_blackboxing-01.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-02.js => devtools/server/tests/unit/test_blackboxing-02.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-03.js => devtools/server/tests/unit/test_blackboxing-03.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-04.js => devtools/server/tests/unit/test_blackboxing-04.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-05.js => devtools/server/tests/unit/test_blackboxing-05.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-06.js => devtools/server/tests/unit/test_blackboxing-06.js
rename : toolkit/devtools/server/tests/unit/test_blackboxing-07.js => devtools/server/tests/unit/test_blackboxing-07.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-01.js => devtools/server/tests/unit/test_breakpoint-01.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-02.js => devtools/server/tests/unit/test_breakpoint-02.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-03.js => devtools/server/tests/unit/test_breakpoint-03.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-04.js => devtools/server/tests/unit/test_breakpoint-04.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-05.js => devtools/server/tests/unit/test_breakpoint-05.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-06.js => devtools/server/tests/unit/test_breakpoint-06.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-07.js => devtools/server/tests/unit/test_breakpoint-07.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-08.js => devtools/server/tests/unit/test_breakpoint-08.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-09.js => devtools/server/tests/unit/test_breakpoint-09.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-10.js => devtools/server/tests/unit/test_breakpoint-10.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-11.js => devtools/server/tests/unit/test_breakpoint-11.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-12.js => devtools/server/tests/unit/test_breakpoint-12.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-13.js => devtools/server/tests/unit/test_breakpoint-13.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-14.js => devtools/server/tests/unit/test_breakpoint-14.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-15.js => devtools/server/tests/unit/test_breakpoint-15.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-16.js => devtools/server/tests/unit/test_breakpoint-16.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-17.js => devtools/server/tests/unit/test_breakpoint-17.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-18.js => devtools/server/tests/unit/test_breakpoint-18.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-19.js => devtools/server/tests/unit/test_breakpoint-19.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-20.js => devtools/server/tests/unit/test_breakpoint-20.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-21.js => devtools/server/tests/unit/test_breakpoint-21.js
rename : toolkit/devtools/server/tests/unit/test_breakpoint-actor-map.js => devtools/server/tests/unit/test_breakpoint-actor-map.js
rename : toolkit/devtools/server/tests/unit/test_client_request.js => devtools/server/tests/unit/test_client_request.js
rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js => devtools/server/tests/unit/test_conditional_breakpoint-01.js
rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js => devtools/server/tests/unit/test_conditional_breakpoint-02.js
rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js => devtools/server/tests/unit/test_conditional_breakpoint-03.js
rename : toolkit/devtools/server/tests/unit/test_dbgactor.js => devtools/server/tests/unit/test_dbgactor.js
rename : toolkit/devtools/server/tests/unit/test_dbgclient_debuggerstatement.js => devtools/server/tests/unit/test_dbgclient_debuggerstatement.js
rename : toolkit/devtools/server/tests/unit/test_dbgglobal.js => devtools/server/tests/unit/test_dbgglobal.js
rename : toolkit/devtools/server/tests/unit/test_eval-01.js => devtools/server/tests/unit/test_eval-01.js
rename : toolkit/devtools/server/tests/unit/test_eval-02.js => devtools/server/tests/unit/test_eval-02.js
rename : toolkit/devtools/server/tests/unit/test_eval-03.js => devtools/server/tests/unit/test_eval-03.js
rename : toolkit/devtools/server/tests/unit/test_eval-04.js => devtools/server/tests/unit/test_eval-04.js
rename : toolkit/devtools/server/tests/unit/test_eval-05.js => devtools/server/tests/unit/test_eval-05.js
rename : toolkit/devtools/server/tests/unit/test_eventlooplag_actor.js => devtools/server/tests/unit/test_eventlooplag_actor.js
rename : toolkit/devtools/server/tests/unit/test_forwardingprefix.js => devtools/server/tests/unit/test_forwardingprefix.js
rename : toolkit/devtools/server/tests/unit/test_frameactor-01.js => devtools/server/tests/unit/test_frameactor-01.js
rename : toolkit/devtools/server/tests/unit/test_frameactor-02.js => devtools/server/tests/unit/test_frameactor-02.js
rename : toolkit/devtools/server/tests/unit/test_frameactor-03.js => devtools/server/tests/unit/test_frameactor-03.js
rename : toolkit/devtools/server/tests/unit/test_frameactor-04.js => devtools/server/tests/unit/test_frameactor-04.js
rename : toolkit/devtools/server/tests/unit/test_frameactor-05.js => devtools/server/tests/unit/test_frameactor-05.js
rename : toolkit/devtools/server/tests/unit/test_framearguments-01.js => devtools/server/tests/unit/test_framearguments-01.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-01.js => devtools/server/tests/unit/test_framebindings-01.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-02.js => devtools/server/tests/unit/test_framebindings-02.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-03.js => devtools/server/tests/unit/test_framebindings-03.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-04.js => devtools/server/tests/unit/test_framebindings-04.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-05.js => devtools/server/tests/unit/test_framebindings-05.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-06.js => devtools/server/tests/unit/test_framebindings-06.js
rename : toolkit/devtools/server/tests/unit/test_framebindings-07.js => devtools/server/tests/unit/test_framebindings-07.js
rename : toolkit/devtools/server/tests/unit/test_frameclient-01.js => devtools/server/tests/unit/test_frameclient-01.js
rename : toolkit/devtools/server/tests/unit/test_frameclient-02.js => devtools/server/tests/unit/test_frameclient-02.js
rename : toolkit/devtools/server/tests/unit/test_functiongrips-01.js => devtools/server/tests/unit/test_functiongrips-01.js
rename : toolkit/devtools/server/tests/unit/test_get-executable-lines-source-map.js => devtools/server/tests/unit/test_get-executable-lines-source-map.js
rename : toolkit/devtools/server/tests/unit/test_get-executable-lines.js => devtools/server/tests/unit/test_get-executable-lines.js
rename : toolkit/devtools/server/tests/unit/test_getRuleText.js => devtools/server/tests/unit/test_getRuleText.js
rename : toolkit/devtools/server/tests/unit/test_getTextAtLineColumn.js => devtools/server/tests/unit/test_getTextAtLineColumn.js
rename : toolkit/devtools/server/tests/unit/test_getyoungestframe.js => devtools/server/tests/unit/test_getyoungestframe.js
rename : toolkit/devtools/server/tests/unit/test_ignore_caught_exceptions.js => devtools/server/tests/unit/test_ignore_caught_exceptions.js
rename : toolkit/devtools/server/tests/unit/test_interrupt.js => devtools/server/tests/unit/test_interrupt.js
rename : toolkit/devtools/server/tests/unit/test_layout-reflows-observer.js => devtools/server/tests/unit/test_layout-reflows-observer.js
rename : toolkit/devtools/server/tests/unit/test_listsources-01.js => devtools/server/tests/unit/test_listsources-01.js
rename : toolkit/devtools/server/tests/unit/test_listsources-02.js => devtools/server/tests/unit/test_listsources-02.js
rename : toolkit/devtools/server/tests/unit/test_listsources-03.js => devtools/server/tests/unit/test_listsources-03.js
rename : toolkit/devtools/server/tests/unit/test_longstringactor.js => devtools/server/tests/unit/test_longstringactor.js
rename : toolkit/devtools/server/tests/unit/test_longstringgrips-01.js => devtools/server/tests/unit/test_longstringgrips-01.js
rename : toolkit/devtools/server/tests/unit/test_longstringgrips-02.js => devtools/server/tests/unit/test_longstringgrips-02.js
rename : toolkit/devtools/server/tests/unit/test_memory_footprint.js => devtools/server/tests/unit/test_memory_footprint.js
rename : toolkit/devtools/server/tests/unit/test_monitor_actor.js => devtools/server/tests/unit/test_monitor_actor.js
rename : toolkit/devtools/server/tests/unit/test_nativewrappers.js => devtools/server/tests/unit/test_nativewrappers.js
rename : toolkit/devtools/server/tests/unit/test_nesting-01.js => devtools/server/tests/unit/test_nesting-01.js
rename : toolkit/devtools/server/tests/unit/test_nesting-02.js => devtools/server/tests/unit/test_nesting-02.js
rename : toolkit/devtools/server/tests/unit/test_nesting-03.js => devtools/server/tests/unit/test_nesting-03.js
rename : toolkit/devtools/server/tests/unit/test_new_source-01.js => devtools/server/tests/unit/test_new_source-01.js
rename : toolkit/devtools/server/tests/unit/test_nodelistactor.js => devtools/server/tests/unit/test_nodelistactor.js
rename : toolkit/devtools/server/tests/unit/test_nsjsinspector.js => devtools/server/tests/unit/test_nsjsinspector.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-01.js => devtools/server/tests/unit/test_objectgrips-01.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-02.js => devtools/server/tests/unit/test_objectgrips-02.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-03.js => devtools/server/tests/unit/test_objectgrips-03.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-04.js => devtools/server/tests/unit/test_objectgrips-04.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-05.js => devtools/server/tests/unit/test_objectgrips-05.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-06.js => devtools/server/tests/unit/test_objectgrips-06.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-07.js => devtools/server/tests/unit/test_objectgrips-07.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-08.js => devtools/server/tests/unit/test_objectgrips-08.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-09.js => devtools/server/tests/unit/test_objectgrips-09.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-10.js => devtools/server/tests/unit/test_objectgrips-10.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-11.js => devtools/server/tests/unit/test_objectgrips-11.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-12.js => devtools/server/tests/unit/test_objectgrips-12.js
rename : toolkit/devtools/server/tests/unit/test_objectgrips-13.js => devtools/server/tests/unit/test_objectgrips-13.js
rename : toolkit/devtools/server/tests/unit/test_pause_exceptions-01.js => devtools/server/tests/unit/test_pause_exceptions-01.js
rename : toolkit/devtools/server/tests/unit/test_pause_exceptions-02.js => devtools/server/tests/unit/test_pause_exceptions-02.js
rename : toolkit/devtools/server/tests/unit/test_pauselifetime-01.js => devtools/server/tests/unit/test_pauselifetime-01.js
rename : toolkit/devtools/server/tests/unit/test_pauselifetime-02.js => devtools/server/tests/unit/test_pauselifetime-02.js
rename : toolkit/devtools/server/tests/unit/test_pauselifetime-03.js => devtools/server/tests/unit/test_pauselifetime-03.js
rename : toolkit/devtools/server/tests/unit/test_pauselifetime-04.js => devtools/server/tests/unit/test_pauselifetime-04.js
rename : toolkit/devtools/server/tests/unit/test_profiler_activation-01.js => devtools/server/tests/unit/test_profiler_activation-01.js
rename : toolkit/devtools/server/tests/unit/test_profiler_activation-02.js => devtools/server/tests/unit/test_profiler_activation-02.js
rename : toolkit/devtools/server/tests/unit/test_profiler_bufferstatus.js => devtools/server/tests/unit/test_profiler_bufferstatus.js
rename : toolkit/devtools/server/tests/unit/test_profiler_close.js => devtools/server/tests/unit/test_profiler_close.js
rename : toolkit/devtools/server/tests/unit/test_profiler_data.js => devtools/server/tests/unit/test_profiler_data.js
rename : toolkit/devtools/server/tests/unit/test_profiler_events-01.js => devtools/server/tests/unit/test_profiler_events-01.js
rename : toolkit/devtools/server/tests/unit/test_profiler_events-02.js => devtools/server/tests/unit/test_profiler_events-02.js
rename : toolkit/devtools/server/tests/unit/test_profiler_getbufferinfo.js => devtools/server/tests/unit/test_profiler_getbufferinfo.js
rename : toolkit/devtools/server/tests/unit/test_profiler_getfeatures.js => devtools/server/tests/unit/test_profiler_getfeatures.js
rename : toolkit/devtools/server/tests/unit/test_profiler_getsharedlibraryinformation.js => devtools/server/tests/unit/test_profiler_getsharedlibraryinformation.js
rename : toolkit/devtools/server/tests/unit/test_promise_state-01.js => devtools/server/tests/unit/test_promise_state-01.js
rename : toolkit/devtools/server/tests/unit/test_promise_state-02.js => devtools/server/tests/unit/test_promise_state-02.js
rename : toolkit/devtools/server/tests/unit/test_promise_state-03.js => devtools/server/tests/unit/test_promise_state-03.js
rename : toolkit/devtools/server/tests/unit/test_promises_actor_attach.js => devtools/server/tests/unit/test_promises_actor_attach.js
rename : toolkit/devtools/server/tests/unit/test_promises_actor_exist.js => devtools/server/tests/unit/test_promises_actor_exist.js
rename : toolkit/devtools/server/tests/unit/test_promises_actor_list_promises.js => devtools/server/tests/unit/test_promises_actor_list_promises.js
rename : toolkit/devtools/server/tests/unit/test_promises_actor_onnewpromise.js => devtools/server/tests/unit/test_promises_actor_onnewpromise.js
rename : toolkit/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js => devtools/server/tests/unit/test_promises_actor_onpromisesettled.js
rename : toolkit/devtools/server/tests/unit/test_promises_client_getdependentpromises.js => devtools/server/tests/unit/test_promises_client_getdependentpromises.js
rename : toolkit/devtools/server/tests/unit/test_promises_object_creationtimestamp.js => devtools/server/tests/unit/test_promises_object_creationtimestamp.js
rename : toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-01.js => devtools/server/tests/unit/test_promises_object_timetosettle-01.js
rename : toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-02.js => devtools/server/tests/unit/test_promises_object_timetosettle-02.js
rename : toolkit/devtools/server/tests/unit/test_protocolSpec.js => devtools/server/tests/unit/test_protocolSpec.js
rename : toolkit/devtools/server/tests/unit/test_protocol_abort.js => devtools/server/tests/unit/test_protocol_abort.js
rename : toolkit/devtools/server/tests/unit/test_protocol_async.js => devtools/server/tests/unit/test_protocol_async.js
rename : toolkit/devtools/server/tests/unit/test_protocol_children.js => devtools/server/tests/unit/test_protocol_children.js
rename : toolkit/devtools/server/tests/unit/test_protocol_formtype.js => devtools/server/tests/unit/test_protocol_formtype.js
rename : toolkit/devtools/server/tests/unit/test_protocol_longstring.js => devtools/server/tests/unit/test_protocol_longstring.js
rename : toolkit/devtools/server/tests/unit/test_protocol_simple.js => devtools/server/tests/unit/test_protocol_simple.js
rename : toolkit/devtools/server/tests/unit/test_protocol_stack.js => devtools/server/tests/unit/test_protocol_stack.js
rename : toolkit/devtools/server/tests/unit/test_protocol_unregister.js => devtools/server/tests/unit/test_protocol_unregister.js
rename : toolkit/devtools/server/tests/unit/test_reattach-thread.js => devtools/server/tests/unit/test_reattach-thread.js
rename : toolkit/devtools/server/tests/unit/test_registerClient.js => devtools/server/tests/unit/test_registerClient.js
rename : toolkit/devtools/server/tests/unit/test_register_actor.js => devtools/server/tests/unit/test_register_actor.js
rename : toolkit/devtools/server/tests/unit/test_requestTypes.js => devtools/server/tests/unit/test_requestTypes.js
rename : toolkit/devtools/server/tests/unit/test_safe-getter.js => devtools/server/tests/unit/test_safe-getter.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offests-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offests-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-line.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-line.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column.js => devtools/server/tests/unit/test_setBreakpoint-on-column.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-offsets.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-statements.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-statements.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offets-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-at-end-of-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-in-gcd-script.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets.js
rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line.js => devtools/server/tests/unit/test_setBreakpoint-on-line.js
rename : toolkit/devtools/server/tests/unit/test_source-01.js => devtools/server/tests/unit/test_source-01.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-01.js => devtools/server/tests/unit/test_sourcemaps-01.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-02.js => devtools/server/tests/unit/test_sourcemaps-02.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-03.js => devtools/server/tests/unit/test_sourcemaps-03.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-04.js => devtools/server/tests/unit/test_sourcemaps-04.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-05.js => devtools/server/tests/unit/test_sourcemaps-05.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-06.js => devtools/server/tests/unit/test_sourcemaps-06.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-07.js => devtools/server/tests/unit/test_sourcemaps-07.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-08.js => devtools/server/tests/unit/test_sourcemaps-08.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-09.js => devtools/server/tests/unit/test_sourcemaps-09.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-10.js => devtools/server/tests/unit/test_sourcemaps-10.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-11.js => devtools/server/tests/unit/test_sourcemaps-11.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-12.js => devtools/server/tests/unit/test_sourcemaps-12.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-13.js => devtools/server/tests/unit/test_sourcemaps-13.js
rename : toolkit/devtools/server/tests/unit/test_sourcemaps-16.js => devtools/server/tests/unit/test_sourcemaps-16.js
rename : toolkit/devtools/server/tests/unit/test_stepping-01.js => devtools/server/tests/unit/test_stepping-01.js
rename : toolkit/devtools/server/tests/unit/test_stepping-02.js => devtools/server/tests/unit/test_stepping-02.js
rename : toolkit/devtools/server/tests/unit/test_stepping-03.js => devtools/server/tests/unit/test_stepping-03.js
rename : toolkit/devtools/server/tests/unit/test_stepping-04.js => devtools/server/tests/unit/test_stepping-04.js
rename : toolkit/devtools/server/tests/unit/test_stepping-05.js => devtools/server/tests/unit/test_stepping-05.js
rename : toolkit/devtools/server/tests/unit/test_stepping-06.js => devtools/server/tests/unit/test_stepping-06.js
rename : toolkit/devtools/server/tests/unit/test_symbols-01.js => devtools/server/tests/unit/test_symbols-01.js
rename : toolkit/devtools/server/tests/unit/test_symbols-02.js => devtools/server/tests/unit/test_symbols-02.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-01.js => devtools/server/tests/unit/test_threadlifetime-01.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-02.js => devtools/server/tests/unit/test_threadlifetime-02.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-03.js => devtools/server/tests/unit/test_threadlifetime-03.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-04.js => devtools/server/tests/unit/test_threadlifetime-04.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-05.js => devtools/server/tests/unit/test_threadlifetime-05.js
rename : toolkit/devtools/server/tests/unit/test_threadlifetime-06.js => devtools/server/tests/unit/test_threadlifetime-06.js
rename : toolkit/devtools/server/tests/unit/test_unsafeDereference.js => devtools/server/tests/unit/test_unsafeDereference.js
rename : toolkit/devtools/server/tests/unit/test_xpcshell_debugging.js => devtools/server/tests/unit/test_xpcshell_debugging.js
rename : toolkit/devtools/server/tests/unit/testactors.js => devtools/server/tests/unit/testactors.js
rename : toolkit/devtools/server/tests/unit/tracerlocations.js => devtools/server/tests/unit/tracerlocations.js
rename : toolkit/devtools/server/tests/unit/xpcshell.ini => devtools/server/tests/unit/xpcshell.ini
rename : toolkit/devtools/server/tests/unit/xpcshell_debugging_script.js => devtools/server/tests/unit/xpcshell_debugging_script.js
rename : toolkit/devtools/server/worker.js => devtools/server/worker.js
rename : toolkit/devtools/.eslintignore => devtools/shared/.eslintignore
rename : toolkit/devtools/.eslintrc => devtools/shared/.eslintrc
rename : toolkit/devtools/Console.jsm => devtools/shared/Console.jsm
rename : toolkit/devtools/DevToolsUtils.js => devtools/shared/DevToolsUtils.js
rename : toolkit/devtools/Loader.jsm => devtools/shared/Loader.jsm
rename : toolkit/devtools/acorn/LICENSE => devtools/shared/acorn/LICENSE
rename : toolkit/devtools/acorn/UPGRADING.md => devtools/shared/acorn/UPGRADING.md
rename : toolkit/devtools/acorn/acorn.js => devtools/shared/acorn/acorn.js
rename : toolkit/devtools/acorn/acorn_loose.js => devtools/shared/acorn/acorn_loose.js
rename : toolkit/devtools/acorn/moz.build => devtools/shared/acorn/moz.build
rename : toolkit/devtools/acorn/tests/unit/head_acorn.js => devtools/shared/acorn/tests/unit/head_acorn.js
rename : toolkit/devtools/acorn/tests/unit/test_import_acorn.js => devtools/shared/acorn/tests/unit/test_import_acorn.js
rename : toolkit/devtools/acorn/tests/unit/test_lenient_parser.js => devtools/shared/acorn/tests/unit/test_lenient_parser.js
rename : toolkit/devtools/acorn/tests/unit/test_same_ast.js => devtools/shared/acorn/tests/unit/test_same_ast.js
rename : toolkit/devtools/acorn/tests/unit/xpcshell.ini => devtools/shared/acorn/tests/unit/xpcshell.ini
rename : toolkit/devtools/acorn/walk.js => devtools/shared/acorn/walk.js
rename : toolkit/devtools/apps/Devices.jsm => devtools/shared/apps/Devices.jsm
rename : toolkit/devtools/apps/Simulator.jsm => devtools/shared/apps/Simulator.jsm
rename : toolkit/devtools/apps/app-actor-front.js => devtools/shared/apps/app-actor-front.js
rename : toolkit/devtools/apps/moz.build => devtools/shared/apps/moz.build
rename : toolkit/devtools/apps/tests/data/app-certified.zip => devtools/shared/apps/tests/data/app-certified.zip
rename : toolkit/devtools/apps/tests/data/app-overload.zip => devtools/shared/apps/tests/data/app-overload.zip
rename : toolkit/devtools/apps/tests/data/app-redirect.zip => devtools/shared/apps/tests/data/app-redirect.zip
rename : toolkit/devtools/apps/tests/data/app-system.zip => devtools/shared/apps/tests/data/app-system.zip
rename : toolkit/devtools/apps/tests/data/app-updated.zip => devtools/shared/apps/tests/data/app-updated.zip
rename : toolkit/devtools/apps/tests/data/app.zip => devtools/shared/apps/tests/data/app.zip
rename : toolkit/devtools/apps/tests/data/mochitest.ini => devtools/shared/apps/tests/data/mochitest.ini
rename : toolkit/devtools/apps/tests/debugger-protocol-helper.js => devtools/shared/apps/tests/debugger-protocol-helper.js
rename : toolkit/devtools/apps/tests/mochitest.ini => devtools/shared/apps/tests/mochitest.ini
rename : toolkit/devtools/apps/tests/redirect.sjs => devtools/shared/apps/tests/redirect.sjs
rename : toolkit/devtools/apps/tests/test_webapps_actor.html => devtools/shared/apps/tests/test_webapps_actor.html
rename : toolkit/devtools/apps/tests/unit/data/app-engineering.zip => devtools/shared/apps/tests/unit/data/app-engineering.zip
rename : toolkit/devtools/apps/tests/unit/data/app.zip => devtools/shared/apps/tests/unit/data/app.zip
rename : toolkit/devtools/apps/tests/unit/head_apps.js => devtools/shared/apps/tests/unit/head_apps.js
rename : toolkit/devtools/apps/tests/unit/tail_apps.js => devtools/shared/apps/tests/unit/tail_apps.js
rename : toolkit/devtools/apps/tests/unit/test_webappsActor.js => devtools/shared/apps/tests/unit/test_webappsActor.js
rename : toolkit/devtools/apps/tests/unit/xpcshell.ini => devtools/shared/apps/tests/unit/xpcshell.ini
rename : toolkit/devtools/async-utils.js => devtools/shared/async-utils.js
rename : toolkit/devtools/client/connection-manager.js => devtools/shared/client/connection-manager.js
rename : toolkit/devtools/client/dbg-client.jsm => devtools/shared/client/dbg-client.jsm
rename : toolkit/devtools/client/main.js => devtools/shared/client/main.js
rename : toolkit/devtools/client/moz.build => devtools/shared/client/moz.build
rename : toolkit/devtools/content-observer.js => devtools/shared/content-observer.js
rename : toolkit/devtools/css-color.js => devtools/shared/css-color.js
rename : toolkit/devtools/deprecated-sync-thenables.js => devtools/shared/deprecated-sync-thenables.js
rename : toolkit/devtools/discovery/discovery.js => devtools/shared/discovery/discovery.js
rename : toolkit/devtools/discovery/moz.build => devtools/shared/discovery/moz.build
rename : toolkit/devtools/discovery/tests/unit/test_discovery.js => devtools/shared/discovery/tests/unit/test_discovery.js
rename : toolkit/devtools/discovery/tests/unit/xpcshell.ini => devtools/shared/discovery/tests/unit/xpcshell.ini
rename : toolkit/devtools/event-emitter.js => devtools/shared/event-emitter.js
rename : toolkit/devtools/event-parsers.js => devtools/shared/event-parsers.js
rename : toolkit/devtools/gcli/Templater.jsm => devtools/shared/gcli/Templater.jsm
rename : toolkit/devtools/gcli/commands/addon.js => devtools/shared/gcli/commands/addon.js
rename : toolkit/devtools/gcli/commands/appcache.js => devtools/shared/gcli/commands/appcache.js
rename : toolkit/devtools/gcli/commands/calllog.js => devtools/shared/gcli/commands/calllog.js
rename : toolkit/devtools/gcli/commands/cmd.js => devtools/shared/gcli/commands/cmd.js
rename : toolkit/devtools/gcli/commands/cookie.js => devtools/shared/gcli/commands/cookie.js
rename : toolkit/devtools/gcli/commands/csscoverage.js => devtools/shared/gcli/commands/csscoverage.js
rename : toolkit/devtools/gcli/commands/folder.js => devtools/shared/gcli/commands/folder.js
rename : toolkit/devtools/gcli/commands/highlight.js => devtools/shared/gcli/commands/highlight.js
rename : toolkit/devtools/gcli/commands/index.js => devtools/shared/gcli/commands/index.js
rename : toolkit/devtools/gcli/commands/inject.js => devtools/shared/gcli/commands/inject.js
rename : toolkit/devtools/gcli/commands/jsb.js => devtools/shared/gcli/commands/jsb.js
rename : toolkit/devtools/gcli/commands/listen.js => devtools/shared/gcli/commands/listen.js
rename : toolkit/devtools/gcli/commands/media.js => devtools/shared/gcli/commands/media.js
rename : toolkit/devtools/gcli/commands/pagemod.js => devtools/shared/gcli/commands/pagemod.js
rename : toolkit/devtools/gcli/commands/paintflashing.js => devtools/shared/gcli/commands/paintflashing.js
rename : toolkit/devtools/gcli/commands/restart.js => devtools/shared/gcli/commands/restart.js
rename : toolkit/devtools/gcli/commands/rulers.js => devtools/shared/gcli/commands/rulers.js
rename : toolkit/devtools/gcli/commands/screenshot.js => devtools/shared/gcli/commands/screenshot.js
rename : toolkit/devtools/gcli/commands/security.js => devtools/shared/gcli/commands/security.js
rename : toolkit/devtools/gcli/commands/tools.js => devtools/shared/gcli/commands/tools.js
rename : toolkit/devtools/gcli/gcli.jsm => devtools/shared/gcli/gcli.jsm
rename : toolkit/devtools/gcli/moz.build => devtools/shared/gcli/moz.build
rename : toolkit/devtools/gcli/source/LICENSE => devtools/shared/gcli/source/LICENSE
rename : toolkit/devtools/gcli/source/docs/design.md => devtools/shared/gcli/source/docs/design.md
rename : toolkit/devtools/gcli/source/docs/developing-gcli.md => devtools/shared/gcli/source/docs/developing-gcli.md
rename : toolkit/devtools/gcli/source/docs/index.md => devtools/shared/gcli/source/docs/index.md
rename : toolkit/devtools/gcli/source/docs/running-tests.md => devtools/shared/gcli/source/docs/running-tests.md
rename : toolkit/devtools/gcli/source/docs/writing-commands.md => devtools/shared/gcli/source/docs/writing-commands.md
rename : toolkit/devtools/gcli/source/docs/writing-tests.md => devtools/shared/gcli/source/docs/writing-tests.md
rename : toolkit/devtools/gcli/source/docs/writing-types.md => devtools/shared/gcli/source/docs/writing-types.md
rename : toolkit/devtools/gcli/source/lib/gcli/cli.js => devtools/shared/gcli/source/lib/gcli/cli.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/clear.js => devtools/shared/gcli/source/lib/gcli/commands/clear.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/commands.js => devtools/shared/gcli/source/lib/gcli/commands/commands.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/connect.js => devtools/shared/gcli/source/lib/gcli/commands/connect.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/context.js => devtools/shared/gcli/source/lib/gcli/commands/context.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/exec.js => devtools/shared/gcli/source/lib/gcli/commands/exec.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/global.js => devtools/shared/gcli/source/lib/gcli/commands/global.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/help.js => devtools/shared/gcli/source/lib/gcli/commands/help.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/intro.js => devtools/shared/gcli/source/lib/gcli/commands/intro.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/lang.js => devtools/shared/gcli/source/lib/gcli/commands/lang.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/mocks.js => devtools/shared/gcli/source/lib/gcli/commands/mocks.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/pref.js => devtools/shared/gcli/source/lib/gcli/commands/pref.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/preflist.js => devtools/shared/gcli/source/lib/gcli/commands/preflist.js
rename : toolkit/devtools/gcli/source/lib/gcli/commands/test.js => devtools/shared/gcli/source/lib/gcli/commands/test.js
rename : toolkit/devtools/gcli/source/lib/gcli/connectors/connectors.js => devtools/shared/gcli/source/lib/gcli/connectors/connectors.js
rename : toolkit/devtools/gcli/source/lib/gcli/converters/basic.js => devtools/shared/gcli/source/lib/gcli/converters/basic.js
rename : toolkit/devtools/gcli/source/lib/gcli/converters/converters.js => devtools/shared/gcli/source/lib/gcli/converters/converters.js
rename : toolkit/devtools/gcli/source/lib/gcli/converters/html.js => devtools/shared/gcli/source/lib/gcli/converters/html.js
rename : toolkit/devtools/gcli/source/lib/gcli/converters/terminal.js => devtools/shared/gcli/source/lib/gcli/converters/terminal.js
rename : toolkit/devtools/gcli/source/lib/gcli/fields/delegate.js => devtools/shared/gcli/source/lib/gcli/fields/delegate.js
rename : toolkit/devtools/gcli/source/lib/gcli/fields/fields.js => devtools/shared/gcli/source/lib/gcli/fields/fields.js
rename : toolkit/devtools/gcli/source/lib/gcli/fields/selection.js => devtools/shared/gcli/source/lib/gcli/fields/selection.js
rename : toolkit/devtools/gcli/source/lib/gcli/index.js => devtools/shared/gcli/source/lib/gcli/index.js
rename : toolkit/devtools/gcli/source/lib/gcli/l10n.js => devtools/shared/gcli/source/lib/gcli/l10n.js
rename : toolkit/devtools/gcli/source/lib/gcli/languages/command.html => devtools/shared/gcli/source/lib/gcli/languages/command.html
rename : toolkit/devtools/gcli/source/lib/gcli/languages/command.js => devtools/shared/gcli/source/lib/gcli/languages/command.js
rename : toolkit/devtools/gcli/source/lib/gcli/languages/javascript.js => devtools/shared/gcli/source/lib/gcli/languages/javascript.js
rename : toolkit/devtools/gcli/source/lib/gcli/languages/languages.js => devtools/shared/gcli/source/lib/gcli/languages/languages.js
rename : toolkit/devtools/gcli/source/lib/gcli/mozui/completer.js => devtools/shared/gcli/source/lib/gcli/mozui/completer.js
rename : toolkit/devtools/gcli/source/lib/gcli/mozui/inputter.js => devtools/shared/gcli/source/lib/gcli/mozui/inputter.js
rename : toolkit/devtools/gcli/source/lib/gcli/mozui/tooltip.js => devtools/shared/gcli/source/lib/gcli/mozui/tooltip.js
rename : toolkit/devtools/gcli/source/lib/gcli/settings.js => devtools/shared/gcli/source/lib/gcli/settings.js
rename : toolkit/devtools/gcli/source/lib/gcli/system.js => devtools/shared/gcli/source/lib/gcli/system.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/array.js => devtools/shared/gcli/source/lib/gcli/types/array.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/boolean.js => devtools/shared/gcli/source/lib/gcli/types/boolean.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/command.js => devtools/shared/gcli/source/lib/gcli/types/command.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/date.js => devtools/shared/gcli/source/lib/gcli/types/date.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/delegate.js => devtools/shared/gcli/source/lib/gcli/types/delegate.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/file.js => devtools/shared/gcli/source/lib/gcli/types/file.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/fileparser.js => devtools/shared/gcli/source/lib/gcli/types/fileparser.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/javascript.js => devtools/shared/gcli/source/lib/gcli/types/javascript.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/node.js => devtools/shared/gcli/source/lib/gcli/types/node.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/number.js => devtools/shared/gcli/source/lib/gcli/types/number.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/resource.js => devtools/shared/gcli/source/lib/gcli/types/resource.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/selection.js => devtools/shared/gcli/source/lib/gcli/types/selection.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/setting.js => devtools/shared/gcli/source/lib/gcli/types/setting.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/string.js => devtools/shared/gcli/source/lib/gcli/types/string.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/types.js => devtools/shared/gcli/source/lib/gcli/types/types.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/union.js => devtools/shared/gcli/source/lib/gcli/types/union.js
rename : toolkit/devtools/gcli/source/lib/gcli/types/url.js => devtools/shared/gcli/source/lib/gcli/types/url.js
rename : toolkit/devtools/gcli/source/lib/gcli/ui/focus.js => devtools/shared/gcli/source/lib/gcli/ui/focus.js
rename : toolkit/devtools/gcli/source/lib/gcli/ui/history.js => devtools/shared/gcli/source/lib/gcli/ui/history.js
rename : toolkit/devtools/gcli/source/lib/gcli/ui/intro.js => devtools/shared/gcli/source/lib/gcli/ui/intro.js
rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.css => devtools/shared/gcli/source/lib/gcli/ui/menu.css
rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.html => devtools/shared/gcli/source/lib/gcli/ui/menu.html
rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.js => devtools/shared/gcli/source/lib/gcli/ui/menu.js
rename : toolkit/devtools/gcli/source/lib/gcli/ui/view.js => devtools/shared/gcli/source/lib/gcli/ui/view.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/domtemplate.js => devtools/shared/gcli/source/lib/gcli/util/domtemplate.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/fileparser.js => devtools/shared/gcli/source/lib/gcli/util/fileparser.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/filesystem.js => devtools/shared/gcli/source/lib/gcli/util/filesystem.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/host.js => devtools/shared/gcli/source/lib/gcli/util/host.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/l10n.js => devtools/shared/gcli/source/lib/gcli/util/l10n.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/legacy.js => devtools/shared/gcli/source/lib/gcli/util/legacy.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/prism.js => devtools/shared/gcli/source/lib/gcli/util/prism.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/spell.js => devtools/shared/gcli/source/lib/gcli/util/spell.js
rename : toolkit/devtools/gcli/source/lib/gcli/util/util.js => devtools/shared/gcli/source/lib/gcli/util/util.js
rename : toolkit/devtools/heapsnapshot/AutoMemMap.cpp => devtools/shared/heapsnapshot/AutoMemMap.cpp
rename : toolkit/devtools/heapsnapshot/AutoMemMap.h => devtools/shared/heapsnapshot/AutoMemMap.h
rename : toolkit/devtools/heapsnapshot/CoreDump.pb.cc => devtools/shared/heapsnapshot/CoreDump.pb.cc
rename : toolkit/devtools/heapsnapshot/CoreDump.pb.h => devtools/shared/heapsnapshot/CoreDump.pb.h
rename : toolkit/devtools/heapsnapshot/CoreDump.proto => devtools/shared/heapsnapshot/CoreDump.proto
rename : toolkit/devtools/heapsnapshot/DeserializedNode.cpp => devtools/shared/heapsnapshot/DeserializedNode.cpp
rename : toolkit/devtools/heapsnapshot/DeserializedNode.h => devtools/shared/heapsnapshot/DeserializedNode.h
rename : toolkit/devtools/heapsnapshot/HeapAnalysesClient.js => devtools/shared/heapsnapshot/HeapAnalysesClient.js
rename : toolkit/devtools/heapsnapshot/HeapAnalysesWorker.js => devtools/shared/heapsnapshot/HeapAnalysesWorker.js
rename : toolkit/devtools/heapsnapshot/HeapSnapshot.cpp => devtools/shared/heapsnapshot/HeapSnapshot.cpp
rename : toolkit/devtools/heapsnapshot/HeapSnapshot.h => devtools/shared/heapsnapshot/HeapSnapshot.h
rename : toolkit/devtools/heapsnapshot/HeapSnapshotFileUtils.js => devtools/shared/heapsnapshot/HeapSnapshotFileUtils.js
rename : toolkit/devtools/heapsnapshot/ZeroCopyNSIOutputStream.cpp => devtools/shared/heapsnapshot/ZeroCopyNSIOutputStream.cpp
rename : toolkit/devtools/heapsnapshot/ZeroCopyNSIOutputStream.h => devtools/shared/heapsnapshot/ZeroCopyNSIOutputStream.h
rename : toolkit/devtools/heapsnapshot/census-tree-node.js => devtools/shared/heapsnapshot/census-tree-node.js
rename : toolkit/devtools/heapsnapshot/generate-core-dump-sources.sh => devtools/shared/heapsnapshot/generate-core-dump-sources.sh
rename : toolkit/devtools/heapsnapshot/moz.build => devtools/shared/heapsnapshot/moz.build
rename : toolkit/devtools/heapsnapshot/tests/gtest/DeserializedNodeUbiNodes.cpp => devtools/shared/heapsnapshot/tests/gtest/DeserializedNodeUbiNodes.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/DeserializedStackFrameUbiStackFrames.cpp => devtools/shared/heapsnapshot/tests/gtest/DeserializedStackFrameUbiStackFrames.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/DevTools.h => devtools/shared/heapsnapshot/tests/gtest/DevTools.h
rename : toolkit/devtools/heapsnapshot/tests/gtest/DoesCrossZoneBoundaries.cpp => devtools/shared/heapsnapshot/tests/gtest/DoesCrossZoneBoundaries.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/DoesntCrossZoneBoundaries.cpp => devtools/shared/heapsnapshot/tests/gtest/DoesntCrossZoneBoundaries.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesEdgeNames.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesEdgeNames.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesEverythingInHeapGraphOnce.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesEverythingInHeapGraphOnce.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesTypeNames.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesTypeNames.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/UniqueStringHashPolicy.cpp => devtools/shared/heapsnapshot/tests/gtest/UniqueStringHashPolicy.cpp
rename : toolkit/devtools/heapsnapshot/tests/gtest/moz.build => devtools/shared/heapsnapshot/tests/gtest/moz.build
rename : toolkit/devtools/heapsnapshot/tests/mochitest/chrome.ini => devtools/shared/heapsnapshot/tests/mochitest/chrome.ini
rename : toolkit/devtools/heapsnapshot/tests/mochitest/test_SaveHeapSnapshot.html => devtools/shared/heapsnapshot/tests/mochitest/test_SaveHeapSnapshot.html
rename : toolkit/devtools/heapsnapshot/tests/unit/Census.jsm => devtools/shared/heapsnapshot/tests/unit/Census.jsm
rename : toolkit/devtools/heapsnapshot/tests/unit/Match.jsm => devtools/shared/heapsnapshot/tests/unit/Match.jsm
rename : toolkit/devtools/heapsnapshot/tests/unit/head_heapsnapshot.js => devtools/shared/heapsnapshot/tests/unit/head_heapsnapshot.js
rename : toolkit/devtools/heapsnapshot/tests/unit/heap-snapshot-worker.js => devtools/shared/heapsnapshot/tests/unit/heap-snapshot-worker.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_readHeapSnapshot_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_readHeapSnapshot_01.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_01.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_02.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_02.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_03.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_03.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_01.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_02.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_02.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_03.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_03.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_04.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_04.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_05.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_05.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_06.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_06.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_07.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_07.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_08.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_08.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_09.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_09.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_10.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_10.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_11.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_11.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot_with_allocations.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot_with_allocations.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot_worker.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot_worker.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_SaveHeapSnapshot.js => devtools/shared/heapsnapshot/tests/unit/test_SaveHeapSnapshot.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-01.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-01.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-02.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-02.js
rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-03.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-03.js
rename : toolkit/devtools/heapsnapshot/tests/unit/xpcshell.ini => devtools/shared/heapsnapshot/tests/unit/xpcshell.ini
rename : toolkit/devtools/jsbeautify/UPGRADING.md => devtools/shared/jsbeautify/UPGRADING.md
rename : toolkit/devtools/jsbeautify/beautify.js => devtools/shared/jsbeautify/beautify.js
rename : toolkit/devtools/jsbeautify/lib/sanitytest.js => devtools/shared/jsbeautify/lib/sanitytest.js
rename : toolkit/devtools/jsbeautify/lib/urlencode_unpacker.js => devtools/shared/jsbeautify/lib/urlencode_unpacker.js
rename : toolkit/devtools/jsbeautify/moz.build => devtools/shared/jsbeautify/moz.build
rename : toolkit/devtools/jsbeautify/src/beautify-css.js => devtools/shared/jsbeautify/src/beautify-css.js
rename : toolkit/devtools/jsbeautify/src/beautify-html.js => devtools/shared/jsbeautify/src/beautify-html.js
rename : toolkit/devtools/jsbeautify/src/beautify-js.js => devtools/shared/jsbeautify/src/beautify-js.js
rename : toolkit/devtools/jsbeautify/src/beautify-tests.js => devtools/shared/jsbeautify/src/beautify-tests.js
rename : toolkit/devtools/jsbeautify/tests/unit/head_jsbeautify.js => devtools/shared/jsbeautify/tests/unit/head_jsbeautify.js
rename : toolkit/devtools/jsbeautify/tests/unit/test.js => devtools/shared/jsbeautify/tests/unit/test.js
rename : toolkit/devtools/jsbeautify/tests/unit/xpcshell.ini => devtools/shared/jsbeautify/tests/unit/xpcshell.ini
rename : toolkit/devtools/layout/utils.js => devtools/shared/layout/utils.js
rename : toolkit/devtools/moz.build => devtools/shared/moz.build
rename : toolkit/devtools/output-parser.js => devtools/shared/output-parser.js
rename : toolkit/devtools/path.js => devtools/shared/path.js
rename : toolkit/devtools/performance/io.js => devtools/shared/performance/io.js
rename : toolkit/devtools/performance/legacy/actors.js => devtools/shared/performance/legacy/actors.js
rename : toolkit/devtools/performance/legacy/compatibility.js => devtools/shared/performance/legacy/compatibility.js
rename : toolkit/devtools/performance/legacy/front.js => devtools/shared/performance/legacy/front.js
rename : toolkit/devtools/performance/legacy/recording.js => devtools/shared/performance/legacy/recording.js
rename : toolkit/devtools/performance/moz.build => devtools/shared/performance/moz.build
rename : toolkit/devtools/performance/process-communication.js => devtools/shared/performance/process-communication.js
rename : toolkit/devtools/performance/recorder.js => devtools/shared/performance/recorder.js
rename : toolkit/devtools/performance/recording-common.js => devtools/shared/performance/recording-common.js
rename : toolkit/devtools/performance/test/head.js => devtools/shared/performance/test/head.js
rename : toolkit/devtools/performance/test/test_perf-utils-allocations-to-samples.js => devtools/shared/performance/test/test_perf-utils-allocations-to-samples.js
rename : toolkit/devtools/performance/test/xpcshell.ini => devtools/shared/performance/test/xpcshell.ini
rename : toolkit/devtools/performance/utils.js => devtools/shared/performance/utils.js
rename : toolkit/devtools/pretty-fast/UPGRADING.md => devtools/shared/pretty-fast/UPGRADING.md
rename : toolkit/devtools/pretty-fast/moz.build => devtools/shared/pretty-fast/moz.build
rename : toolkit/devtools/pretty-fast/pretty-fast.js => devtools/shared/pretty-fast/pretty-fast.js
rename : toolkit/devtools/pretty-fast/tests/unit/head_pretty-fast.js => devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js
rename : toolkit/devtools/pretty-fast/tests/unit/test.js => devtools/shared/pretty-fast/tests/unit/test.js
rename : toolkit/devtools/pretty-fast/tests/unit/xpcshell.ini => devtools/shared/pretty-fast/tests/unit/xpcshell.ini
rename : toolkit/devtools/qrcode/decoder/LICENSE => devtools/shared/qrcode/decoder/LICENSE
rename : toolkit/devtools/qrcode/decoder/index.js => devtools/shared/qrcode/decoder/index.js
rename : toolkit/devtools/qrcode/decoder/moz.build => devtools/shared/qrcode/decoder/moz.build
rename : toolkit/devtools/qrcode/encoder/LICENSE => devtools/shared/qrcode/encoder/LICENSE
rename : toolkit/devtools/qrcode/encoder/index.js => devtools/shared/qrcode/encoder/index.js
rename : toolkit/devtools/qrcode/encoder/moz.build => devtools/shared/qrcode/encoder/moz.build
rename : toolkit/devtools/qrcode/index.js => devtools/shared/qrcode/index.js
rename : toolkit/devtools/qrcode/moz.build => devtools/shared/qrcode/moz.build
rename : toolkit/devtools/qrcode/tests/mochitest/chrome.ini => devtools/shared/qrcode/tests/mochitest/chrome.ini
rename : toolkit/devtools/qrcode/tests/mochitest/test_decode.html => devtools/shared/qrcode/tests/mochitest/test_decode.html
rename : toolkit/devtools/qrcode/tests/unit/test_encode.js => devtools/shared/qrcode/tests/unit/test_encode.js
rename : toolkit/devtools/qrcode/tests/unit/xpcshell.ini => devtools/shared/qrcode/tests/unit/xpcshell.ini
rename : toolkit/devtools/security/LocalCertService.cpp => devtools/shared/security/LocalCertService.cpp
rename : toolkit/devtools/security/LocalCertService.h => devtools/shared/security/LocalCertService.h
rename : toolkit/devtools/security/auth.js => devtools/shared/security/auth.js
rename : toolkit/devtools/security/cert.js => devtools/shared/security/cert.js
rename : toolkit/devtools/security/docs/wifi.md => devtools/shared/security/docs/wifi.md
rename : toolkit/devtools/security/moz.build => devtools/shared/security/moz.build
rename : toolkit/devtools/security/nsILocalCertService.idl => devtools/shared/security/nsILocalCertService.idl
rename : toolkit/devtools/security/prompt.js => devtools/shared/security/prompt.js
rename : toolkit/devtools/security/socket.js => devtools/shared/security/socket.js
rename : toolkit/devtools/security/tests/unit/head_dbg.js => devtools/shared/security/tests/unit/head_dbg.js
rename : toolkit/devtools/security/tests/unit/test_cert.js => devtools/shared/security/tests/unit/test_cert.js
rename : toolkit/devtools/security/tests/unit/test_encryption.js => devtools/shared/security/tests/unit/test_encryption.js
rename : toolkit/devtools/security/tests/unit/test_oob_cert_auth.js => devtools/shared/security/tests/unit/test_oob_cert_auth.js
rename : toolkit/devtools/security/tests/unit/testactors.js => devtools/shared/security/tests/unit/testactors.js
rename : toolkit/devtools/security/tests/unit/xpcshell.ini => devtools/shared/security/tests/unit/xpcshell.ini
rename : toolkit/devtools/shared/async-storage.js => devtools/shared/shared/async-storage.js
rename : toolkit/devtools/shared/framerate.js => devtools/shared/shared/framerate.js
rename : toolkit/devtools/shared/indentation.js => devtools/shared/shared/indentation.js
rename : toolkit/devtools/shared/memory.js => devtools/shared/shared/memory.js
rename : toolkit/devtools/shared/moz.build => devtools/shared/shared/moz.build
rename : toolkit/devtools/shared/profiler.js => devtools/shared/shared/profiler.js
rename : toolkit/devtools/shared/system.js => devtools/shared/shared/system.js
rename : toolkit/devtools/shared/tests/browser/browser.ini => devtools/shared/shared/tests/browser/browser.ini
rename : toolkit/devtools/shared/tests/browser/browser_async_storage.js => devtools/shared/shared/tests/browser/browser_async_storage.js
rename : toolkit/devtools/shared/tests/browser/browser_worker-01.js => devtools/shared/shared/tests/browser/browser_worker-01.js
rename : toolkit/devtools/shared/tests/browser/browser_worker-02.js => devtools/shared/shared/tests/browser/browser_worker-02.js
rename : toolkit/devtools/shared/tests/browser/browser_worker-03.js => devtools/shared/shared/tests/browser/browser_worker-03.js
rename : toolkit/devtools/shared/tests/unit/.eslintrc => devtools/shared/shared/tests/unit/.eslintrc
rename : toolkit/devtools/shared/tests/unit/test_indentation.js => devtools/shared/shared/tests/unit/test_indentation.js
rename : toolkit/devtools/shared/tests/unit/xpcshell.ini => devtools/shared/shared/tests/unit/xpcshell.ini
rename : toolkit/devtools/shared/timeline.js => devtools/shared/shared/timeline.js
rename : toolkit/devtools/shared/worker-helper.js => devtools/shared/shared/worker-helper.js
rename : toolkit/devtools/shared/worker.js => devtools/shared/shared/worker.js
rename : toolkit/devtools/sourcemap/UPGRADING.md => devtools/shared/sourcemap/UPGRADING.md
rename : toolkit/devtools/sourcemap/moz.build => devtools/shared/sourcemap/moz.build
rename : toolkit/devtools/sourcemap/source-map.js => devtools/shared/sourcemap/source-map.js
rename : toolkit/devtools/sourcemap/tests/unit/head_sourcemap.js => devtools/shared/sourcemap/tests/unit/head_sourcemap.js
rename : toolkit/devtools/sourcemap/tests/unit/test_api.js => devtools/shared/sourcemap/tests/unit/test_api.js
rename : toolkit/devtools/sourcemap/tests/unit/test_array_set.js => devtools/shared/sourcemap/tests/unit/test_array_set.js
rename : toolkit/devtools/sourcemap/tests/unit/test_base64.js => devtools/shared/sourcemap/tests/unit/test_base64.js
rename : toolkit/devtools/sourcemap/tests/unit/test_base64_vlq.js => devtools/shared/sourcemap/tests/unit/test_base64_vlq.js
rename : toolkit/devtools/sourcemap/tests/unit/test_binary_search.js => devtools/shared/sourcemap/tests/unit/test_binary_search.js
rename : toolkit/devtools/sourcemap/tests/unit/test_dog_fooding.js => devtools/shared/sourcemap/tests/unit/test_dog_fooding.js
rename : toolkit/devtools/sourcemap/tests/unit/test_quick_sort.js => devtools/shared/sourcemap/tests/unit/test_quick_sort.js
rename : toolkit/devtools/sourcemap/tests/unit/test_source_map_consumer.js => devtools/shared/sourcemap/tests/unit/test_source_map_consumer.js
rename : toolkit/devtools/sourcemap/tests/unit/test_source_map_generator.js => devtools/shared/sourcemap/tests/unit/test_source_map_generator.js
rename : toolkit/devtools/sourcemap/tests/unit/test_source_node.js => devtools/shared/sourcemap/tests/unit/test_source_node.js
rename : toolkit/devtools/sourcemap/tests/unit/test_util.js => devtools/shared/sourcemap/tests/unit/test_util.js
rename : toolkit/devtools/sourcemap/tests/unit/xpcshell.ini => devtools/shared/sourcemap/tests/unit/xpcshell.ini
rename : toolkit/devtools/styleinspector/css-logic.js => devtools/shared/styleinspector/css-logic.js
rename : toolkit/devtools/styleinspector/moz.build => devtools/shared/styleinspector/moz.build
rename : toolkit/devtools/tern/README => devtools/shared/tern/README
rename : toolkit/devtools/tern/browser.js => devtools/shared/tern/browser.js
rename : toolkit/devtools/tern/comment.js => devtools/shared/tern/comment.js
rename : toolkit/devtools/tern/condense.js => devtools/shared/tern/condense.js
rename : toolkit/devtools/tern/def.js => devtools/shared/tern/def.js
rename : toolkit/devtools/tern/ecma5.js => devtools/shared/tern/ecma5.js
rename : toolkit/devtools/tern/infer.js => devtools/shared/tern/infer.js
rename : toolkit/devtools/tern/moz.build => devtools/shared/tern/moz.build
rename : toolkit/devtools/tern/signal.js => devtools/shared/tern/signal.js
rename : toolkit/devtools/tern/tern.js => devtools/shared/tern/tern.js
rename : toolkit/devtools/tern/tests/unit/head_tern.js => devtools/shared/tern/tests/unit/head_tern.js
rename : toolkit/devtools/tern/tests/unit/test_autocompletion.js => devtools/shared/tern/tests/unit/test_autocompletion.js
rename : toolkit/devtools/tern/tests/unit/test_import_tern.js => devtools/shared/tern/tests/unit/test_import_tern.js
rename : toolkit/devtools/tern/tests/unit/xpcshell.ini => devtools/shared/tern/tests/unit/xpcshell.ini
rename : toolkit/devtools/tests/mochitest/chrome.ini => devtools/shared/tests/mochitest/chrome.ini
rename : toolkit/devtools/tests/mochitest/test_devtools_extensions.html => devtools/shared/tests/mochitest/test_devtools_extensions.html
rename : toolkit/devtools/tests/mochitest/test_eventemitter_basic.html => devtools/shared/tests/mochitest/test_eventemitter_basic.html
rename : toolkit/devtools/tests/mochitest/test_loader_paths.html => devtools/shared/tests/mochitest/test_loader_paths.html
rename : toolkit/devtools/tests/unit/.eslintrc => devtools/shared/tests/unit/.eslintrc
rename : toolkit/devtools/tests/unit/exposeLoader.js => devtools/shared/tests/unit/exposeLoader.js
rename : toolkit/devtools/tests/unit/head_devtools.js => devtools/shared/tests/unit/head_devtools.js
rename : toolkit/devtools/tests/unit/test_async-utils.js => devtools/shared/tests/unit/test_async-utils.js
rename : toolkit/devtools/tests/unit/test_consoleID.js => devtools/shared/tests/unit/test_consoleID.js
rename : toolkit/devtools/tests/unit/test_cssColor.js => devtools/shared/tests/unit/test_cssColor.js
rename : toolkit/devtools/tests/unit/test_defineLazyPrototypeGetter.js => devtools/shared/tests/unit/test_defineLazyPrototypeGetter.js
rename : toolkit/devtools/tests/unit/test_fetch-chrome.js => devtools/shared/tests/unit/test_fetch-chrome.js
rename : toolkit/devtools/tests/unit/test_fetch-file.js => devtools/shared/tests/unit/test_fetch-file.js
rename : toolkit/devtools/tests/unit/test_fetch-http.js => devtools/shared/tests/unit/test_fetch-http.js
rename : toolkit/devtools/tests/unit/test_fetch-resource.js => devtools/shared/tests/unit/test_fetch-resource.js
rename : toolkit/devtools/tests/unit/test_independent_loaders.js => devtools/shared/tests/unit/test_independent_loaders.js
rename : toolkit/devtools/tests/unit/test_invisible_loader.js => devtools/shared/tests/unit/test_invisible_loader.js
rename : toolkit/devtools/tests/unit/test_prettifyCSS.js => devtools/shared/tests/unit/test_prettifyCSS.js
rename : toolkit/devtools/tests/unit/test_require.js => devtools/shared/tests/unit/test_require.js
rename : toolkit/devtools/tests/unit/test_require_lazy.js => devtools/shared/tests/unit/test_require_lazy.js
rename : toolkit/devtools/tests/unit/test_safeErrorString.js => devtools/shared/tests/unit/test_safeErrorString.js
rename : toolkit/devtools/tests/unit/test_stack.js => devtools/shared/tests/unit/test_stack.js
rename : toolkit/devtools/tests/unit/xpcshell.ini => devtools/shared/tests/unit/xpcshell.ini
rename : toolkit/devtools/touch/moz.build => devtools/shared/touch/moz.build
rename : toolkit/devtools/touch/simulator-content.js => devtools/shared/touch/simulator-content.js
rename : toolkit/devtools/touch/simulator.js => devtools/shared/touch/simulator.js
rename : toolkit/devtools/transport/moz.build => devtools/shared/transport/moz.build
rename : toolkit/devtools/transport/packets.js => devtools/shared/transport/packets.js
rename : toolkit/devtools/transport/stream-utils.js => devtools/shared/transport/stream-utils.js
rename : toolkit/devtools/transport/tests/unit/head_dbg.js => devtools/shared/transport/tests/unit/head_dbg.js
rename : toolkit/devtools/transport/tests/unit/test_bulk_error.js => devtools/shared/transport/tests/unit/test_bulk_error.js
rename : toolkit/devtools/transport/tests/unit/test_client_server_bulk.js => devtools/shared/transport/tests/unit/test_client_server_bulk.js
rename : toolkit/devtools/transport/tests/unit/test_dbgsocket.js => devtools/shared/transport/tests/unit/test_dbgsocket.js
rename : toolkit/devtools/transport/tests/unit/test_dbgsocket_connection_drop.js => devtools/shared/transport/tests/unit/test_dbgsocket_connection_drop.js
rename : toolkit/devtools/transport/tests/unit/test_delimited_read.js => devtools/shared/transport/tests/unit/test_delimited_read.js
rename : toolkit/devtools/transport/tests/unit/test_no_bulk.js => devtools/shared/transport/tests/unit/test_no_bulk.js
rename : toolkit/devtools/transport/tests/unit/test_packet.js => devtools/shared/transport/tests/unit/test_packet.js
rename : toolkit/devtools/transport/tests/unit/test_queue.js => devtools/shared/transport/tests/unit/test_queue.js
rename : toolkit/devtools/transport/tests/unit/test_transport_bulk.js => devtools/shared/transport/tests/unit/test_transport_bulk.js
rename : toolkit/devtools/transport/tests/unit/testactors-no-bulk.js => devtools/shared/transport/tests/unit/testactors-no-bulk.js
rename : toolkit/devtools/transport/tests/unit/testactors.js => devtools/shared/transport/tests/unit/testactors.js
rename : toolkit/devtools/transport/tests/unit/xpcshell.ini => devtools/shared/transport/tests/unit/xpcshell.ini
rename : toolkit/devtools/transport/transport.js => devtools/shared/transport/transport.js
rename : toolkit/devtools/webconsole/client.js => devtools/shared/webconsole/client.js
rename : toolkit/devtools/webconsole/moz.build => devtools/shared/webconsole/moz.build
rename : toolkit/devtools/webconsole/network-helper.js => devtools/shared/webconsole/network-helper.js
rename : toolkit/devtools/webconsole/network-monitor.js => devtools/shared/webconsole/network-monitor.js
rename : toolkit/devtools/webconsole/server-logger-monitor.js => devtools/shared/webconsole/server-logger-monitor.js
rename : toolkit/devtools/webconsole/server-logger.js => devtools/shared/webconsole/server-logger.js
rename : toolkit/devtools/webconsole/test/chrome.ini => devtools/shared/webconsole/test/chrome.ini
rename : toolkit/devtools/webconsole/test/common.js => devtools/shared/webconsole/test/common.js
rename : toolkit/devtools/webconsole/test/data.json => devtools/shared/webconsole/test/data.json
rename : toolkit/devtools/webconsole/test/data.json^headers^ => devtools/shared/webconsole/test/data.json^headers^
rename : toolkit/devtools/webconsole/test/network_requests_iframe.html => devtools/shared/webconsole/test/network_requests_iframe.html
rename : toolkit/devtools/webconsole/test/sandboxed_iframe.html => devtools/shared/webconsole/test/sandboxed_iframe.html
rename : toolkit/devtools/webconsole/test/test_basics.html => devtools/shared/webconsole/test/test_basics.html
rename : toolkit/devtools/webconsole/test/test_bug819670_getter_throws.html => devtools/shared/webconsole/test/test_bug819670_getter_throws.html
rename : toolkit/devtools/webconsole/test/test_cached_messages.html => devtools/shared/webconsole/test/test_cached_messages.html
rename : toolkit/devtools/webconsole/test/test_commands_other.html => devtools/shared/webconsole/test/test_commands_other.html
rename : toolkit/devtools/webconsole/test/test_commands_registration.html => devtools/shared/webconsole/test/test_commands_registration.html
rename : toolkit/devtools/webconsole/test/test_console_styling.html => devtools/shared/webconsole/test/test_console_styling.html
rename : toolkit/devtools/webconsole/test/test_consoleapi.html => devtools/shared/webconsole/test/test_consoleapi.html
rename : toolkit/devtools/webconsole/test/test_consoleapi_innerID.html => devtools/shared/webconsole/test/test_consoleapi_innerID.html
rename : toolkit/devtools/webconsole/test/test_file_uri.html => devtools/shared/webconsole/test/test_file_uri.html
rename : toolkit/devtools/webconsole/test/test_jsterm.html => devtools/shared/webconsole/test/test_jsterm.html
rename : toolkit/devtools/webconsole/test/test_jsterm_cd_iframe.html => devtools/shared/webconsole/test/test_jsterm_cd_iframe.html
rename : toolkit/devtools/webconsole/test/test_jsterm_last_result.html => devtools/shared/webconsole/test/test_jsterm_last_result.html
rename : toolkit/devtools/webconsole/test/test_jsterm_queryselector.html => devtools/shared/webconsole/test/test_jsterm_queryselector.html
rename : toolkit/devtools/webconsole/test/test_network_get.html => devtools/shared/webconsole/test/test_network_get.html
rename : toolkit/devtools/webconsole/test/test_network_longstring.html => devtools/shared/webconsole/test/test_network_longstring.html
rename : toolkit/devtools/webconsole/test/test_network_post.html => devtools/shared/webconsole/test/test_network_post.html
rename : toolkit/devtools/webconsole/test/test_network_security-hpkp.html => devtools/shared/webconsole/test/test_network_security-hpkp.html
rename : toolkit/devtools/webconsole/test/test_network_security-hsts.html => devtools/shared/webconsole/test/test_network_security-hsts.html
rename : toolkit/devtools/webconsole/test/test_nsiconsolemessage.html => devtools/shared/webconsole/test/test_nsiconsolemessage.html
rename : toolkit/devtools/webconsole/test/test_object_actor.html => devtools/shared/webconsole/test/test_object_actor.html
rename : toolkit/devtools/webconsole/test/test_object_actor_native_getters.html => devtools/shared/webconsole/test/test_object_actor_native_getters.html
rename : toolkit/devtools/webconsole/test/test_object_actor_native_getters_lenient_this.html => devtools/shared/webconsole/test/test_object_actor_native_getters_lenient_this.html
rename : toolkit/devtools/webconsole/test/test_page_errors.html => devtools/shared/webconsole/test/test_page_errors.html
rename : toolkit/devtools/webconsole/test/test_reflow.html => devtools/shared/webconsole/test/test_reflow.html
rename : toolkit/devtools/webconsole/test/test_throw.html => devtools/shared/webconsole/test/test_throw.html
rename : toolkit/devtools/webconsole/test/unit/test_js_property_provider.js => devtools/shared/webconsole/test/unit/test_js_property_provider.js
rename : toolkit/devtools/webconsole/test/unit/test_network_helper.js => devtools/shared/webconsole/test/unit/test_network_helper.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-certificate.js => devtools/shared/webconsole/test/unit/test_security-info-certificate.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-parser.js => devtools/shared/webconsole/test/unit/test_security-info-parser.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-protocol-version.js => devtools/shared/webconsole/test/unit/test_security-info-protocol-version.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-state.js => devtools/shared/webconsole/test/unit/test_security-info-state.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-static-hpkp.js => devtools/shared/webconsole/test/unit/test_security-info-static-hpkp.js
rename : toolkit/devtools/webconsole/test/unit/test_security-info-weakness-reasons.js => devtools/shared/webconsole/test/unit/test_security-info-weakness-reasons.js
rename : toolkit/devtools/webconsole/test/unit/xpcshell.ini => devtools/shared/webconsole/test/unit/xpcshell.ini
rename : toolkit/devtools/webconsole/utils.js => devtools/shared/webconsole/utils.js
rename : toolkit/devtools/worker-loader.js => devtools/shared/worker-loader.js
extra : commitid : 32KtLPk4LG6
extra : rebase_source : 4627a07ebc461c0a795f9a84ebb45af4f5c18aba
2015-09-21 12:02:24 -05:00

3908 lines
No EOL
334 KiB
JavaScript

function run_test() {
for (var k in SOURCE_MAP_TEST_MODULE) {
if (/^test/.test(k)) {
SOURCE_MAP_TEST_MODULE[k](assert);
}
}
}
var SOURCE_MAP_TEST_MODULE =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var util = __webpack_require__(1);
var SourceMapGenerator = __webpack_require__(3).SourceMapGenerator;
var SourceMapConsumer = __webpack_require__(8).SourceMapConsumer;
var SourceNode = __webpack_require__(11).SourceNode;
function forEachNewline(fn) {
return function (assert) {
['\n', '\r\n'].forEach(fn.bind(null, assert));
}
}
exports['test .add()'] = function (assert) {
var node = new SourceNode(null, null, null);
// Adding a string works.
node.add('function noop() {}');
// Adding another source node works.
node.add(new SourceNode(null, null, null));
// Adding an array works.
node.add(['function foo() {',
new SourceNode(null, null, null,
'return 10;'),
'}']);
// Adding other stuff doesn't.
assert.throws(function () {
node.add({});
});
assert.throws(function () {
node.add(function () {});
});
};
exports['test .prepend()'] = function (assert) {
var node = new SourceNode(null, null, null);
// Prepending a string works.
node.prepend('function noop() {}');
assert.equal(node.children[0], 'function noop() {}');
assert.equal(node.children.length, 1);
// Prepending another source node works.
node.prepend(new SourceNode(null, null, null));
assert.equal(node.children[0], '');
assert.equal(node.children[1], 'function noop() {}');
assert.equal(node.children.length, 2);
// Prepending an array works.
node.prepend(['function foo() {',
new SourceNode(null, null, null,
'return 10;'),
'}']);
assert.equal(node.children[0], 'function foo() {');
assert.equal(node.children[1], 'return 10;');
assert.equal(node.children[2], '}');
assert.equal(node.children[3], '');
assert.equal(node.children[4], 'function noop() {}');
assert.equal(node.children.length, 5);
// Prepending other stuff doesn't.
assert.throws(function () {
node.prepend({});
});
assert.throws(function () {
node.prepend(function () {});
});
};
exports['test .toString()'] = function (assert) {
assert.equal((new SourceNode(null, null, null,
['function foo() {',
new SourceNode(null, null, null, 'return 10;'),
'}'])).toString(),
'function foo() {return 10;}');
};
exports['test .join()'] = function (assert) {
assert.equal((new SourceNode(null, null, null,
['a', 'b', 'c', 'd'])).join(', ').toString(),
'a, b, c, d');
};
exports['test .walk()'] = function (assert) {
var node = new SourceNode(null, null, null,
['(function () {\n',
' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
'}());']);
var expected = [
{ str: '(function () {\n', source: null, line: null, column: null },
{ str: ' ', source: null, line: null, column: null },
{ str: 'someCall()', source: 'a.js', line: 1, column: 0 },
{ str: ';\n', source: null, line: null, column: null },
{ str: ' ', source: null, line: null, column: null },
{ str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
{ str: ';\n', source: null, line: null, column: null },
{ str: '}());', source: null, line: null, column: null },
];
var i = 0;
node.walk(function (chunk, loc) {
assert.equal(expected[i].str, chunk);
assert.equal(expected[i].source, loc.source);
assert.equal(expected[i].line, loc.line);
assert.equal(expected[i].column, loc.column);
i++;
});
};
exports['test .replaceRight'] = function (assert) {
var node;
// Not nested
node = new SourceNode(null, null, null, 'hello world');
node.replaceRight(/world/, 'universe');
assert.equal(node.toString(), 'hello universe');
// Nested
node = new SourceNode(null, null, null,
[new SourceNode(null, null, null, 'hey sexy mama, '),
new SourceNode(null, null, null, 'want to kill all humans?')]);
node.replaceRight(/kill all humans/, 'watch Futurama');
assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
};
exports['test .toStringWithSourceMap()'] = forEachNewline(function (assert, nl) {
var node = new SourceNode(null, null, null,
['(function () {' + nl,
' ',
new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
new SourceNode(1, 8, 'a.js', '()'),
';' + nl,
' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';' + nl,
'}());']);
var result = node.toStringWithSourceMap({
file: 'foo.js'
});
assert.equal(result.code, [
'(function () {',
' someCall();',
' if (foo) bar();',
'}());'
].join(nl));
var map = result.map;
var mapWithoutOptions = node.toStringWithSourceMap().map;
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator');
assert.ok(!('file' in mapWithoutOptions));
mapWithoutOptions._file = 'foo.js';
util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON());
map = new SourceMapConsumer(map.toString());
var actual;
actual = map.originalPositionFor({
line: 1,
column: 4
});
assert.equal(actual.source, null);
assert.equal(actual.line, null);
assert.equal(actual.column, null);
actual = map.originalPositionFor({
line: 2,
column: 2
});
assert.equal(actual.source, 'a.js');
assert.equal(actual.line, 1);
assert.equal(actual.column, 0);
assert.equal(actual.name, 'originalCall');
actual = map.originalPositionFor({
line: 3,
column: 2
});
assert.equal(actual.source, 'b.js');
assert.equal(actual.line, 2);
assert.equal(actual.column, 0);
actual = map.originalPositionFor({
line: 3,
column: 16
});
assert.equal(actual.source, null);
assert.equal(actual.line, null);
assert.equal(actual.column, null);
actual = map.originalPositionFor({
line: 4,
column: 2
});
assert.equal(actual.source, null);
assert.equal(actual.line, null);
assert.equal(actual.column, null);
});
exports['test .fromStringWithSourceMap()'] = forEachNewline(function (assert, nl) {
var testCode = util.testGeneratedCode.replace(/\n/g, nl);
var node = SourceNode.fromStringWithSourceMap(
testCode,
new SourceMapConsumer(util.testMap));
var result = node.toStringWithSourceMap({
file: 'min.js'
});
var map = result.map;
var code = result.code;
assert.equal(code, testCode);
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
map = map.toJSON();
assert.equal(map.version, util.testMap.version);
assert.equal(map.file, util.testMap.file);
assert.equal(map.mappings, util.testMap.mappings);
});
exports['test .fromStringWithSourceMap() empty map'] = forEachNewline(function (assert, nl) {
var node = SourceNode.fromStringWithSourceMap(
util.testGeneratedCode.replace(/\n/g, nl),
new SourceMapConsumer(util.emptyMap));
var result = node.toStringWithSourceMap({
file: 'min.js'
});
var map = result.map;
var code = result.code;
assert.equal(code, util.testGeneratedCode.replace(/\n/g, nl));
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
map = map.toJSON();
assert.equal(map.version, util.emptyMap.version);
assert.equal(map.file, util.emptyMap.file);
assert.equal(map.mappings.length, util.emptyMap.mappings.length);
assert.equal(map.mappings, util.emptyMap.mappings);
});
exports['test .fromStringWithSourceMap() complex version'] = forEachNewline(function (assert, nl) {
var input = new SourceNode(null, null, null, [
"(function() {" + nl,
" var Test = {};" + nl,
" ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };" + nl),
" ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), nl,
"}());" + nl,
"/* Generated Source */"]);
input = input.toStringWithSourceMap({
file: 'foo.js'
});
var node = SourceNode.fromStringWithSourceMap(
input.code,
new SourceMapConsumer(input.map.toString()));
var result = node.toStringWithSourceMap({
file: 'foo.js'
});
var map = result.map;
var code = result.code;
assert.equal(code, input.code);
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
map = map.toJSON();
var inputMap = input.map.toJSON();
util.assertEqualMaps(assert, map, inputMap);
});
exports['test .fromStringWithSourceMap() third argument'] = function (assert) {
// Assume the following directory structure:
//
// http://foo.org/
// bar.coffee
// app/
// coffee/
// foo.coffee
// coffeeBundle.js # Made from {foo,bar,baz}.coffee
// maps/
// coffeeBundle.js.map
// js/
// foo.js
// public/
// app.js # Made from {foo,coffeeBundle}.js
// app.js.map
//
// http://www.example.com/
// baz.coffee
var coffeeBundle = new SourceNode(1, 0, 'foo.coffee', 'foo(coffee);\n');
coffeeBundle.setSourceContent('foo.coffee', 'foo coffee');
coffeeBundle.add(new SourceNode(2, 0, '/bar.coffee', 'bar(coffee);\n'));
coffeeBundle.add(new SourceNode(3, 0, 'http://www.example.com/baz.coffee', 'baz(coffee);'));
coffeeBundle = coffeeBundle.toStringWithSourceMap({
file: 'foo.js',
sourceRoot: '..'
});
var foo = new SourceNode(1, 0, 'foo.js', 'foo(js);');
var test = function(relativePath, expectedSources) {
var app = new SourceNode();
app.add(SourceNode.fromStringWithSourceMap(
coffeeBundle.code,
new SourceMapConsumer(coffeeBundle.map.toString()),
relativePath));
app.add(foo);
var i = 0;
app.walk(function (chunk, loc) {
assert.equal(loc.source, expectedSources[i]);
i++;
});
app.walkSourceContents(function (sourceFile, sourceContent) {
assert.equal(sourceFile, expectedSources[0]);
assert.equal(sourceContent, 'foo coffee');
})
};
test('../coffee/maps', [
'../coffee/foo.coffee',
'/bar.coffee',
'http://www.example.com/baz.coffee',
'foo.js'
]);
// If the third parameter is omitted or set to the current working
// directory we get incorrect source paths:
test(undefined, [
'../foo.coffee',
'/bar.coffee',
'http://www.example.com/baz.coffee',
'foo.js'
]);
test('', [
'../foo.coffee',
'/bar.coffee',
'http://www.example.com/baz.coffee',
'foo.js'
]);
test('.', [
'../foo.coffee',
'/bar.coffee',
'http://www.example.com/baz.coffee',
'foo.js'
]);
test('./', [
'../foo.coffee',
'/bar.coffee',
'http://www.example.com/baz.coffee',
'foo.js'
]);
};
exports['test .toStringWithSourceMap() merging duplicate mappings'] = forEachNewline(function (assert, nl) {
var input = new SourceNode(null, null, null, [
new SourceNode(1, 0, "a.js", "(function"),
new SourceNode(1, 0, "a.js", "() {" + nl),
" ",
new SourceNode(1, 0, "a.js", "var Test = "),
new SourceNode(1, 0, "b.js", "{};" + nl),
new SourceNode(2, 0, "b.js", "Test"),
new SourceNode(2, 0, "b.js", ".A", "A"),
new SourceNode(2, 20, "b.js", " = { value: ", "A"),
"1234",
new SourceNode(2, 40, "b.js", " };" + nl, "A"),
"}());" + nl,
"/* Generated Source */"
]);
input = input.toStringWithSourceMap({
file: 'foo.js'
});
assert.equal(input.code, [
"(function() {",
" var Test = {};",
"Test.A = { value: 1234 };",
"}());",
"/* Generated Source */"
].join(nl))
var correctMap = new SourceMapGenerator({
file: 'foo.js'
});
correctMap.addMapping({
generated: { line: 1, column: 0 },
source: 'a.js',
original: { line: 1, column: 0 }
});
// Here is no need for a empty mapping,
// because mappings ends at eol
correctMap.addMapping({
generated: { line: 2, column: 2 },
source: 'a.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 2, column: 13 },
source: 'b.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 3, column: 0 },
source: 'b.js',
original: { line: 2, column: 0 }
});
correctMap.addMapping({
generated: { line: 3, column: 4 },
source: 'b.js',
name: 'A',
original: { line: 2, column: 0 }
});
correctMap.addMapping({
generated: { line: 3, column: 6 },
source: 'b.js',
name: 'A',
original: { line: 2, column: 20 }
});
// This empty mapping is required,
// because there is a hole in the middle of the line
correctMap.addMapping({
generated: { line: 3, column: 18 }
});
correctMap.addMapping({
generated: { line: 3, column: 22 },
source: 'b.js',
name: 'A',
original: { line: 2, column: 40 }
});
// Here is no need for a empty mapping,
// because mappings ends at eol
var inputMap = input.map.toJSON();
correctMap = correctMap.toJSON();
util.assertEqualMaps(assert, inputMap, correctMap);
});
exports['test .toStringWithSourceMap() multi-line SourceNodes'] = forEachNewline(function (assert, nl) {
var input = new SourceNode(null, null, null, [
new SourceNode(1, 0, "a.js", "(function() {" + nl + "var nextLine = 1;" + nl + "anotherLine();" + nl),
new SourceNode(2, 2, "b.js", "Test.call(this, 123);" + nl),
new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';" + nl),
new SourceNode(2, 2, "b.js", "anotherLine();" + nl),
"/*" + nl + "Generated" + nl + "Source" + nl + "*/" + nl,
new SourceNode(3, 4, "c.js", "anotherLine();" + nl),
"/*" + nl + "Generated" + nl + "Source" + nl + "*/"
]);
input = input.toStringWithSourceMap({
file: 'foo.js'
});
assert.equal(input.code, [
"(function() {",
"var nextLine = 1;",
"anotherLine();",
"Test.call(this, 123);",
"this['stuff'] = 'v';",
"anotherLine();",
"/*",
"Generated",
"Source",
"*/",
"anotherLine();",
"/*",
"Generated",
"Source",
"*/"
].join(nl));
var correctMap = new SourceMapGenerator({
file: 'foo.js'
});
correctMap.addMapping({
generated: { line: 1, column: 0 },
source: 'a.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 2, column: 0 },
source: 'a.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 3, column: 0 },
source: 'a.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 4, column: 0 },
source: 'b.js',
original: { line: 2, column: 2 }
});
correctMap.addMapping({
generated: { line: 5, column: 0 },
source: 'b.js',
original: { line: 2, column: 2 }
});
correctMap.addMapping({
generated: { line: 6, column: 0 },
source: 'b.js',
original: { line: 2, column: 2 }
});
correctMap.addMapping({
generated: { line: 11, column: 0 },
source: 'c.js',
original: { line: 3, column: 4 }
});
var inputMap = input.map.toJSON();
correctMap = correctMap.toJSON();
util.assertEqualMaps(assert, inputMap, correctMap);
});
exports['test .toStringWithSourceMap() with empty string'] = function (assert) {
var node = new SourceNode(1, 0, 'empty.js', '');
var result = node.toStringWithSourceMap();
assert.equal(result.code, '');
};
exports['test .toStringWithSourceMap() with consecutive newlines'] = forEachNewline(function (assert, nl) {
var input = new SourceNode(null, null, null, [
"/***/" + nl + nl,
new SourceNode(1, 0, "a.js", "'use strict';" + nl),
new SourceNode(2, 0, "a.js", "a();"),
]);
input = input.toStringWithSourceMap({
file: 'foo.js'
});
assert.equal(input.code, [
"/***/",
"",
"'use strict';",
"a();",
].join(nl));
var correctMap = new SourceMapGenerator({
file: 'foo.js'
});
correctMap.addMapping({
generated: { line: 3, column: 0 },
source: 'a.js',
original: { line: 1, column: 0 }
});
correctMap.addMapping({
generated: { line: 4, column: 0 },
source: 'a.js',
original: { line: 2, column: 0 }
});
var inputMap = input.map.toJSON();
correctMap = correctMap.toJSON();
util.assertEqualMaps(assert, inputMap, correctMap);
});
exports['test setSourceContent with toStringWithSourceMap'] = function (assert) {
var aNode = new SourceNode(1, 1, 'a.js', 'a');
aNode.setSourceContent('a.js', 'someContent');
var node = new SourceNode(null, null, null,
['(function () {\n',
' ', aNode,
' ', new SourceNode(1, 1, 'b.js', 'b'),
'}());']);
node.setSourceContent('b.js', 'otherContent');
var map = node.toStringWithSourceMap({
file: 'foo.js'
}).map;
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
map = new SourceMapConsumer(map.toString());
assert.equal(map.sources.length, 2);
assert.equal(map.sources[0], 'a.js');
assert.equal(map.sources[1], 'b.js');
assert.equal(map.sourcesContent.length, 2);
assert.equal(map.sourcesContent[0], 'someContent');
assert.equal(map.sourcesContent[1], 'otherContent');
};
exports['test walkSourceContents'] = function (assert) {
var aNode = new SourceNode(1, 1, 'a.js', 'a');
aNode.setSourceContent('a.js', 'someContent');
var node = new SourceNode(null, null, null,
['(function () {\n',
' ', aNode,
' ', new SourceNode(1, 1, 'b.js', 'b'),
'}());']);
node.setSourceContent('b.js', 'otherContent');
var results = [];
node.walkSourceContents(function (sourceFile, sourceContent) {
results.push([sourceFile, sourceContent]);
});
assert.equal(results.length, 2);
assert.equal(results[0][0], 'a.js');
assert.equal(results[0][1], 'someContent');
assert.equal(results[1][0], 'b.js');
assert.equal(results[1][1], 'otherContent');
};
}
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var util = __webpack_require__(2);
// This is a test mapping which maps functions from two different files
// (one.js and two.js) to a minified generated source.
//
// Here is one.js:
//
// ONE.foo = function (bar) {
// return baz(bar);
// };
//
// Here is two.js:
//
// TWO.inc = function (n) {
// return n + 1;
// };
//
// And here is the generated code (min.js):
//
// ONE.foo=function(a){return baz(a);};
// TWO.inc=function(a){return a+1;};
exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+
" TWO.inc=function(a){return a+1;};";
exports.testMap = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['one.js', 'two.js'],
sourceRoot: '/the/root',
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
exports.testMapNoSourceRoot = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['one.js', 'two.js'],
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
exports.testMapEmptySourceRoot = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['one.js', 'two.js'],
sourceRoot: '',
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
// This mapping is identical to above, but uses the indexed format instead.
exports.indexedTestMap = {
version: 3,
file: 'min.js',
sections: [
{
offset: {
line: 0,
column: 0
},
map: {
version: 3,
sources: [
"one.js"
],
sourcesContent: [
' ONE.foo = function (bar) {\n' +
' return baz(bar);\n' +
' };',
],
names: [
"bar",
"baz"
],
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
file: "min.js",
sourceRoot: "/the/root"
}
},
{
offset: {
line: 1,
column: 0
},
map: {
version: 3,
sources: [
"two.js"
],
sourcesContent: [
' TWO.inc = function (n) {\n' +
' return n + 1;\n' +
' };'
],
names: [
"n"
],
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
file: "min.js",
sourceRoot: "/the/root"
}
}
]
};
exports.indexedTestMapDifferentSourceRoots = {
version: 3,
file: 'min.js',
sections: [
{
offset: {
line: 0,
column: 0
},
map: {
version: 3,
sources: [
"one.js"
],
sourcesContent: [
' ONE.foo = function (bar) {\n' +
' return baz(bar);\n' +
' };',
],
names: [
"bar",
"baz"
],
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
file: "min.js",
sourceRoot: "/the/root"
}
},
{
offset: {
line: 1,
column: 0
},
map: {
version: 3,
sources: [
"two.js"
],
sourcesContent: [
' TWO.inc = function (n) {\n' +
' return n + 1;\n' +
' };'
],
names: [
"n"
],
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
file: "min.js",
sourceRoot: "/different/root"
}
}
]
};
exports.testMapWithSourcesContent = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['one.js', 'two.js'],
sourcesContent: [
' ONE.foo = function (bar) {\n' +
' return baz(bar);\n' +
' };',
' TWO.inc = function (n) {\n' +
' return n + 1;\n' +
' };'
],
sourceRoot: '/the/root',
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
exports.testMapRelativeSources = {
version: 3,
file: 'min.js',
names: ['bar', 'baz', 'n'],
sources: ['./one.js', './two.js'],
sourcesContent: [
' ONE.foo = function (bar) {\n' +
' return baz(bar);\n' +
' };',
' TWO.inc = function (n) {\n' +
' return n + 1;\n' +
' };'
],
sourceRoot: '/the/root',
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
exports.emptyMap = {
version: 3,
file: 'min.js',
names: [],
sources: [],
mappings: ''
};
function assertMapping(generatedLine, generatedColumn, originalSource,
originalLine, originalColumn, name, bias, map, assert,
dontTestGenerated, dontTestOriginal) {
if (!dontTestOriginal) {
var origMapping = map.originalPositionFor({
line: generatedLine,
column: generatedColumn,
bias: bias
});
assert.equal(origMapping.name, name,
'Incorrect name, expected ' + JSON.stringify(name)
+ ', got ' + JSON.stringify(origMapping.name));
assert.equal(origMapping.line, originalLine,
'Incorrect line, expected ' + JSON.stringify(originalLine)
+ ', got ' + JSON.stringify(origMapping.line));
assert.equal(origMapping.column, originalColumn,
'Incorrect column, expected ' + JSON.stringify(originalColumn)
+ ', got ' + JSON.stringify(origMapping.column));
var expectedSource;
if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) {
expectedSource = originalSource;
} else if (originalSource) {
expectedSource = map.sourceRoot
? util.join(map.sourceRoot, originalSource)
: originalSource;
} else {
expectedSource = null;
}
assert.equal(origMapping.source, expectedSource,
'Incorrect source, expected ' + JSON.stringify(expectedSource)
+ ', got ' + JSON.stringify(origMapping.source));
}
if (!dontTestGenerated) {
var genMapping = map.generatedPositionFor({
source: originalSource,
line: originalLine,
column: originalColumn,
bias: bias
});
assert.equal(genMapping.line, generatedLine,
'Incorrect line, expected ' + JSON.stringify(generatedLine)
+ ', got ' + JSON.stringify(genMapping.line));
assert.equal(genMapping.column, generatedColumn,
'Incorrect column, expected ' + JSON.stringify(generatedColumn)
+ ', got ' + JSON.stringify(genMapping.column));
}
}
exports.assertMapping = assertMapping;
function assertEqualMaps(assert, actualMap, expectedMap) {
assert.equal(actualMap.version, expectedMap.version, "version mismatch");
assert.equal(actualMap.file, expectedMap.file, "file mismatch");
assert.equal(actualMap.names.length,
expectedMap.names.length,
"names length mismatch: " +
actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
for (var i = 0; i < actualMap.names.length; i++) {
assert.equal(actualMap.names[i],
expectedMap.names[i],
"names[" + i + "] mismatch: " +
actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
}
assert.equal(actualMap.sources.length,
expectedMap.sources.length,
"sources length mismatch: " +
actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
for (var i = 0; i < actualMap.sources.length; i++) {
assert.equal(actualMap.sources[i],
expectedMap.sources[i],
"sources[" + i + "] length mismatch: " +
actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
}
assert.equal(actualMap.sourceRoot,
expectedMap.sourceRoot,
"sourceRoot mismatch: " +
actualMap.sourceRoot + " != " + expectedMap.sourceRoot);
assert.equal(actualMap.mappings, expectedMap.mappings,
"mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings);
if (actualMap.sourcesContent) {
assert.equal(actualMap.sourcesContent.length,
expectedMap.sourcesContent.length,
"sourcesContent length mismatch");
for (var i = 0; i < actualMap.sourcesContent.length; i++) {
assert.equal(actualMap.sourcesContent[i],
expectedMap.sourcesContent[i],
"sourcesContent[" + i + "] mismatch");
}
}
}
exports.assertEqualMaps = assertEqualMaps;
}
/***/ },
/* 2 */
/***/ function(module, exports) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
/**
* This is a helper function for getting values from parameter/options
* objects.
*
* @param args The object we are extracting values from
* @param name The name of the property we are getting.
* @param defaultValue An optional value to return if the property is missing
* from the object. If this is not specified and the property is missing, an
* error will be thrown.
*/
function getArg(aArgs, aName, aDefaultValue) {
if (aName in aArgs) {
return aArgs[aName];
} else if (arguments.length === 3) {
return aDefaultValue;
} else {
throw new Error('"' + aName + '" is a required argument.');
}
}
exports.getArg = getArg;
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
var dataUrlRegexp = /^data:.+\,.+$/;
function urlParse(aUrl) {
var match = aUrl.match(urlRegexp);
if (!match) {
return null;
}
return {
scheme: match[1],
auth: match[2],
host: match[3],
port: match[4],
path: match[5]
};
}
exports.urlParse = urlParse;
function urlGenerate(aParsedUrl) {
var url = '';
if (aParsedUrl.scheme) {
url += aParsedUrl.scheme + ':';
}
url += '//';
if (aParsedUrl.auth) {
url += aParsedUrl.auth + '@';
}
if (aParsedUrl.host) {
url += aParsedUrl.host;
}
if (aParsedUrl.port) {
url += ":" + aParsedUrl.port
}
if (aParsedUrl.path) {
url += aParsedUrl.path;
}
return url;
}
exports.urlGenerate = urlGenerate;
/**
* Normalizes a path, or the path portion of a URL:
*
* - Replaces consequtive slashes with one slash.
* - Removes unnecessary '.' parts.
* - Removes unnecessary '<dir>/..' parts.
*
* Based on code in the Node.js 'path' core module.
*
* @param aPath The path or url to normalize.
*/
function normalize(aPath) {
var path = aPath;
var url = urlParse(aPath);
if (url) {
if (!url.path) {
return aPath;
}
path = url.path;
}
var isAbsolute = exports.isAbsolute(path);
var parts = path.split(/\/+/);
for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
part = parts[i];
if (part === '.') {
parts.splice(i, 1);
} else if (part === '..') {
up++;
} else if (up > 0) {
if (part === '') {
// The first part is blank if the path is absolute. Trying to go
// above the root is a no-op. Therefore we can remove all '..' parts
// directly after the root.
parts.splice(i + 1, up);
up = 0;
} else {
parts.splice(i, 2);
up--;
}
}
}
path = parts.join('/');
if (path === '') {
path = isAbsolute ? '/' : '.';
}
if (url) {
url.path = path;
return urlGenerate(url);
}
return path;
}
exports.normalize = normalize;
/**
* Joins two paths/URLs.
*
* @param aRoot The root path or URL.
* @param aPath The path or URL to be joined with the root.
*
* - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
* scheme-relative URL: Then the scheme of aRoot, if any, is prepended
* first.
* - Otherwise aPath is a path. If aRoot is a URL, then its path portion
* is updated with the result and aRoot is returned. Otherwise the result
* is returned.
* - If aPath is absolute, the result is aPath.
* - Otherwise the two paths are joined with a slash.
* - Joining for example 'http://' and 'www.example.com' is also supported.
*/
function join(aRoot, aPath) {
if (aRoot === "") {
aRoot = ".";
}
if (aPath === "") {
aPath = ".";
}
var aPathUrl = urlParse(aPath);
var aRootUrl = urlParse(aRoot);
if (aRootUrl) {
aRoot = aRootUrl.path || '/';
}
// `join(foo, '//www.example.org')`
if (aPathUrl && !aPathUrl.scheme) {
if (aRootUrl) {
aPathUrl.scheme = aRootUrl.scheme;
}
return urlGenerate(aPathUrl);
}
if (aPathUrl || aPath.match(dataUrlRegexp)) {
return aPath;
}
// `join('http://', 'www.example.com')`
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
aRootUrl.host = aPath;
return urlGenerate(aRootUrl);
}
var joined = aPath.charAt(0) === '/'
? aPath
: normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
if (aRootUrl) {
aRootUrl.path = joined;
return urlGenerate(aRootUrl);
}
return joined;
}
exports.join = join;
exports.isAbsolute = function (aPath) {
return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
};
/**
* Make a path relative to a URL or another path.
*
* @param aRoot The root path or URL.
* @param aPath The path or URL to be made relative to aRoot.
*/
function relative(aRoot, aPath) {
if (aRoot === "") {
aRoot = ".";
}
aRoot = aRoot.replace(/\/$/, '');
// It is possible for the path to be above the root. In this case, simply
// checking whether the root is a prefix of the path won't work. Instead, we
// need to remove components from the root one by one, until either we find
// a prefix that fits, or we run out of components to remove.
var level = 0;
while (aPath.indexOf(aRoot + '/') !== 0) {
var index = aRoot.lastIndexOf("/");
if (index < 0) {
return aPath;
}
// If the only part of the root that is left is the scheme (i.e. http://,
// file:///, etc.), one or more slashes (/), or simply nothing at all, we
// have exhausted all components, so the path is not relative to the root.
aRoot = aRoot.slice(0, index);
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
return aPath;
}
++level;
}
// Make sure we add a "../" for each component we removed from the root.
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
}
exports.relative = relative;
/**
* Because behavior goes wacky when you set `__proto__` on objects, we
* have to prefix all the strings in our set with an arbitrary character.
*
* See https://github.com/mozilla/source-map/pull/31 and
* https://github.com/mozilla/source-map/issues/30
*
* @param String aStr
*/
function toSetString(aStr) {
return '$' + aStr;
}
exports.toSetString = toSetString;
function fromSetString(aStr) {
return aStr.substr(1);
}
exports.fromSetString = fromSetString;
/**
* Comparator between two mappings where the original positions are compared.
*
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
* mappings with the same original source/line/column, but different generated
* line and column the same. Useful when searching for a mapping with a
* stubbed out mapping.
*/
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
var cmp = mappingA.source - mappingB.source;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalLine - mappingB.originalLine;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalColumn - mappingB.originalColumn;
if (cmp !== 0 || onlyCompareOriginal) {
return cmp;
}
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.generatedLine - mappingB.generatedLine;
if (cmp !== 0) {
return cmp;
}
return mappingA.name - mappingB.name;
}
exports.compareByOriginalPositions = compareByOriginalPositions;
/**
* Comparator between two mappings with deflated source and name indices where
* the generated positions are compared.
*
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
* mappings with the same generated line and column, but different
* source/name/original line and column the same. Useful when searching for a
* mapping with a stubbed out mapping.
*/
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
var cmp = mappingA.generatedLine - mappingB.generatedLine;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
if (cmp !== 0 || onlyCompareGenerated) {
return cmp;
}
cmp = mappingA.source - mappingB.source;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalLine - mappingB.originalLine;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalColumn - mappingB.originalColumn;
if (cmp !== 0) {
return cmp;
}
return mappingA.name - mappingB.name;
}
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
function strcmp(aStr1, aStr2) {
if (aStr1 === aStr2) {
return 0;
}
if (aStr1 > aStr2) {
return 1;
}
return -1;
}
/**
* Comparator between two mappings with inflated source and name strings where
* the generated positions are compared.
*/
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
var cmp = mappingA.generatedLine - mappingB.generatedLine;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
if (cmp !== 0) {
return cmp;
}
cmp = strcmp(mappingA.source, mappingB.source);
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalLine - mappingB.originalLine;
if (cmp !== 0) {
return cmp;
}
cmp = mappingA.originalColumn - mappingB.originalColumn;
if (cmp !== 0) {
return cmp;
}
return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
}
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var base64VLQ = __webpack_require__(4);
var util = __webpack_require__(2);
var ArraySet = __webpack_require__(6).ArraySet;
var MappingList = __webpack_require__(7).MappingList;
/**
* An instance of the SourceMapGenerator represents a source map which is
* being built incrementally. You may pass an object with the following
* properties:
*
* - file: The filename of the generated source.
* - sourceRoot: A root for all relative URLs in this source map.
*/
function SourceMapGenerator(aArgs) {
if (!aArgs) {
aArgs = {};
}
this._file = util.getArg(aArgs, 'file', null);
this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
this._sources = new ArraySet();
this._names = new ArraySet();
this._mappings = new MappingList();
this._sourcesContents = null;
}
SourceMapGenerator.prototype._version = 3;
/**
* Creates a new SourceMapGenerator based on a SourceMapConsumer
*
* @param aSourceMapConsumer The SourceMap.
*/
SourceMapGenerator.fromSourceMap =
function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
var sourceRoot = aSourceMapConsumer.sourceRoot;
var generator = new SourceMapGenerator({
file: aSourceMapConsumer.file,
sourceRoot: sourceRoot
});
aSourceMapConsumer.eachMapping(function (mapping) {
var newMapping = {
generated: {
line: mapping.generatedLine,
column: mapping.generatedColumn
}
};
if (mapping.source != null) {
newMapping.source = mapping.source;
if (sourceRoot != null) {
newMapping.source = util.relative(sourceRoot, newMapping.source);
}
newMapping.original = {
line: mapping.originalLine,
column: mapping.originalColumn
};
if (mapping.name != null) {
newMapping.name = mapping.name;
}
}
generator.addMapping(newMapping);
});
aSourceMapConsumer.sources.forEach(function (sourceFile) {
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
if (content != null) {
generator.setSourceContent(sourceFile, content);
}
});
return generator;
};
/**
* Add a single mapping from original source line and column to the generated
* source's line and column for this source map being created. The mapping
* object should have the following properties:
*
* - generated: An object with the generated line and column positions.
* - original: An object with the original line and column positions.
* - source: The original source file (relative to the sourceRoot).
* - name: An optional original token name for this mapping.
*/
SourceMapGenerator.prototype.addMapping =
function SourceMapGenerator_addMapping(aArgs) {
var generated = util.getArg(aArgs, 'generated');
var original = util.getArg(aArgs, 'original', null);
var source = util.getArg(aArgs, 'source', null);
var name = util.getArg(aArgs, 'name', null);
if (!this._skipValidation) {
this._validateMapping(generated, original, source, name);
}
if (source != null && !this._sources.has(source)) {
this._sources.add(source);
}
if (name != null && !this._names.has(name)) {
this._names.add(name);
}
this._mappings.add({
generatedLine: generated.line,
generatedColumn: generated.column,
originalLine: original != null && original.line,
originalColumn: original != null && original.column,
source: source,
name: name
});
};
/**
* Set the source content for a source file.
*/
SourceMapGenerator.prototype.setSourceContent =
function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
var source = aSourceFile;
if (this._sourceRoot != null) {
source = util.relative(this._sourceRoot, source);
}
if (aSourceContent != null) {
// Add the source content to the _sourcesContents map.
// Create a new _sourcesContents map if the property is null.
if (!this._sourcesContents) {
this._sourcesContents = {};
}
this._sourcesContents[util.toSetString(source)] = aSourceContent;
} else if (this._sourcesContents) {
// Remove the source file from the _sourcesContents map.
// If the _sourcesContents map is empty, set the property to null.
delete this._sourcesContents[util.toSetString(source)];
if (Object.keys(this._sourcesContents).length === 0) {
this._sourcesContents = null;
}
}
};
/**
* Applies the mappings of a sub-source-map for a specific source file to the
* source map being generated. Each mapping to the supplied source file is
* rewritten using the supplied source map. Note: The resolution for the
* resulting mappings is the minimium of this map and the supplied map.
*
* @param aSourceMapConsumer The source map to be applied.
* @param aSourceFile Optional. The filename of the source file.
* If omitted, SourceMapConsumer's file property will be used.
* @param aSourceMapPath Optional. The dirname of the path to the source map
* to be applied. If relative, it is relative to the SourceMapConsumer.
* This parameter is needed when the two source maps aren't in the same
* directory, and the source map to be applied contains relative source
* paths. If so, those relative source paths need to be rewritten
* relative to the SourceMapGenerator.
*/
SourceMapGenerator.prototype.applySourceMap =
function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
var sourceFile = aSourceFile;
// If aSourceFile is omitted, we will use the file property of the SourceMap
if (aSourceFile == null) {
if (aSourceMapConsumer.file == null) {
throw new Error(
'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
'or the source map\'s "file" property. Both were omitted.'
);
}
sourceFile = aSourceMapConsumer.file;
}
var sourceRoot = this._sourceRoot;
// Make "sourceFile" relative if an absolute Url is passed.
if (sourceRoot != null) {
sourceFile = util.relative(sourceRoot, sourceFile);
}
// Applying the SourceMap can add and remove items from the sources and
// the names array.
var newSources = new ArraySet();
var newNames = new ArraySet();
// Find mappings for the "sourceFile"
this._mappings.unsortedForEach(function (mapping) {
if (mapping.source === sourceFile && mapping.originalLine != null) {
// Check if it can be mapped by the source map, then update the mapping.
var original = aSourceMapConsumer.originalPositionFor({
line: mapping.originalLine,
column: mapping.originalColumn
});
if (original.source != null) {
// Copy mapping
mapping.source = original.source;
if (aSourceMapPath != null) {
mapping.source = util.join(aSourceMapPath, mapping.source)
}
if (sourceRoot != null) {
mapping.source = util.relative(sourceRoot, mapping.source);
}
mapping.originalLine = original.line;
mapping.originalColumn = original.column;
if (original.name != null) {
mapping.name = original.name;
}
}
}
var source = mapping.source;
if (source != null && !newSources.has(source)) {
newSources.add(source);
}
var name = mapping.name;
if (name != null && !newNames.has(name)) {
newNames.add(name);
}
}, this);
this._sources = newSources;
this._names = newNames;
// Copy sourcesContents of applied map.
aSourceMapConsumer.sources.forEach(function (sourceFile) {
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
if (content != null) {
if (aSourceMapPath != null) {
sourceFile = util.join(aSourceMapPath, sourceFile);
}
if (sourceRoot != null) {
sourceFile = util.relative(sourceRoot, sourceFile);
}
this.setSourceContent(sourceFile, content);
}
}, this);
};
/**
* A mapping can have one of the three levels of data:
*
* 1. Just the generated position.
* 2. The Generated position, original position, and original source.
* 3. Generated and original position, original source, as well as a name
* token.
*
* To maintain consistency, we validate that any new mapping being added falls
* in to one of these categories.
*/
SourceMapGenerator.prototype._validateMapping =
function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
aName) {
if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
&& aGenerated.line > 0 && aGenerated.column >= 0
&& !aOriginal && !aSource && !aName) {
// Case 1.
return;
}
else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
&& aOriginal && 'line' in aOriginal && 'column' in aOriginal
&& aGenerated.line > 0 && aGenerated.column >= 0
&& aOriginal.line > 0 && aOriginal.column >= 0
&& aSource) {
// Cases 2 and 3.
return;
}
else {
throw new Error('Invalid mapping: ' + JSON.stringify({
generated: aGenerated,
source: aSource,
original: aOriginal,
name: aName
}));
}
};
/**
* Serialize the accumulated mappings in to the stream of base 64 VLQs
* specified by the source map format.
*/
SourceMapGenerator.prototype._serializeMappings =
function SourceMapGenerator_serializeMappings() {
var previousGeneratedColumn = 0;
var previousGeneratedLine = 1;
var previousOriginalColumn = 0;
var previousOriginalLine = 0;
var previousName = 0;
var previousSource = 0;
var result = '';
var mapping;
var nameIdx;
var sourceIdx;
var mappings = this._mappings.toArray();
for (var i = 0, len = mappings.length; i < len; i++) {
mapping = mappings[i];
if (mapping.generatedLine !== previousGeneratedLine) {
previousGeneratedColumn = 0;
while (mapping.generatedLine !== previousGeneratedLine) {
result += ';';
previousGeneratedLine++;
}
}
else {
if (i > 0) {
if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
continue;
}
result += ',';
}
}
result += base64VLQ.encode(mapping.generatedColumn
- previousGeneratedColumn);
previousGeneratedColumn = mapping.generatedColumn;
if (mapping.source != null) {
sourceIdx = this._sources.indexOf(mapping.source);
result += base64VLQ.encode(sourceIdx - previousSource);
previousSource = sourceIdx;
// lines are stored 0-based in SourceMap spec version 3
result += base64VLQ.encode(mapping.originalLine - 1
- previousOriginalLine);
previousOriginalLine = mapping.originalLine - 1;
result += base64VLQ.encode(mapping.originalColumn
- previousOriginalColumn);
previousOriginalColumn = mapping.originalColumn;
if (mapping.name != null) {
nameIdx = this._names.indexOf(mapping.name);
result += base64VLQ.encode(nameIdx - previousName);
previousName = nameIdx;
}
}
}
return result;
};
SourceMapGenerator.prototype._generateSourcesContent =
function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
return aSources.map(function (source) {
if (!this._sourcesContents) {
return null;
}
if (aSourceRoot != null) {
source = util.relative(aSourceRoot, source);
}
var key = util.toSetString(source);
return Object.prototype.hasOwnProperty.call(this._sourcesContents,
key)
? this._sourcesContents[key]
: null;
}, this);
};
/**
* Externalize the source map.
*/
SourceMapGenerator.prototype.toJSON =
function SourceMapGenerator_toJSON() {
var map = {
version: this._version,
sources: this._sources.toArray(),
names: this._names.toArray(),
mappings: this._serializeMappings()
};
if (this._file != null) {
map.file = this._file;
}
if (this._sourceRoot != null) {
map.sourceRoot = this._sourceRoot;
}
if (this._sourcesContents) {
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
}
return map;
};
/**
* Render the source map being generated to a string.
*/
SourceMapGenerator.prototype.toString =
function SourceMapGenerator_toString() {
return JSON.stringify(this.toJSON());
};
exports.SourceMapGenerator = SourceMapGenerator;
}
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*
* Based on the Base 64 VLQ implementation in Closure Compiler:
* https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
*
* Copyright 2011 The Closure Compiler Authors. All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
{
var base64 = __webpack_require__(5);
// A single base 64 digit can contain 6 bits of data. For the base 64 variable
// length quantities we use in the source map spec, the first bit is the sign,
// the next four bits are the actual value, and the 6th bit is the
// continuation bit. The continuation bit tells us whether there are more
// digits in this value following this digit.
//
// Continuation
// | Sign
// | |
// V V
// 101011
var VLQ_BASE_SHIFT = 5;
// binary: 100000
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
// binary: 011111
var VLQ_BASE_MASK = VLQ_BASE - 1;
// binary: 100000
var VLQ_CONTINUATION_BIT = VLQ_BASE;
/**
* Converts from a two-complement value to a value where the sign bit is
* placed in the least significant bit. For example, as decimals:
* 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
* 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
*/
function toVLQSigned(aValue) {
return aValue < 0
? ((-aValue) << 1) + 1
: (aValue << 1) + 0;
}
/**
* Converts to a two-complement value from a value where the sign bit is
* placed in the least significant bit. For example, as decimals:
* 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
* 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
*/
function fromVLQSigned(aValue) {
var isNegative = (aValue & 1) === 1;
var shifted = aValue >> 1;
return isNegative
? -shifted
: shifted;
}
/**
* Returns the base 64 VLQ encoded value.
*/
exports.encode = function base64VLQ_encode(aValue) {
var encoded = "";
var digit;
var vlq = toVLQSigned(aValue);
do {
digit = vlq & VLQ_BASE_MASK;
vlq >>>= VLQ_BASE_SHIFT;
if (vlq > 0) {
// There are still more digits in this value, so we must make sure the
// continuation bit is marked.
digit |= VLQ_CONTINUATION_BIT;
}
encoded += base64.encode(digit);
} while (vlq > 0);
return encoded;
};
/**
* Decodes the next base 64 VLQ value from the given string and returns the
* value and the rest of the string via the out parameter.
*/
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
var strLen = aStr.length;
var result = 0;
var shift = 0;
var continuation, digit;
do {
if (aIndex >= strLen) {
throw new Error("Expected more digits in base 64 VLQ value.");
}
digit = base64.decode(aStr.charCodeAt(aIndex++));
if (digit === -1) {
throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
}
continuation = !!(digit & VLQ_CONTINUATION_BIT);
digit &= VLQ_BASE_MASK;
result = result + (digit << shift);
shift += VLQ_BASE_SHIFT;
} while (continuation);
aOutParam.value = fromVLQSigned(result);
aOutParam.rest = aIndex;
};
}
/***/ },
/* 5 */
/***/ function(module, exports) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
/**
* Encode an integer in the range of 0 to 63 to a single base 64 digit.
*/
exports.encode = function (number) {
if (0 <= number && number < intToCharMap.length) {
return intToCharMap[number];
}
throw new TypeError("Must be between 0 and 63: " + number);
};
/**
* Decode a single base 64 character code digit to an integer. Returns -1 on
* failure.
*/
exports.decode = function (charCode) {
var bigA = 65; // 'A'
var bigZ = 90; // 'Z'
var littleA = 97; // 'a'
var littleZ = 122; // 'z'
var zero = 48; // '0'
var nine = 57; // '9'
var plus = 43; // '+'
var slash = 47; // '/'
var littleOffset = 26;
var numberOffset = 52;
// 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
if (bigA <= charCode && charCode <= bigZ) {
return (charCode - bigA);
}
// 26 - 51: abcdefghijklmnopqrstuvwxyz
if (littleA <= charCode && charCode <= littleZ) {
return (charCode - littleA + littleOffset);
}
// 52 - 61: 0123456789
if (zero <= charCode && charCode <= nine) {
return (charCode - zero + numberOffset);
}
// 62: +
if (charCode == plus) {
return 62;
}
// 63: /
if (charCode == slash) {
return 63;
}
// Invalid base64 digit.
return -1;
};
}
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var util = __webpack_require__(2);
/**
* A data structure which is a combination of an array and a set. Adding a new
* member is O(1), testing for membership is O(1), and finding the index of an
* element is O(1). Removing elements from the set is not supported. Only
* strings are supported for membership.
*/
function ArraySet() {
this._array = [];
this._set = {};
}
/**
* Static method for creating ArraySet instances from an existing array.
*/
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
var set = new ArraySet();
for (var i = 0, len = aArray.length; i < len; i++) {
set.add(aArray[i], aAllowDuplicates);
}
return set;
};
/**
* Return how many unique items are in this ArraySet. If duplicates have been
* added, than those do not count towards the size.
*
* @returns Number
*/
ArraySet.prototype.size = function ArraySet_size() {
return Object.getOwnPropertyNames(this._set).length;
};
/**
* Add the given string to this set.
*
* @param String aStr
*/
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
var sStr = util.toSetString(aStr);
var isDuplicate = this._set.hasOwnProperty(sStr);
var idx = this._array.length;
if (!isDuplicate || aAllowDuplicates) {
this._array.push(aStr);
}
if (!isDuplicate) {
this._set[sStr] = idx;
}
};
/**
* Is the given string a member of this set?
*
* @param String aStr
*/
ArraySet.prototype.has = function ArraySet_has(aStr) {
var sStr = util.toSetString(aStr);
return this._set.hasOwnProperty(sStr);
};
/**
* What is the index of the given string in the array?
*
* @param String aStr
*/
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
var sStr = util.toSetString(aStr);
if (this._set.hasOwnProperty(sStr)) {
return this._set[sStr];
}
throw new Error('"' + aStr + '" is not in the set.');
};
/**
* What is the element at the given index?
*
* @param Number aIdx
*/
ArraySet.prototype.at = function ArraySet_at(aIdx) {
if (aIdx >= 0 && aIdx < this._array.length) {
return this._array[aIdx];
}
throw new Error('No element indexed by ' + aIdx);
};
/**
* Returns the array representation of this set (which has the proper indices
* indicated by indexOf). Note that this is a copy of the internal array used
* for storing the members so that no one can mess with internal state.
*/
ArraySet.prototype.toArray = function ArraySet_toArray() {
return this._array.slice();
};
exports.ArraySet = ArraySet;
}
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2014 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var util = __webpack_require__(2);
/**
* Determine whether mappingB is after mappingA with respect to generated
* position.
*/
function generatedPositionAfter(mappingA, mappingB) {
// Optimized for most common case
var lineA = mappingA.generatedLine;
var lineB = mappingB.generatedLine;
var columnA = mappingA.generatedColumn;
var columnB = mappingB.generatedColumn;
return lineB > lineA || lineB == lineA && columnB >= columnA ||
util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
}
/**
* A data structure to provide a sorted view of accumulated mappings in a
* performance conscious manner. It trades a neglibable overhead in general
* case for a large speedup in case of mappings being added in order.
*/
function MappingList() {
this._array = [];
this._sorted = true;
// Serves as infimum
this._last = {generatedLine: -1, generatedColumn: 0};
}
/**
* Iterate through internal items. This method takes the same arguments that
* `Array.prototype.forEach` takes.
*
* NOTE: The order of the mappings is NOT guaranteed.
*/
MappingList.prototype.unsortedForEach =
function MappingList_forEach(aCallback, aThisArg) {
this._array.forEach(aCallback, aThisArg);
};
/**
* Add the given source mapping.
*
* @param Object aMapping
*/
MappingList.prototype.add = function MappingList_add(aMapping) {
if (generatedPositionAfter(this._last, aMapping)) {
this._last = aMapping;
this._array.push(aMapping);
} else {
this._sorted = false;
this._array.push(aMapping);
}
};
/**
* Returns the flat, sorted array of mappings. The mappings are sorted by
* generated position.
*
* WARNING: This method returns internal data without copying, for
* performance. The return value must NOT be mutated, and should be treated as
* an immutable borrow. If you want to take ownership, you must make your own
* copy.
*/
MappingList.prototype.toArray = function MappingList_toArray() {
if (!this._sorted) {
this._array.sort(util.compareByGeneratedPositionsInflated);
this._sorted = true;
}
return this._array;
};
exports.MappingList = MappingList;
}
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var util = __webpack_require__(2);
var binarySearch = __webpack_require__(9);
var ArraySet = __webpack_require__(6).ArraySet;
var base64VLQ = __webpack_require__(4);
var quickSort = __webpack_require__(10).quickSort;
function SourceMapConsumer(aSourceMap) {
var sourceMap = aSourceMap;
if (typeof aSourceMap === 'string') {
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
}
return sourceMap.sections != null
? new IndexedSourceMapConsumer(sourceMap)
: new BasicSourceMapConsumer(sourceMap);
}
SourceMapConsumer.fromSourceMap = function(aSourceMap) {
return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
}
/**
* The version of the source mapping spec that we are consuming.
*/
SourceMapConsumer.prototype._version = 3;
// `__generatedMappings` and `__originalMappings` are arrays that hold the
// parsed mapping coordinates from the source map's "mappings" attribute. They
// are lazily instantiated, accessed via the `_generatedMappings` and
// `_originalMappings` getters respectively, and we only parse the mappings
// and create these arrays once queried for a source location. We jump through
// these hoops because there can be many thousands of mappings, and parsing
// them is expensive, so we only want to do it if we must.
//
// Each object in the arrays is of the form:
//
// {
// generatedLine: The line number in the generated code,
// generatedColumn: The column number in the generated code,
// source: The path to the original source file that generated this
// chunk of code,
// originalLine: The line number in the original source that
// corresponds to this chunk of generated code,
// originalColumn: The column number in the original source that
// corresponds to this chunk of generated code,
// name: The name of the original symbol which generated this chunk of
// code.
// }
//
// All properties except for `generatedLine` and `generatedColumn` can be
// `null`.
//
// `_generatedMappings` is ordered by the generated positions.
//
// `_originalMappings` is ordered by the original positions.
SourceMapConsumer.prototype.__generatedMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
get: function () {
if (!this.__generatedMappings) {
this._parseMappings(this._mappings, this.sourceRoot);
}
return this.__generatedMappings;
}
});
SourceMapConsumer.prototype.__originalMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
get: function () {
if (!this.__originalMappings) {
this._parseMappings(this._mappings, this.sourceRoot);
}
return this.__originalMappings;
}
});
SourceMapConsumer.prototype._charIsMappingSeparator =
function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
var c = aStr.charAt(index);
return c === ";" || c === ",";
};
/**
* Parse the mappings in a string in to a data structure which we can easily
* query (the ordered arrays in the `this.__generatedMappings` and
* `this.__originalMappings` properties).
*/
SourceMapConsumer.prototype._parseMappings =
function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
throw new Error("Subclasses must implement _parseMappings");
};
SourceMapConsumer.GENERATED_ORDER = 1;
SourceMapConsumer.ORIGINAL_ORDER = 2;
SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
SourceMapConsumer.LEAST_UPPER_BOUND = 2;
/**
* Iterate over each mapping between an original source/line/column and a
* generated line/column in this source map.
*
* @param Function aCallback
* The function that is called with each mapping.
* @param Object aContext
* Optional. If specified, this object will be the value of `this` every
* time that `aCallback` is called.
* @param aOrder
* Either `SourceMapConsumer.GENERATED_ORDER` or
* `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
* iterate over the mappings sorted by the generated file's line/column
* order or the original's source/line/column order, respectively. Defaults to
* `SourceMapConsumer.GENERATED_ORDER`.
*/
SourceMapConsumer.prototype.eachMapping =
function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
var context = aContext || null;
var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
var mappings;
switch (order) {
case SourceMapConsumer.GENERATED_ORDER:
mappings = this._generatedMappings;
break;
case SourceMapConsumer.ORIGINAL_ORDER:
mappings = this._originalMappings;
break;
default:
throw new Error("Unknown order of iteration.");
}
var sourceRoot = this.sourceRoot;
mappings.map(function (mapping) {
var source = mapping.source === null ? null : this._sources.at(mapping.source);
if (source != null && sourceRoot != null) {
source = util.join(sourceRoot, source);
}
return {
source: source,
generatedLine: mapping.generatedLine,
generatedColumn: mapping.generatedColumn,
originalLine: mapping.originalLine,
originalColumn: mapping.originalColumn,
name: mapping.name === null ? null : this._names.at(mapping.name)
};
}, this).forEach(aCallback, context);
};
/**
* Returns all generated line and column information for the original source,
* line, and column provided. If no column is provided, returns all mappings
* corresponding to a either the line we are searching for or the next
* closest line that has any mappings. Otherwise, returns all mappings
* corresponding to the given line and either the column we are searching for
* or the next closest column that has any offsets.
*
* The only argument is an object with the following properties:
*
* - source: The filename of the original source.
* - line: The line number in the original source.
* - column: Optional. the column number in the original source.
*
* and an array of objects is returned, each with the following properties:
*
* - line: The line number in the generated source, or null.
* - column: The column number in the generated source, or null.
*/
SourceMapConsumer.prototype.allGeneratedPositionsFor =
function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
var line = util.getArg(aArgs, 'line');
// When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
// returns the index of the closest mapping less than the needle. By
// setting needle.originalColumn to 0, we thus find the last mapping for
// the given line, provided such a mapping exists.
var needle = {
source: util.getArg(aArgs, 'source'),
originalLine: line,
originalColumn: util.getArg(aArgs, 'column', 0)
};
if (this.sourceRoot != null) {
needle.source = util.relative(this.sourceRoot, needle.source);
}
if (!this._sources.has(needle.source)) {
return [];
}
needle.source = this._sources.indexOf(needle.source);
var mappings = [];
var index = this._findMapping(needle,
this._originalMappings,
"originalLine",
"originalColumn",
util.compareByOriginalPositions,
binarySearch.LEAST_UPPER_BOUND);
if (index >= 0) {
var mapping = this._originalMappings[index];
if (aArgs.column === undefined) {
var originalLine = mapping.originalLine;
// Iterate until either we run out of mappings, or we run into
// a mapping for a different line than the one we found. Since
// mappings are sorted, this is guaranteed to find all mappings for
// the line we found.
while (mapping && mapping.originalLine === originalLine) {
mappings.push({
line: util.getArg(mapping, 'generatedLine', null),
column: util.getArg(mapping, 'generatedColumn', null),
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
});
mapping = this._originalMappings[++index];
}
} else {
var originalColumn = mapping.originalColumn;
// Iterate until either we run out of mappings, or we run into
// a mapping for a different line than the one we were searching for.
// Since mappings are sorted, this is guaranteed to find all mappings for
// the line we are searching for.
while (mapping &&
mapping.originalLine === line &&
mapping.originalColumn == originalColumn) {
mappings.push({
line: util.getArg(mapping, 'generatedLine', null),
column: util.getArg(mapping, 'generatedColumn', null),
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
});
mapping = this._originalMappings[++index];
}
}
}
return mappings;
};
exports.SourceMapConsumer = SourceMapConsumer;
/**
* A BasicSourceMapConsumer instance represents a parsed source map which we can
* query for information about the original file positions by giving it a file
* position in the generated source.
*
* The only parameter is the raw source map (either as a JSON string, or
* already parsed to an object). According to the spec, source maps have the
* following attributes:
*
* - version: Which version of the source map spec this map is following.
* - sources: An array of URLs to the original source files.
* - names: An array of identifiers which can be referrenced by individual mappings.
* - sourceRoot: Optional. The URL root from which all sources are relative.
* - sourcesContent: Optional. An array of contents of the original source files.
* - mappings: A string of base64 VLQs which contain the actual mappings.
* - file: Optional. The generated file this source map is associated with.
*
* Here is an example source map, taken from the source map spec[0]:
*
* {
* version : 3,
* file: "out.js",
* sourceRoot : "",
* sources: ["foo.js", "bar.js"],
* names: ["src", "maps", "are", "fun"],
* mappings: "AA,AB;;ABCDE;"
* }
*
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
*/
function BasicSourceMapConsumer(aSourceMap) {
var sourceMap = aSourceMap;
if (typeof aSourceMap === 'string') {
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
}
var version = util.getArg(sourceMap, 'version');
var sources = util.getArg(sourceMap, 'sources');
// Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
// requires the array) to play nice here.
var names = util.getArg(sourceMap, 'names', []);
var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
var mappings = util.getArg(sourceMap, 'mappings');
var file = util.getArg(sourceMap, 'file', null);
// Once again, Sass deviates from the spec and supplies the version as a
// string rather than a number, so we use loose equality checking here.
if (version != this._version) {
throw new Error('Unsupported version: ' + version);
}
sources = sources
// Some source maps produce relative source paths like "./foo.js" instead of
// "foo.js". Normalize these first so that future comparisons will succeed.
// See bugzil.la/1090768.
.map(util.normalize)
// Always ensure that absolute sources are internally stored relative to
// the source root, if the source root is absolute. Not doing this would
// be particularly problematic when the source root is a prefix of the
// source (valid, but why??). See github issue #199 and bugzil.la/1188982.
.map(function (source) {
return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
? util.relative(sourceRoot, source)
: source;
});
// Pass `true` below to allow duplicate names and sources. While source maps
// are intended to be compressed and deduplicated, the TypeScript compiler
// sometimes generates source maps with duplicates in them. See Github issue
// #72 and bugzil.la/889492.
this._names = ArraySet.fromArray(names, true);
this._sources = ArraySet.fromArray(sources, true);
this.sourceRoot = sourceRoot;
this.sourcesContent = sourcesContent;
this._mappings = mappings;
this.file = file;
}
BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
/**
* Create a BasicSourceMapConsumer from a SourceMapGenerator.
*
* @param SourceMapGenerator aSourceMap
* The source map that will be consumed.
* @returns BasicSourceMapConsumer
*/
BasicSourceMapConsumer.fromSourceMap =
function SourceMapConsumer_fromSourceMap(aSourceMap) {
var smc = Object.create(BasicSourceMapConsumer.prototype);
var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
smc.sourceRoot = aSourceMap._sourceRoot;
smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
smc.sourceRoot);
smc.file = aSourceMap._file;
// Because we are modifying the entries (by converting string sources and
// names to indices into the sources and names ArraySets), we have to make
// a copy of the entry or else bad things happen. Shared mutable state
// strikes again! See github issue #191.
var generatedMappings = aSourceMap._mappings.toArray().slice();
var destGeneratedMappings = smc.__generatedMappings = [];
var destOriginalMappings = smc.__originalMappings = [];
for (var i = 0, length = generatedMappings.length; i < length; i++) {
var srcMapping = generatedMappings[i];
var destMapping = new Mapping;
destMapping.generatedLine = srcMapping.generatedLine;
destMapping.generatedColumn = srcMapping.generatedColumn;
if (srcMapping.source) {
destMapping.source = sources.indexOf(srcMapping.source);
destMapping.originalLine = srcMapping.originalLine;
destMapping.originalColumn = srcMapping.originalColumn;
if (srcMapping.name) {
destMapping.name = names.indexOf(srcMapping.name);
}
destOriginalMappings.push(destMapping);
}
destGeneratedMappings.push(destMapping);
}
quickSort(smc.__originalMappings, util.compareByOriginalPositions);
return smc;
};
/**
* The version of the source mapping spec that we are consuming.
*/
BasicSourceMapConsumer.prototype._version = 3;
/**
* The list of original sources.
*/
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
get: function () {
return this._sources.toArray().map(function (s) {
return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
}, this);
}
});
/**
* Provide the JIT with a nice shape / hidden class.
*/
function Mapping() {
this.generatedLine = 0;
this.generatedColumn = 0;
this.source = null;
this.originalLine = null;
this.originalColumn = null;
this.name = null;
}
/**
* Parse the mappings in a string in to a data structure which we can easily
* query (the ordered arrays in the `this.__generatedMappings` and
* `this.__originalMappings` properties).
*/
BasicSourceMapConsumer.prototype._parseMappings =
function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
var generatedLine = 1;
var previousGeneratedColumn = 0;
var previousOriginalLine = 0;
var previousOriginalColumn = 0;
var previousSource = 0;
var previousName = 0;
var length = aStr.length;
var index = 0;
var cachedSegments = {};
var temp = {};
var originalMappings = [];
var generatedMappings = [];
var mapping, str, segment, end, value;
while (index < length) {
if (aStr.charAt(index) === ';') {
generatedLine++;
index++;
previousGeneratedColumn = 0;
}
else if (aStr.charAt(index) === ',') {
index++;
}
else {
mapping = new Mapping();
mapping.generatedLine = generatedLine;
// Because each offset is encoded relative to the previous one,
// many segments often have the same encoding. We can exploit this
// fact by caching the parsed variable length fields of each segment,
// allowing us to avoid a second parse if we encounter the same
// segment again.
for (end = index; end < length; end++) {
if (this._charIsMappingSeparator(aStr, end)) {
break;
}
}
str = aStr.slice(index, end);
segment = cachedSegments[str];
if (segment) {
index += str.length;
} else {
segment = [];
while (index < end) {
base64VLQ.decode(aStr, index, temp);
value = temp.value;
index = temp.rest;
segment.push(value);
}
if (segment.length === 2) {
throw new Error('Found a source, but no line and column');
}
if (segment.length === 3) {
throw new Error('Found a source and line, but no column');
}
cachedSegments[str] = segment;
}
// Generated column.
mapping.generatedColumn = previousGeneratedColumn + segment[0];
previousGeneratedColumn = mapping.generatedColumn;
if (segment.length > 1) {
// Original source.
mapping.source = previousSource + segment[1];
previousSource += segment[1];
// Original line.
mapping.originalLine = previousOriginalLine + segment[2];
previousOriginalLine = mapping.originalLine;
// Lines are stored 0-based
mapping.originalLine += 1;
// Original column.
mapping.originalColumn = previousOriginalColumn + segment[3];
previousOriginalColumn = mapping.originalColumn;
if (segment.length > 4) {
// Original name.
mapping.name = previousName + segment[4];
previousName += segment[4];
}
}
generatedMappings.push(mapping);
if (typeof mapping.originalLine === 'number') {
originalMappings.push(mapping);
}
}
}
quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
this.__generatedMappings = generatedMappings;
quickSort(originalMappings, util.compareByOriginalPositions);
this.__originalMappings = originalMappings;
};
/**
* Find the mapping that best matches the hypothetical "needle" mapping that
* we are searching for in the given "haystack" of mappings.
*/
BasicSourceMapConsumer.prototype._findMapping =
function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
aColumnName, aComparator, aBias) {
// To return the position we are searching for, we must first find the
// mapping for the given position and then return the opposite position it
// points to. Because the mappings are sorted, we can use binary search to
// find the best mapping.
if (aNeedle[aLineName] <= 0) {
throw new TypeError('Line must be greater than or equal to 1, got '
+ aNeedle[aLineName]);
}
if (aNeedle[aColumnName] < 0) {
throw new TypeError('Column must be greater than or equal to 0, got '
+ aNeedle[aColumnName]);
}
return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
};
/**
* Compute the last column for each generated mapping. The last column is
* inclusive.
*/
BasicSourceMapConsumer.prototype.computeColumnSpans =
function SourceMapConsumer_computeColumnSpans() {
for (var index = 0; index < this._generatedMappings.length; ++index) {
var mapping = this._generatedMappings[index];
// Mappings do not contain a field for the last generated columnt. We
// can come up with an optimistic estimate, however, by assuming that
// mappings are contiguous (i.e. given two consecutive mappings, the
// first mapping ends where the second one starts).
if (index + 1 < this._generatedMappings.length) {
var nextMapping = this._generatedMappings[index + 1];
if (mapping.generatedLine === nextMapping.generatedLine) {
mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
continue;
}
}
// The last mapping for each line spans the entire line.
mapping.lastGeneratedColumn = Infinity;
}
};
/**
* Returns the original source, line, and column information for the generated
* source's line and column positions provided. The only argument is an object
* with the following properties:
*
* - line: The line number in the generated source.
* - column: The column number in the generated source.
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
* closest element that is smaller than or greater than the one we are
* searching for, respectively, if the exact element cannot be found.
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
*
* and an object is returned with the following properties:
*
* - source: The original source file, or null.
* - line: The line number in the original source, or null.
* - column: The column number in the original source, or null.
* - name: The original identifier, or null.
*/
BasicSourceMapConsumer.prototype.originalPositionFor =
function SourceMapConsumer_originalPositionFor(aArgs) {
var needle = {
generatedLine: util.getArg(aArgs, 'line'),
generatedColumn: util.getArg(aArgs, 'column')
};
var index = this._findMapping(
needle,
this._generatedMappings,
"generatedLine",
"generatedColumn",
util.compareByGeneratedPositionsDeflated,
util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
);
if (index >= 0) {
var mapping = this._generatedMappings[index];
if (mapping.generatedLine === needle.generatedLine) {
var source = util.getArg(mapping, 'source', null);
if (source !== null) {
source = this._sources.at(source);
if (this.sourceRoot != null) {
source = util.join(this.sourceRoot, source);
}
}
var name = util.getArg(mapping, 'name', null);
if (name !== null) {
name = this._names.at(name);
}
return {
source: source,
line: util.getArg(mapping, 'originalLine', null),
column: util.getArg(mapping, 'originalColumn', null),
name: name
};
}
}
return {
source: null,
line: null,
column: null,
name: null
};
};
/**
* Return true if we have the source content for every source in the source
* map, false otherwise.
*/
BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
function BasicSourceMapConsumer_hasContentsOfAllSources() {
if (!this.sourcesContent) {
return false;
}
return this.sourcesContent.length >= this._sources.size() &&
!this.sourcesContent.some(function (sc) { return sc == null; });
};
/**
* Returns the original source content. The only argument is the url of the
* original source file. Returns null if no original source content is
* availible.
*/
BasicSourceMapConsumer.prototype.sourceContentFor =
function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
if (!this.sourcesContent) {
return null;
}
if (this.sourceRoot != null) {
aSource = util.relative(this.sourceRoot, aSource);
}
if (this._sources.has(aSource)) {
return this.sourcesContent[this._sources.indexOf(aSource)];
}
var url;
if (this.sourceRoot != null
&& (url = util.urlParse(this.sourceRoot))) {
// XXX: file:// URIs and absolute paths lead to unexpected behavior for
// many users. We can help them out when they expect file:// URIs to
// behave like it would if they were running a local HTTP server. See
// https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
if (url.scheme == "file"
&& this._sources.has(fileUriAbsPath)) {
return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
}
if ((!url.path || url.path == "/")
&& this._sources.has("/" + aSource)) {
return this.sourcesContent[this._sources.indexOf("/" + aSource)];
}
}
// This function is used recursively from
// IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
// don't want to throw if we can't find the source - we just want to
// return null, so we provide a flag to exit gracefully.
if (nullOnMissing) {
return null;
}
else {
throw new Error('"' + aSource + '" is not in the SourceMap.');
}
};
/**
* Returns the generated line and column information for the original source,
* line, and column positions provided. The only argument is an object with
* the following properties:
*
* - source: The filename of the original source.
* - line: The line number in the original source.
* - column: The column number in the original source.
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
* closest element that is smaller than or greater than the one we are
* searching for, respectively, if the exact element cannot be found.
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
*
* and an object is returned with the following properties:
*
* - line: The line number in the generated source, or null.
* - column: The column number in the generated source, or null.
*/
BasicSourceMapConsumer.prototype.generatedPositionFor =
function SourceMapConsumer_generatedPositionFor(aArgs) {
var source = util.getArg(aArgs, 'source');
if (this.sourceRoot != null) {
source = util.relative(this.sourceRoot, source);
}
if (!this._sources.has(source)) {
return {
line: null,
column: null,
lastColumn: null
};
}
source = this._sources.indexOf(source);
var needle = {
source: source,
originalLine: util.getArg(aArgs, 'line'),
originalColumn: util.getArg(aArgs, 'column')
};
var index = this._findMapping(
needle,
this._originalMappings,
"originalLine",
"originalColumn",
util.compareByOriginalPositions,
util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
);
if (index >= 0) {
var mapping = this._originalMappings[index];
if (mapping.source === needle.source) {
return {
line: util.getArg(mapping, 'generatedLine', null),
column: util.getArg(mapping, 'generatedColumn', null),
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
};
}
}
return {
line: null,
column: null,
lastColumn: null
};
};
exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
/**
* An IndexedSourceMapConsumer instance represents a parsed source map which
* we can query for information. It differs from BasicSourceMapConsumer in
* that it takes "indexed" source maps (i.e. ones with a "sections" field) as
* input.
*
* The only parameter is a raw source map (either as a JSON string, or already
* parsed to an object). According to the spec for indexed source maps, they
* have the following attributes:
*
* - version: Which version of the source map spec this map is following.
* - file: Optional. The generated file this source map is associated with.
* - sections: A list of section definitions.
*
* Each value under the "sections" field has two fields:
* - offset: The offset into the original specified at which this section
* begins to apply, defined as an object with a "line" and "column"
* field.
* - map: A source map definition. This source map could also be indexed,
* but doesn't have to be.
*
* Instead of the "map" field, it's also possible to have a "url" field
* specifying a URL to retrieve a source map from, but that's currently
* unsupported.
*
* Here's an example source map, taken from the source map spec[0], but
* modified to omit a section which uses the "url" field.
*
* {
* version : 3,
* file: "app.js",
* sections: [{
* offset: {line:100, column:10},
* map: {
* version : 3,
* file: "section.js",
* sources: ["foo.js", "bar.js"],
* names: ["src", "maps", "are", "fun"],
* mappings: "AAAA,E;;ABCDE;"
* }
* }],
* }
*
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
*/
function IndexedSourceMapConsumer(aSourceMap) {
var sourceMap = aSourceMap;
if (typeof aSourceMap === 'string') {
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
}
var version = util.getArg(sourceMap, 'version');
var sections = util.getArg(sourceMap, 'sections');
if (version != this._version) {
throw new Error('Unsupported version: ' + version);
}
this._sources = new ArraySet();
this._names = new ArraySet();
var lastOffset = {
line: -1,
column: 0
};
this._sections = sections.map(function (s) {
if (s.url) {
// The url field will require support for asynchronicity.
// See https://github.com/mozilla/source-map/issues/16
throw new Error('Support for url field in sections not implemented.');
}
var offset = util.getArg(s, 'offset');
var offsetLine = util.getArg(offset, 'line');
var offsetColumn = util.getArg(offset, 'column');
if (offsetLine < lastOffset.line ||
(offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
throw new Error('Section offsets must be ordered and non-overlapping.');
}
lastOffset = offset;
return {
generatedOffset: {
// The offset fields are 0-based, but we use 1-based indices when
// encoding/decoding from VLQ.
generatedLine: offsetLine + 1,
generatedColumn: offsetColumn + 1
},
consumer: new SourceMapConsumer(util.getArg(s, 'map'))
}
});
}
IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
/**
* The version of the source mapping spec that we are consuming.
*/
IndexedSourceMapConsumer.prototype._version = 3;
/**
* The list of original sources.
*/
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
get: function () {
var sources = [];
for (var i = 0; i < this._sections.length; i++) {
for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
sources.push(this._sections[i].consumer.sources[j]);
}
}
return sources;
}
});
/**
* Returns the original source, line, and column information for the generated
* source's line and column positions provided. The only argument is an object
* with the following properties:
*
* - line: The line number in the generated source.
* - column: The column number in the generated source.
*
* and an object is returned with the following properties:
*
* - source: The original source file, or null.
* - line: The line number in the original source, or null.
* - column: The column number in the original source, or null.
* - name: The original identifier, or null.
*/
IndexedSourceMapConsumer.prototype.originalPositionFor =
function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
var needle = {
generatedLine: util.getArg(aArgs, 'line'),
generatedColumn: util.getArg(aArgs, 'column')
};
// Find the section containing the generated position we're trying to map
// to an original position.
var sectionIndex = binarySearch.search(needle, this._sections,
function(needle, section) {
var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
if (cmp) {
return cmp;
}
return (needle.generatedColumn -
section.generatedOffset.generatedColumn);
});
var section = this._sections[sectionIndex];
if (!section) {
return {
source: null,
line: null,
column: null,
name: null
};
}
return section.consumer.originalPositionFor({
line: needle.generatedLine -
(section.generatedOffset.generatedLine - 1),
column: needle.generatedColumn -
(section.generatedOffset.generatedLine === needle.generatedLine
? section.generatedOffset.generatedColumn - 1
: 0),
bias: aArgs.bias
});
};
/**
* Return true if we have the source content for every source in the source
* map, false otherwise.
*/
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
function IndexedSourceMapConsumer_hasContentsOfAllSources() {
return this._sections.every(function (s) {
return s.consumer.hasContentsOfAllSources();
});
};
/**
* Returns the original source content. The only argument is the url of the
* original source file. Returns null if no original source content is
* available.
*/
IndexedSourceMapConsumer.prototype.sourceContentFor =
function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
for (var i = 0; i < this._sections.length; i++) {
var section = this._sections[i];
var content = section.consumer.sourceContentFor(aSource, true);
if (content) {
return content;
}
}
if (nullOnMissing) {
return null;
}
else {
throw new Error('"' + aSource + '" is not in the SourceMap.');
}
};
/**
* Returns the generated line and column information for the original source,
* line, and column positions provided. The only argument is an object with
* the following properties:
*
* - source: The filename of the original source.
* - line: The line number in the original source.
* - column: The column number in the original source.
*
* and an object is returned with the following properties:
*
* - line: The line number in the generated source, or null.
* - column: The column number in the generated source, or null.
*/
IndexedSourceMapConsumer.prototype.generatedPositionFor =
function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
for (var i = 0; i < this._sections.length; i++) {
var section = this._sections[i];
// Only consider this section if the requested source is in the list of
// sources of the consumer.
if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
continue;
}
var generatedPosition = section.consumer.generatedPositionFor(aArgs);
if (generatedPosition) {
var ret = {
line: generatedPosition.line +
(section.generatedOffset.generatedLine - 1),
column: generatedPosition.column +
(section.generatedOffset.generatedLine === generatedPosition.line
? section.generatedOffset.generatedColumn - 1
: 0)
};
return ret;
}
}
return {
line: null,
column: null
};
};
/**
* Parse the mappings in a string in to a data structure which we can easily
* query (the ordered arrays in the `this.__generatedMappings` and
* `this.__originalMappings` properties).
*/
IndexedSourceMapConsumer.prototype._parseMappings =
function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
this.__generatedMappings = [];
this.__originalMappings = [];
for (var i = 0; i < this._sections.length; i++) {
var section = this._sections[i];
var sectionMappings = section.consumer._generatedMappings;
for (var j = 0; j < sectionMappings.length; j++) {
var mapping = sectionMappings[i];
var source = section.consumer._sources.at(mapping.source);
if (section.consumer.sourceRoot !== null) {
source = util.join(section.consumer.sourceRoot, source);
}
this._sources.add(source);
source = this._sources.indexOf(source);
var name = section.consumer._names.at(mapping.name);
this._names.add(name);
name = this._names.indexOf(name);
// The mappings coming from the consumer for the section have
// generated positions relative to the start of the section, so we
// need to offset them to be relative to the start of the concatenated
// generated file.
var adjustedMapping = {
source: source,
generatedLine: mapping.generatedLine +
(section.generatedOffset.generatedLine - 1),
generatedColumn: mapping.column +
(section.generatedOffset.generatedLine === mapping.generatedLine)
? section.generatedOffset.generatedColumn - 1
: 0,
originalLine: mapping.originalLine,
originalColumn: mapping.originalColumn,
name: name
};
this.__generatedMappings.push(adjustedMapping);
if (typeof adjustedMapping.originalLine === 'number') {
this.__originalMappings.push(adjustedMapping);
}
}
}
quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
quickSort(this.__originalMappings, util.compareByOriginalPositions);
};
exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
}
/***/ },
/* 9 */
/***/ function(module, exports) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
exports.GREATEST_LOWER_BOUND = 1;
exports.LEAST_UPPER_BOUND = 2;
/**
* Recursive implementation of binary search.
*
* @param aLow Indices here and lower do not contain the needle.
* @param aHigh Indices here and higher do not contain the needle.
* @param aNeedle The element being searched for.
* @param aHaystack The non-empty array being searched.
* @param aCompare Function which takes two elements and returns -1, 0, or 1.
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
* closest element that is smaller than or greater than the one we are
* searching for, respectively, if the exact element cannot be found.
*/
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
// This function terminates when one of the following is true:
//
// 1. We find the exact element we are looking for.
//
// 2. We did not find the exact element, but we can return the index of
// the next-closest element.
//
// 3. We did not find the exact element, and there is no next-closest
// element than the one we are searching for, so we return -1.
var mid = Math.floor((aHigh - aLow) / 2) + aLow;
var cmp = aCompare(aNeedle, aHaystack[mid], true);
if (cmp === 0) {
// Found the element we are looking for.
return mid;
}
else if (cmp > 0) {
// Our needle is greater than aHaystack[mid].
if (aHigh - mid > 1) {
// The element is in the upper half.
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
}
// The exact needle element was not found in this haystack. Determine if
// we are in termination case (3) or (2) and return the appropriate thing.
if (aBias == exports.LEAST_UPPER_BOUND) {
return aHigh < aHaystack.length ? aHigh : -1;
} else {
return mid;
}
}
else {
// Our needle is less than aHaystack[mid].
if (mid - aLow > 1) {
// The element is in the lower half.
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
}
// we are in termination case (3) or (2) and return the appropriate thing.
if (aBias == exports.LEAST_UPPER_BOUND) {
return mid;
} else {
return aLow < 0 ? -1 : aLow;
}
}
}
/**
* This is an implementation of binary search which will always try and return
* the index of the closest element if there is no exact hit. This is because
* mappings between original and generated line/col pairs are single points,
* and there is an implicit region between each of them, so a miss just means
* that you aren't on the very start of a region.
*
* @param aNeedle The element you are looking for.
* @param aHaystack The array that is being searched.
* @param aCompare A function which takes the needle and an element in the
* array and returns -1, 0, or 1 depending on whether the needle is less
* than, equal to, or greater than the element, respectively.
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
* closest element that is smaller than or greater than the one we are
* searching for, respectively, if the exact element cannot be found.
* Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
*/
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
if (aHaystack.length === 0) {
return -1;
}
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
aCompare, aBias || exports.GREATEST_LOWER_BOUND);
if (index < 0) {
return -1;
}
// We have found either the exact element, or the next-closest element than
// the one we are searching for. However, there may be more than one such
// element. Make sure we always return the smallest of these.
while (index - 1 >= 0) {
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
break;
}
--index;
}
return index;
};
}
/***/ },
/* 10 */
/***/ function(module, exports) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
// It turns out that some (most?) JavaScript engines don't self-host
// `Array.prototype.sort`. This makes sense because C++ will likely remain
// faster than JS when doing raw CPU-intensive sorting. However, when using a
// custom comparator function, calling back and forth between the VM's C++ and
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
// worse generated code for the comparator function than would be optimal. In
// fact, when sorting with a comparator, these costs outweigh the benefits of
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
// a ~3500ms mean speed-up in `bench/bench.html`.
/**
* Swap the elements indexed by `x` and `y` in the array `ary`.
*
* @param {Array} ary
* The array.
* @param {Number} x
* The index of the first item.
* @param {Number} y
* The index of the second item.
*/
function swap(ary, x, y) {
var temp = ary[x];
ary[x] = ary[y];
ary[y] = temp;
}
/**
* Returns a random integer within the range `low .. high` inclusive.
*
* @param {Number} low
* The lower bound on the range.
* @param {Number} high
* The upper bound on the range.
*/
function randomIntInRange(low, high) {
return Math.round(low + (Math.random() * (high - low)));
}
/**
* The Quick Sort algorithm.
*
* @param {Array} ary
* An array to sort.
* @param {function} comparator
* Function to use to compare two items.
* @param {Number} p
* Start index of the array
* @param {Number} r
* End index of the array
*/
function doQuickSort(ary, comparator, p, r) {
// If our lower bound is less than our upper bound, we (1) partition the
// array into two pieces and (2) recurse on each half. If it is not, this is
// the empty array and our base case.
if (p < r) {
// (1) Partitioning.
//
// The partitioning chooses a pivot between `p` and `r` and moves all
// elements that are less than or equal to the pivot to the before it, and
// all the elements that are greater than it after it. The effect is that
// once partition is done, the pivot is in the exact place it will be when
// the array is put in sorted order, and it will not need to be moved
// again. This runs in O(n) time.
// Always choose a random pivot so that an input array which is reverse
// sorted does not cause O(n^2) running time.
var pivotIndex = randomIntInRange(p, r);
var i = p - 1;
swap(ary, pivotIndex, r);
var pivot = ary[r];
// Immediately after `j` is incremented in this loop, the following hold
// true:
//
// * Every element in `ary[p .. i]` is less than or equal to the pivot.
//
// * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
for (var j = p; j < r; j++) {
if (comparator(ary[j], pivot) <= 0) {
i += 1;
swap(ary, i, j);
}
}
swap(ary, i + 1, j);
var q = i + 1;
// (2) Recurse on each half.
doQuickSort(ary, comparator, p, q - 1);
doQuickSort(ary, comparator, q + 1, r);
}
}
/**
* Sort the given array in-place with the given comparator function.
*
* @param {Array} ary
* An array to sort.
* @param {function} comparator
* Function to use to compare two items.
*/
exports.quickSort = function (ary, comparator) {
doQuickSort(ary, comparator, 0, ary.length - 1);
};
}
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/
{
var SourceMapGenerator = __webpack_require__(3).SourceMapGenerator;
var util = __webpack_require__(2);
// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
// operating systems these days (capturing the result).
var REGEX_NEWLINE = /(\r?\n)/;
// Newline character code for charCodeAt() comparisons
var NEWLINE_CODE = 10;
// Private symbol for identifying `SourceNode`s when multiple versions of
// the source-map library are loaded. This MUST NOT CHANGE across
// versions!
var isSourceNode = "$$$isSourceNode$$$";
/**
* SourceNodes provide a way to abstract over interpolating/concatenating
* snippets of generated JavaScript source code while maintaining the line and
* column information associated with the original source code.
*
* @param aLine The original line number.
* @param aColumn The original column number.
* @param aSource The original source's filename.
* @param aChunks Optional. An array of strings which are snippets of
* generated JS, or other SourceNodes.
* @param aName The original identifier.
*/
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
this.children = [];
this.sourceContents = {};
this.line = aLine == null ? null : aLine;
this.column = aColumn == null ? null : aColumn;
this.source = aSource == null ? null : aSource;
this.name = aName == null ? null : aName;
this[isSourceNode] = true;
if (aChunks != null) this.add(aChunks);
}
/**
* Creates a SourceNode from generated code and a SourceMapConsumer.
*
* @param aGeneratedCode The generated code
* @param aSourceMapConsumer The SourceMap for the generated code
* @param aRelativePath Optional. The path that relative sources in the
* SourceMapConsumer should be relative to.
*/
SourceNode.fromStringWithSourceMap =
function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
// The SourceNode we want to fill with the generated code
// and the SourceMap
var node = new SourceNode();
// All even indices of this array are one line of the generated code,
// while all odd indices are the newlines between two adjacent lines
// (since `REGEX_NEWLINE` captures its match).
// Processed fragments are removed from this array, by calling `shiftNextLine`.
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
var shiftNextLine = function() {
var lineContents = remainingLines.shift();
// The last line of a file might not have a newline.
var newLine = remainingLines.shift() || "";
return lineContents + newLine;
};
// We need to remember the position of "remainingLines"
var lastGeneratedLine = 1, lastGeneratedColumn = 0;
// The generate SourceNodes we need a code range.
// To extract it current and last mapping is used.
// Here we store the last mapping.
var lastMapping = null;
aSourceMapConsumer.eachMapping(function (mapping) {
if (lastMapping !== null) {
// We add the code from "lastMapping" to "mapping":
// First check if there is a new line in between.
if (lastGeneratedLine < mapping.generatedLine) {
var code = "";
// Associate first line with "lastMapping"
addMappingWithCode(lastMapping, shiftNextLine());
lastGeneratedLine++;
lastGeneratedColumn = 0;
// The remaining code is added without mapping
} else {
// There is no new line in between.
// Associate the code between "lastGeneratedColumn" and
// "mapping.generatedColumn" with "lastMapping"
var nextLine = remainingLines[0];
var code = nextLine.substr(0, mapping.generatedColumn -
lastGeneratedColumn);
remainingLines[0] = nextLine.substr(mapping.generatedColumn -
lastGeneratedColumn);
lastGeneratedColumn = mapping.generatedColumn;
addMappingWithCode(lastMapping, code);
// No more remaining code, continue
lastMapping = mapping;
return;
}
}
// We add the generated code until the first mapping
// to the SourceNode without any mapping.
// Each line is added as separate string.
while (lastGeneratedLine < mapping.generatedLine) {
node.add(shiftNextLine());
lastGeneratedLine++;
}
if (lastGeneratedColumn < mapping.generatedColumn) {
var nextLine = remainingLines[0];
node.add(nextLine.substr(0, mapping.generatedColumn));
remainingLines[0] = nextLine.substr(mapping.generatedColumn);
lastGeneratedColumn = mapping.generatedColumn;
}
lastMapping = mapping;
}, this);
// We have processed all mappings.
if (remainingLines.length > 0) {
if (lastMapping) {
// Associate the remaining code in the current line with "lastMapping"
addMappingWithCode(lastMapping, shiftNextLine());
}
// and add the remaining lines without any mapping
node.add(remainingLines.join(""));
}
// Copy sourcesContent into SourceNode
aSourceMapConsumer.sources.forEach(function (sourceFile) {
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
if (content != null) {
if (aRelativePath != null) {
sourceFile = util.join(aRelativePath, sourceFile);
}
node.setSourceContent(sourceFile, content);
}
});
return node;
function addMappingWithCode(mapping, code) {
if (mapping === null || mapping.source === undefined) {
node.add(code);
} else {
var source = aRelativePath
? util.join(aRelativePath, mapping.source)
: mapping.source;
node.add(new SourceNode(mapping.originalLine,
mapping.originalColumn,
source,
code,
mapping.name));
}
}
};
/**
* Add a chunk of generated JS to this source node.
*
* @param aChunk A string snippet of generated JS code, another instance of
* SourceNode, or an array where each member is one of those things.
*/
SourceNode.prototype.add = function SourceNode_add(aChunk) {
if (Array.isArray(aChunk)) {
aChunk.forEach(function (chunk) {
this.add(chunk);
}, this);
}
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
if (aChunk) {
this.children.push(aChunk);
}
}
else {
throw new TypeError(
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
);
}
return this;
};
/**
* Add a chunk of generated JS to the beginning of this source node.
*
* @param aChunk A string snippet of generated JS code, another instance of
* SourceNode, or an array where each member is one of those things.
*/
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
if (Array.isArray(aChunk)) {
for (var i = aChunk.length-1; i >= 0; i--) {
this.prepend(aChunk[i]);
}
}
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
this.children.unshift(aChunk);
}
else {
throw new TypeError(
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
);
}
return this;
};
/**
* Walk over the tree of JS snippets in this node and its children. The
* walking function is called once for each snippet of JS and is passed that
* snippet and the its original associated source's line/column location.
*
* @param aFn The traversal function.
*/
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
var chunk;
for (var i = 0, len = this.children.length; i < len; i++) {
chunk = this.children[i];
if (chunk[isSourceNode]) {
chunk.walk(aFn);
}
else {
if (chunk !== '') {
aFn(chunk, { source: this.source,
line: this.line,
column: this.column,
name: this.name });
}
}
}
};
/**
* Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
* each of `this.children`.
*
* @param aSep The separator.
*/
SourceNode.prototype.join = function SourceNode_join(aSep) {
var newChildren;
var i;
var len = this.children.length;
if (len > 0) {
newChildren = [];
for (i = 0; i < len-1; i++) {
newChildren.push(this.children[i]);
newChildren.push(aSep);
}
newChildren.push(this.children[i]);
this.children = newChildren;
}
return this;
};
/**
* Call String.prototype.replace on the very right-most source snippet. Useful
* for trimming whitespace from the end of a source node, etc.
*
* @param aPattern The pattern to replace.
* @param aReplacement The thing to replace the pattern with.
*/
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
var lastChild = this.children[this.children.length - 1];
if (lastChild[isSourceNode]) {
lastChild.replaceRight(aPattern, aReplacement);
}
else if (typeof lastChild === 'string') {
this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
}
else {
this.children.push(''.replace(aPattern, aReplacement));
}
return this;
};
/**
* Set the source content for a source file. This will be added to the SourceMapGenerator
* in the sourcesContent field.
*
* @param aSourceFile The filename of the source file
* @param aSourceContent The content of the source file
*/
SourceNode.prototype.setSourceContent =
function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
};
/**
* Walk over the tree of SourceNodes. The walking function is called for each
* source file content and is passed the filename and source content.
*
* @param aFn The traversal function.
*/
SourceNode.prototype.walkSourceContents =
function SourceNode_walkSourceContents(aFn) {
for (var i = 0, len = this.children.length; i < len; i++) {
if (this.children[i][isSourceNode]) {
this.children[i].walkSourceContents(aFn);
}
}
var sources = Object.keys(this.sourceContents);
for (var i = 0, len = sources.length; i < len; i++) {
aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
}
};
/**
* Return the string representation of this source node. Walks over the tree
* and concatenates all the various snippets together to one string.
*/
SourceNode.prototype.toString = function SourceNode_toString() {
var str = "";
this.walk(function (chunk) {
str += chunk;
});
return str;
};
/**
* Returns the string representation of this source node along with a source
* map.
*/
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
var generated = {
code: "",
line: 1,
column: 0
};
var map = new SourceMapGenerator(aArgs);
var sourceMappingActive = false;
var lastOriginalSource = null;
var lastOriginalLine = null;
var lastOriginalColumn = null;
var lastOriginalName = null;
this.walk(function (chunk, original) {
generated.code += chunk;
if (original.source !== null
&& original.line !== null
&& original.column !== null) {
if(lastOriginalSource !== original.source
|| lastOriginalLine !== original.line
|| lastOriginalColumn !== original.column
|| lastOriginalName !== original.name) {
map.addMapping({
source: original.source,
original: {
line: original.line,
column: original.column
},
generated: {
line: generated.line,
column: generated.column
},
name: original.name
});
}
lastOriginalSource = original.source;
lastOriginalLine = original.line;
lastOriginalColumn = original.column;
lastOriginalName = original.name;
sourceMappingActive = true;
} else if (sourceMappingActive) {
map.addMapping({
generated: {
line: generated.line,
column: generated.column
}
});
lastOriginalSource = null;
sourceMappingActive = false;
}
for (var idx = 0, length = chunk.length; idx < length; idx++) {
if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
generated.line++;
generated.column = 0;
// Mappings end at eol
if (idx + 1 === length) {
lastOriginalSource = null;
sourceMappingActive = false;
} else if (sourceMappingActive) {
map.addMapping({
source: original.source,
original: {
line: original.line,
column: original.column
},
generated: {
line: generated.line,
column: generated.column
},
name: original.name
});
}
} else {
generated.column++;
}
}
});
this.walkSourceContents(function (sourceFile, sourceContent) {
map.setSourceContent(sourceFile, sourceContent);
});
return { code: generated.code, map: map };
};
exports.SourceNode = SourceNode;
}
/***/ }
/******/ ]);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNWY2ODNjMjEwMTc4ZjE5OGUxOWMiLCJ3ZWJwYWNrOi8vLy4vdGVzdC90ZXN0LXNvdXJjZS1ub2RlLmpzIiwid2VicGFjazovLy8uL3Rlc3QvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2Jhc2U2NC12bHEuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYXJyYXktc2V0LmpzIiwid2VicGFjazovLy8uL2xpYi9tYXBwaW5nLWxpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2JpbmFyeS1zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3F1aWNrLXNvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3NvdXJjZS1ub2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQ3RDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFnQzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBLGdDQUErQjtBQUMvQjtBQUNBLHlDQUF3QztBQUN4QyxpQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsOEJBQTZCO0FBQzdCLE1BQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUNBQW9DO0FBQ3BDLHVEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQSxvQ0FBbUM7QUFDbkM7QUFDQSx5Q0FBd0M7QUFDeEMsaUJBQWdCO0FBQ2hCLHFEQUFvRDtBQUNwRCwrQ0FBOEM7QUFDOUMsc0NBQXFDO0FBQ3JDO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7QUFDQSxzQkFBcUI7QUFDckIsTUFBSztBQUNMO0FBQ0Esa0NBQWlDO0FBQ2pDLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0Esb0RBQW1EO0FBQ25ELCtFQUE4RTtBQUM5RSxxQ0FBb0M7QUFDcEMsbUNBQWtDLFdBQVc7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0NBQThDO0FBQzlDLHNGQUFxRjtBQUNyRiwwRkFBeUY7QUFDekYsa0NBQWlDLElBQUk7QUFDckM7QUFDQSxRQUFPLHFCQUFxQiwrQ0FBK0M7QUFDM0UsUUFBTyxvRUFBb0U7QUFDM0UsUUFBTyxvRUFBb0U7QUFDM0UsUUFBTyxRQUFRLDREQUE0RDtBQUMzRSxRQUFPLG9FQUFvRTtBQUMzRSxRQUFPLG9FQUFvRTtBQUMzRSxRQUFPLFFBQVEsNERBQTREO0FBQzNFLFFBQU8sUUFBUSxJQUFJLHdEQUF3RDtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxvQ0FBbUM7QUFDbkMsMEZBQXlGO0FBQ3pGLGtDQUFpQyxJQUFJO0FBQ3JDO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0Esc0JBQXFCO0FBQ3JCLHFCQUFvQjtBQUNwQix5QkFBd0I7QUFDeEIsU0FBUSxJQUFJO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCLDBCQUF5QjtBQUN6Qix1REFBc0QsZUFBZTtBQUNyRSw4REFBNkQ7QUFDN0QsV0FBVSxJQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWlDLGlCQUFpQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3RUFBdUU7QUFDdkU7QUFDQSx1RUFBc0U7QUFDdEUsNkZBQTRGO0FBQzVGO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUwsdURBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0M7QUFDeEM7QUFDQTtBQUNBLHdDQUF1QztBQUN2QztBQUNBO0FBQ0EsMENBQXlDO0FBQ3pDO0FBQ0EseUNBQXdDO0FBQ3hDLFNBQVEsSUFBSTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBLHFCQUFvQjtBQUNwQix3QkFBdUI7QUFDdkIsa0JBQWlCLGVBQWU7QUFDaEMsU0FBUSxJQUFJO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsbUJBQWtCO0FBQ2xCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQSxrREFBaUQsMkJBQTJCLHdCQUF3QjtBQUNwRywwREFBeUQ7QUFDekQseURBQXdEO0FBQ3hELG1EQUFrRDtBQUNsRDtBQUNBLG1EQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQSxxQkFBb0I7QUFDcEIseUJBQXdCO0FBQ3hCLHNCQUFxQjtBQUNyQiw2QkFBNEI7QUFDNUIsNEJBQTJCO0FBQzNCLHNCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUFpRDtBQUNqRCx5Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEIsWUFBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQThDO0FBQzlDO0FBQ0E7QUFDQSxrQ0FBaUMsSUFBSTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBOEM7QUFDOUM7QUFDQTtBQUNBLGtDQUFpQyxJQUFJO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDaG1CQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBMkI7QUFDM0IsNEJBQTJCO0FBQzNCLHFEQUFvRCxnQkFBZ0I7QUFDcEUscURBQW9ELGFBQWE7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0M7QUFDeEMsaUNBQWdDO0FBQ2hDLGlCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDO0FBQ3RDLDhCQUE2QjtBQUM3QixpQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXdDO0FBQ3hDLGlDQUFnQztBQUNoQyxpQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQztBQUN0Qyw4QkFBNkI7QUFDN0IsaUJBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBa0M7QUFDbEMsMkJBQTBCO0FBQzFCLFdBQVU7QUFDVixpQ0FBZ0M7QUFDaEMsd0JBQXVCO0FBQ3ZCLFdBQVU7QUFDVjtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQWtDO0FBQ2xDLDJCQUEwQjtBQUMxQixXQUFVO0FBQ1YsaUNBQWdDO0FBQ2hDLHdCQUF1QjtBQUN2QixXQUFVO0FBQ1Y7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsNEJBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXFCLHFDQUFxQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDdlNBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoWEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE0QyxTQUFTO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDM1lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUM1SUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFrQjtBQUNsQixtQkFBa0I7O0FBRWxCLHNCQUFxQjtBQUNyQix1QkFBc0I7O0FBRXRCLG1CQUFrQjtBQUNsQixtQkFBa0I7O0FBRWxCLG1CQUFrQjtBQUNsQixvQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNuRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUN2R0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUMvRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTs7QUFFYjtBQUNBO0FBQ0EsVUFBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlEQUF3RCxZQUFZO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQXlCLHdDQUF3QztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWlELG1CQUFtQixFQUFFO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUErQixNQUFNO0FBQ3JDO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQiwyQkFBMkI7QUFDaEQsd0JBQXVCLCtDQUErQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXFCLDJCQUEyQjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBcUIsMkJBQTJCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBLHdCQUF1Qiw0QkFBNEI7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUN6akNBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDL0dBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsTUFBTTtBQUNuQjtBQUNBLGNBQWEsT0FBTztBQUNwQjtBQUNBLGNBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE1BQU07QUFDbkI7QUFDQSxjQUFhLFNBQVM7QUFDdEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQixPQUFPO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE1BQU07QUFDbkI7QUFDQSxjQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDbEhBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBbUMsUUFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBc0I7QUFDdEI7QUFDQTtBQUNBLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWlELFNBQVM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBMkMsU0FBUztBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQSxZQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsK0NBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZ0JBQWU7QUFDZjtBQUNBLGNBQWE7QUFDYjtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQUs7O0FBRUwsYUFBWTtBQUNaOztBQUVBO0FBQ0EiLCJmaWxlIjoidGVzdF9zb3VyY2Vfbm9kZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjay9ib290c3RyYXAgNWY2ODNjMjEwMTc4ZjE5OGUxOWNcbiAqKi8iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG57XG4gIHZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbiAgdmFyIFNvdXJjZU1hcEdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbiAgdmFyIFNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi4vbGliL3NvdXJjZS1tYXAtY29uc3VtZXInKS5Tb3VyY2VNYXBDb25zdW1lcjtcbiAgdmFyIFNvdXJjZU5vZGUgPSByZXF1aXJlKCcuLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuXG4gIGZ1bmN0aW9uIGZvckVhY2hOZXdsaW5lKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgICAgIFsnXFxuJywgJ1xcclxcbiddLmZvckVhY2goZm4uYmluZChudWxsLCBhc3NlcnQpKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRzWyd0ZXN0IC5hZGQoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCk7XG5cbiAgICAvLyBBZGRpbmcgYSBzdHJpbmcgd29ya3MuXG4gICAgbm9kZS5hZGQoJ2Z1bmN0aW9uIG5vb3AoKSB7fScpO1xuXG4gICAgLy8gQWRkaW5nIGFub3RoZXIgc291cmNlIG5vZGUgd29ya3MuXG4gICAgbm9kZS5hZGQobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCkpO1xuXG4gICAgLy8gQWRkaW5nIGFuIGFycmF5IHdvcmtzLlxuICAgIG5vZGUuYWRkKFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm4gMTA7JyksXG4gICAgICAgICAgICAgICd9J10pO1xuXG4gICAgLy8gQWRkaW5nIG90aGVyIHN0dWZmIGRvZXNuJ3QuXG4gICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmFkZCh7fSk7XG4gICAgfSk7XG4gICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmFkZChmdW5jdGlvbiAoKSB7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAucHJlcGVuZCgpJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsKTtcblxuICAgIC8vIFByZXBlbmRpbmcgYSBzdHJpbmcgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKCdmdW5jdGlvbiBub29wKCkge30nKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlblswXSwgJ2Z1bmN0aW9uIG5vb3AoKSB7fScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuLmxlbmd0aCwgMSk7XG5cbiAgICAvLyBQcmVwZW5kaW5nIGFub3RoZXIgc291cmNlIG5vZGUgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwpKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlblswXSwgJycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzFdLCAnZnVuY3Rpb24gbm9vcCgpIHt9Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG5vZGUuY2hpbGRyZW4ubGVuZ3RoLCAyKTtcblxuICAgIC8vIFByZXBlbmRpbmcgYW4gYXJyYXkgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm4gMTA7JyksXG4gICAgICAgICAgICAgICd9J10pO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzBdLCAnZnVuY3Rpb24gZm9vKCkgeycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzFdLCAncmV0dXJuIDEwOycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzJdLCAnfScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzNdLCAnJyk7XG4gICAgYXNzZXJ0LmVxdWFsKG5vZGUuY2hpbGRyZW5bNF0sICdmdW5jdGlvbiBub29wKCkge30nKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlbi5sZW5ndGgsIDUpO1xuXG4gICAgLy8gUHJlcGVuZGluZyBvdGhlciBzdHVmZiBkb2Vzbid0LlxuICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5wcmVwZW5kKHt9KTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUucHJlcGVuZChmdW5jdGlvbiAoKSB7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmcoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIGFzc2VydC5lcXVhbCgobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ3JldHVybiAxMDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSddKSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvbygpIHtyZXR1cm4gMTA7fScpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLmpvaW4oKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIGFzc2VydC5lcXVhbCgobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsICdiJywgJ2MnLCAnZCddKSkuam9pbignLCAnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAnYSwgYiwgYywgZCcpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLndhbGsoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHtcXG4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDEsIDAsICdhLmpzJywgWydzb21lQ2FsbCgpJ10pLCAnO1xcbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJywgbmV3IFNvdXJjZU5vZGUoMiwgMCwgJ2IuanMnLCBbJ2lmIChmb28pIGJhcigpJ10pLCAnO1xcbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIHZhciBleHBlY3RlZCA9IFtcbiAgICAgIHsgc3RyOiAnKGZ1bmN0aW9uICgpIHtcXG4nLCBzb3VyY2U6IG51bGwsICAgbGluZTogbnVsbCwgY29sdW1uOiBudWxsIH0sXG4gICAgICB7IHN0cjogJyAgJywgICAgICAgICAgICAgICBzb3VyY2U6IG51bGwsICAgbGluZTogbnVsbCwgY29sdW1uOiBudWxsIH0sXG4gICAgICB7IHN0cjogJ3NvbWVDYWxsKCknLCAgICAgICBzb3VyY2U6ICdhLmpzJywgbGluZTogMSwgICAgY29sdW1uOiAwICAgIH0sXG4gICAgICB7IHN0cjogJztcXG4nLCAgICAgICAgICAgICAgc291cmNlOiBudWxsLCAgIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCB9LFxuICAgICAgeyBzdHI6ICcgICcsICAgICAgICAgICAgICAgc291cmNlOiBudWxsLCAgIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCB9LFxuICAgICAgeyBzdHI6ICdpZiAoZm9vKSBiYXIoKScsICAgc291cmNlOiAnYi5qcycsIGxpbmU6IDIsICAgIGNvbHVtbjogMCAgICB9LFxuICAgICAgeyBzdHI6ICc7XFxuJywgICAgICAgICAgICAgIHNvdXJjZTogbnVsbCwgICBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwgfSxcbiAgICAgIHsgc3RyOiAnfSgpKTsnLCAgICAgICAgICAgIHNvdXJjZTogbnVsbCwgICBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwgfSxcbiAgICBdO1xuICAgIHZhciBpID0gMDtcbiAgICBub2RlLndhbGsoZnVuY3Rpb24gKGNodW5rLCBsb2MpIHtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5zdHIsIGNodW5rKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5zb3VyY2UsIGxvYy5zb3VyY2UpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGVjdGVkW2ldLmxpbmUsIGxvYy5saW5lKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5jb2x1bW4sIGxvYy5jb2x1bW4pO1xuICAgICAgaSsrO1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnJlcGxhY2VSaWdodCddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlO1xuXG4gICAgLy8gTm90IG5lc3RlZFxuICAgIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLCAnaGVsbG8gd29ybGQnKTtcbiAgICBub2RlLnJlcGxhY2VSaWdodCgvd29ybGQvLCAndW5pdmVyc2UnKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS50b1N0cmluZygpLCAnaGVsbG8gdW5pdmVyc2UnKTtcblxuICAgIC8vIE5lc3RlZFxuICAgIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ2hleSBzZXh5IG1hbWEsICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ3dhbnQgdG8ga2lsbCBhbGwgaHVtYW5zPycpXSk7XG4gICAgbm9kZS5yZXBsYWNlUmlnaHQoL2tpbGwgYWxsIGh1bWFucy8sICd3YXRjaCBGdXR1cmFtYScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLnRvU3RyaW5nKCksICdoZXkgc2V4eSBtYW1hLCB3YW50IHRvIHdhdGNoIEZ1dHVyYW1hPycpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHsnICsgbmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKDEsIDAsICdhLmpzJywgJ3NvbWVDYWxsJywgJ29yaWdpbmFsQ2FsbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgOCwgJ2EuanMnLCAnKCknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7JyArIG5sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDIsIDAsICdiLmpzJywgWydpZiAoZm9vKSBiYXIoKSddKSwgJzsnICsgbmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5jb2RlLCBbXG4gICAgICAnKGZ1bmN0aW9uICgpIHsnLFxuICAgICAgJyAgc29tZUNhbGwoKTsnLFxuICAgICAgJyAgaWYgKGZvbykgYmFyKCk7JyxcbiAgICAgICd9KCkpOydcbiAgICBdLmpvaW4obmwpKTtcblxuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBtYXBXaXRob3V0T3B0aW9ucyA9IG5vZGUudG9TdHJpbmdXaXRoU291cmNlTWFwKCkubWFwO1xuXG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIGFzc2VydC5vayhtYXBXaXRob3V0T3B0aW9ucyBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcFdpdGhvdXRPcHRpb25zIGluc3RhbmNlb2YgU291cmNlTWFwR2VuZXJhdG9yJyk7XG4gICAgYXNzZXJ0Lm9rKCEoJ2ZpbGUnIGluIG1hcFdpdGhvdXRPcHRpb25zKSk7XG4gICAgbWFwV2l0aG91dE9wdGlvbnMuX2ZpbGUgPSAnZm9vLmpzJztcbiAgICB1dGlsLmFzc2VydEVxdWFsTWFwcyhhc3NlcnQsIG1hcC50b0pTT04oKSwgbWFwV2l0aG91dE9wdGlvbnMudG9KU09OKCkpO1xuXG4gICAgbWFwID0gbmV3IFNvdXJjZU1hcENvbnN1bWVyKG1hcC50b1N0cmluZygpKTtcblxuICAgIHZhciBhY3R1YWw7XG5cbiAgICBhY3R1YWwgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiAxLFxuICAgICAgY29sdW1uOiA0XG4gICAgfSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5zb3VyY2UsIG51bGwpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIG51bGwpO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMixcbiAgICAgIGNvbHVtbjogMlxuICAgIH0pO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwuc291cmNlLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIDApO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubmFtZSwgJ29yaWdpbmFsQ2FsbCcpO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMyxcbiAgICAgIGNvbHVtbjogMlxuICAgIH0pO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwuc291cmNlLCAnYi5qcycpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIDApO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMyxcbiAgICAgIGNvbHVtbjogMTZcbiAgICB9KTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsLnNvdXJjZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5saW5lLCBudWxsKTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsLmNvbHVtbiwgbnVsbCk7XG5cbiAgICBhY3R1YWwgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiA0LFxuICAgICAgY29sdW1uOiAyXG4gICAgfSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5zb3VyY2UsIG51bGwpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIG51bGwpO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IC5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCgpJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciB0ZXN0Q29kZSA9IHV0aWwudGVzdEdlbmVyYXRlZENvZGUucmVwbGFjZSgvXFxuL2csIG5sKTtcbiAgICB2YXIgbm9kZSA9IFNvdXJjZU5vZGUuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLnRlc3RNYXApKTtcblxuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnbWluLmpzJ1xuICAgIH0pO1xuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBjb2RlID0gcmVzdWx0LmNvZGU7XG5cbiAgICBhc3NlcnQuZXF1YWwoY29kZSwgdGVzdENvZGUpO1xuICAgIGFzc2VydC5vayhtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3IsICdtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3InKTtcbiAgICBtYXAgPSBtYXAudG9KU09OKCk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC52ZXJzaW9uLCB1dGlsLnRlc3RNYXAudmVyc2lvbik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5maWxlLCB1dGlsLnRlc3RNYXAuZmlsZSk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5tYXBwaW5ncywgdXRpbC50ZXN0TWFwLm1hcHBpbmdzKTtcbiAgfSk7XG5cbiAgZXhwb3J0c1sndGVzdCAuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoKSBlbXB0eSBtYXAnXSA9IGZvckVhY2hOZXdsaW5lKGZ1bmN0aW9uIChhc3NlcnQsIG5sKSB7XG4gICAgdmFyIG5vZGUgPSBTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC50ZXN0R2VuZXJhdGVkQ29kZS5yZXBsYWNlKC9cXG4vZywgbmwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZW1wdHlNYXApKTtcbiAgICB2YXIgcmVzdWx0ID0gbm9kZS50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe1xuICAgICAgZmlsZTogJ21pbi5qcydcbiAgICB9KTtcbiAgICB2YXIgbWFwID0gcmVzdWx0Lm1hcDtcbiAgICB2YXIgY29kZSA9IHJlc3VsdC5jb2RlO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGNvZGUsIHV0aWwudGVzdEdlbmVyYXRlZENvZGUucmVwbGFjZSgvXFxuL2csIG5sKSk7XG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIG1hcCA9IG1hcC50b0pTT04oKTtcbiAgICBhc3NlcnQuZXF1YWwobWFwLnZlcnNpb24sIHV0aWwuZW1wdHlNYXAudmVyc2lvbik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5maWxlLCB1dGlsLmVtcHR5TWFwLmZpbGUpO1xuICAgIGFzc2VydC5lcXVhbChtYXAubWFwcGluZ3MubGVuZ3RoLCB1dGlsLmVtcHR5TWFwLm1hcHBpbmdzLmxlbmd0aCk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5tYXBwaW5ncywgdXRpbC5lbXB0eU1hcC5tYXBwaW5ncyk7XG4gIH0pO1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKCkgY29tcGxleCB2ZXJzaW9uJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBpbnB1dCA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsIFtcbiAgICAgIFwiKGZ1bmN0aW9uKCkge1wiICsgbmwsXG4gICAgICAgIFwiICB2YXIgVGVzdCA9IHt9O1wiICsgbmwsXG4gICAgICAgIFwiICBcIiwgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiVGVzdC5BID0geyB2YWx1ZTogMTIzNCB9O1wiICsgbmwpLFxuICAgICAgICBcIiAgXCIsIG5ldyBTb3VyY2VOb2RlKDIsIDAsIFwiYS5qc1wiLCBcIlRlc3QuQS54ID0gJ3h5eic7XCIpLCBubCxcbiAgICAgICAgXCJ9KCkpO1wiICsgbmwsXG4gICAgICAgIFwiLyogR2VuZXJhdGVkIFNvdXJjZSAqL1wiXSk7XG4gICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe1xuICAgICAgZmlsZTogJ2Zvby5qcydcbiAgICB9KTtcblxuICAgIHZhciBub2RlID0gU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU291cmNlTWFwQ29uc3VtZXIoaW5wdXQubWFwLnRvU3RyaW5nKCkpKTtcblxuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBjb2RlID0gcmVzdWx0LmNvZGU7XG5cbiAgICBhc3NlcnQuZXF1YWwoY29kZSwgaW5wdXQuY29kZSk7XG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIG1hcCA9IG1hcC50b0pTT04oKTtcbiAgICB2YXIgaW5wdXRNYXAgPSBpbnB1dC5tYXAudG9KU09OKCk7XG4gICAgdXRpbC5hc3NlcnRFcXVhbE1hcHMoYXNzZXJ0LCBtYXAsIGlucHV0TWFwKTtcbiAgfSk7XG5cbiAgZXhwb3J0c1sndGVzdCAuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoKSB0aGlyZCBhcmd1bWVudCddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIC8vIEFzc3VtZSB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmU6XG4gICAgLy9cbiAgICAvLyBodHRwOi8vZm9vLm9yZy9cbiAgICAvLyAgIGJhci5jb2ZmZWVcbiAgICAvLyAgIGFwcC9cbiAgICAvLyAgICAgY29mZmVlL1xuICAgIC8vICAgICAgIGZvby5jb2ZmZWVcbiAgICAvLyAgICAgICBjb2ZmZWVCdW5kbGUuanMgIyBNYWRlIGZyb20ge2ZvbyxiYXIsYmF6fS5jb2ZmZWVcbiAgICAvLyAgICAgICBtYXBzL1xuICAgIC8vICAgICAgICAgY29mZmVlQnVuZGxlLmpzLm1hcFxuICAgIC8vICAgICBqcy9cbiAgICAvLyAgICAgICBmb28uanNcbiAgICAvLyAgICAgcHVibGljL1xuICAgIC8vICAgICAgIGFwcC5qcyAjIE1hZGUgZnJvbSB7Zm9vLGNvZmZlZUJ1bmRsZX0uanNcbiAgICAvLyAgICAgICBhcHAuanMubWFwXG4gICAgLy9cbiAgICAvLyBodHRwOi8vd3d3LmV4YW1wbGUuY29tL1xuICAgIC8vICAgYmF6LmNvZmZlZVxuXG4gICAgdmFyIGNvZmZlZUJ1bmRsZSA9IG5ldyBTb3VyY2VOb2RlKDEsIDAsICdmb28uY29mZmVlJywgJ2Zvbyhjb2ZmZWUpO1xcbicpO1xuICAgIGNvZmZlZUJ1bmRsZS5zZXRTb3VyY2VDb250ZW50KCdmb28uY29mZmVlJywgJ2ZvbyBjb2ZmZWUnKTtcbiAgICBjb2ZmZWVCdW5kbGUuYWRkKG5ldyBTb3VyY2VOb2RlKDIsIDAsICcvYmFyLmNvZmZlZScsICdiYXIoY29mZmVlKTtcXG4nKSk7XG4gICAgY29mZmVlQnVuZGxlLmFkZChuZXcgU291cmNlTm9kZSgzLCAwLCAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJywgJ2Jheihjb2ZmZWUpOycpKTtcbiAgICBjb2ZmZWVCdW5kbGUgPSBjb2ZmZWVCdW5kbGUudG9TdHJpbmdXaXRoU291cmNlTWFwKHtcbiAgICAgIGZpbGU6ICdmb28uanMnLFxuICAgICAgc291cmNlUm9vdDogJy4uJ1xuICAgIH0pO1xuXG4gICAgdmFyIGZvbyA9IG5ldyBTb3VyY2VOb2RlKDEsIDAsICdmb28uanMnLCAnZm9vKGpzKTsnKTtcblxuICAgIHZhciB0ZXN0ID0gZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBleHBlY3RlZFNvdXJjZXMpIHtcbiAgICAgIHZhciBhcHAgPSBuZXcgU291cmNlTm9kZSgpO1xuICAgICAgYXBwLmFkZChTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2ZmZWVCdW5kbGUuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU1hcENvbnN1bWVyKGNvZmZlZUJ1bmRsZS5tYXAudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aCkpO1xuICAgICAgYXBwLmFkZChmb28pO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgYXBwLndhbGsoZnVuY3Rpb24gKGNodW5rLCBsb2MpIHtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKGxvYy5zb3VyY2UsIGV4cGVjdGVkU291cmNlc1tpXSk7XG4gICAgICAgIGkrKztcbiAgICAgIH0pO1xuICAgICAgYXBwLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbiAoc291cmNlRmlsZSwgc291cmNlQ29udGVudCkge1xuICAgICAgICBhc3NlcnQuZXF1YWwoc291cmNlRmlsZSwgZXhwZWN0ZWRTb3VyY2VzWzBdKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHNvdXJjZUNvbnRlbnQsICdmb28gY29mZmVlJyk7XG4gICAgICB9KVxuICAgIH07XG5cbiAgICB0ZXN0KCcuLi9jb2ZmZWUvbWFwcycsIFtcbiAgICAgICcuLi9jb2ZmZWUvZm9vLmNvZmZlZScsXG4gICAgICAnL2Jhci5jb2ZmZWUnLFxuICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vYmF6LmNvZmZlZScsXG4gICAgICAnZm9vLmpzJ1xuICAgIF0pO1xuXG4gICAgLy8gSWYgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyBvbWl0dGVkIG9yIHNldCB0byB0aGUgY3VycmVudCB3b3JraW5nXG4gICAgLy8gZGlyZWN0b3J5IHdlIGdldCBpbmNvcnJlY3Qgc291cmNlIHBhdGhzOlxuXG4gICAgdGVzdCh1bmRlZmluZWQsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG5cbiAgICB0ZXN0KCcnLCBbXG4gICAgICAnLi4vZm9vLmNvZmZlZScsXG4gICAgICAnL2Jhci5jb2ZmZWUnLFxuICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vYmF6LmNvZmZlZScsXG4gICAgICAnZm9vLmpzJ1xuICAgIF0pO1xuXG4gICAgdGVzdCgnLicsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG5cbiAgICB0ZXN0KCcuLycsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmdXaXRoU291cmNlTWFwKCkgbWVyZ2luZyBkdXBsaWNhdGUgbWFwcGluZ3MnXSA9IGZvckVhY2hOZXdsaW5lKGZ1bmN0aW9uIChhc3NlcnQsIG5sKSB7XG4gICAgdmFyIGlucHV0ID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgW1xuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiKGZ1bmN0aW9uXCIpLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiKCkge1wiICsgbmwpLFxuICAgICAgXCIgIFwiLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwidmFyIFRlc3QgPSBcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgxLCAwLCBcImIuanNcIiwgXCJ7fTtcIiArIG5sKSxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDIsIDAsIFwiYi5qc1wiLCBcIlRlc3RcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAwLCBcImIuanNcIiwgXCIuQVwiLCBcIkFcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyMCwgXCJiLmpzXCIsIFwiID0geyB2YWx1ZTogXCIsIFwiQVwiKSxcbiAgICAgIFwiMTIzNFwiLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMiwgNDAsIFwiYi5qc1wiLCBcIiB9O1wiICsgbmwsIFwiQVwiKSxcbiAgICAgIFwifSgpKTtcIiArIG5sLFxuICAgICAgXCIvKiBHZW5lcmF0ZWQgU291cmNlICovXCJcbiAgICBdKTtcbiAgICBpbnB1dCA9IGlucHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGlucHV0LmNvZGUsIFtcbiAgICAgIFwiKGZ1bmN0aW9uKCkge1wiLFxuICAgICAgXCIgIHZhciBUZXN0ID0ge307XCIsXG4gICAgICBcIlRlc3QuQSA9IHsgdmFsdWU6IDEyMzQgfTtcIixcbiAgICAgIFwifSgpKTtcIixcbiAgICAgIFwiLyogR2VuZXJhdGVkIFNvdXJjZSAqL1wiXG4gICAgXS5qb2luKG5sKSlcblxuICAgIHZhciBjb3JyZWN0TWFwID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgLy8gSGVyZSBpcyBubyBuZWVkIGZvciBhIGVtcHR5IG1hcHBpbmcsXG4gICAgLy8gYmVjYXVzZSBtYXBwaW5ncyBlbmRzIGF0IGVvbFxuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMiwgY29sdW1uOiAyIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAyLCBjb2x1bW46IDEzIH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDMsIGNvbHVtbjogNCB9LFxuICAgICAgc291cmNlOiAnYi5qcycsXG4gICAgICBuYW1lOiAnQScsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMywgY29sdW1uOiA2IH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG5hbWU6ICdBJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDIsIGNvbHVtbjogMjAgfVxuICAgIH0pO1xuICAgIC8vIFRoaXMgZW1wdHkgbWFwcGluZyBpcyByZXF1aXJlZCxcbiAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgaG9sZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsaW5lXG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDE4IH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDMsIGNvbHVtbjogMjIgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgbmFtZTogJ0EnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiA0MCB9XG4gICAgfSk7XG4gICAgLy8gSGVyZSBpcyBubyBuZWVkIGZvciBhIGVtcHR5IG1hcHBpbmcsXG4gICAgLy8gYmVjYXVzZSBtYXBwaW5ncyBlbmRzIGF0IGVvbFxuXG4gICAgdmFyIGlucHV0TWFwID0gaW5wdXQubWFwLnRvSlNPTigpO1xuICAgIGNvcnJlY3RNYXAgPSBjb3JyZWN0TWFwLnRvSlNPTigpO1xuICAgIHV0aWwuYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgaW5wdXRNYXAsIGNvcnJlY3RNYXApO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoKSBtdWx0aS1saW5lIFNvdXJjZU5vZGVzJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBpbnB1dCA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsIFtcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDEsIDAsIFwiYS5qc1wiLCBcIihmdW5jdGlvbigpIHtcIiArIG5sICsgXCJ2YXIgbmV4dExpbmUgPSAxO1wiICsgbmwgKyBcImFub3RoZXJMaW5lKCk7XCIgKyBubCksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyLCBcImIuanNcIiwgXCJUZXN0LmNhbGwodGhpcywgMTIzKTtcIiArIG5sKSxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDIsIDIsIFwiYi5qc1wiLCBcInRoaXNbJ3N0dWZmJ10gPSAndic7XCIgKyBubCksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyLCBcImIuanNcIiwgXCJhbm90aGVyTGluZSgpO1wiICsgbmwpLFxuICAgICAgXCIvKlwiICsgbmwgKyBcIkdlbmVyYXRlZFwiICsgbmwgKyBcIlNvdXJjZVwiICsgbmwgKyBcIiovXCIgKyBubCxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDMsIDQsIFwiYy5qc1wiLCBcImFub3RoZXJMaW5lKCk7XCIgKyBubCksXG4gICAgICBcIi8qXCIgKyBubCArIFwiR2VuZXJhdGVkXCIgKyBubCArIFwiU291cmNlXCIgKyBubCArIFwiKi9cIlxuICAgIF0pO1xuICAgIGlucHV0ID0gaW5wdXQudG9TdHJpbmdXaXRoU291cmNlTWFwKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuZXF1YWwoaW5wdXQuY29kZSwgW1xuICAgICAgXCIoZnVuY3Rpb24oKSB7XCIsXG4gICAgICBcInZhciBuZXh0TGluZSA9IDE7XCIsXG4gICAgICBcImFub3RoZXJMaW5lKCk7XCIsXG4gICAgICBcIlRlc3QuY2FsbCh0aGlzLCAxMjMpO1wiLFxuICAgICAgXCJ0aGlzWydzdHVmZiddID0gJ3YnO1wiLFxuICAgICAgXCJhbm90aGVyTGluZSgpO1wiLFxuICAgICAgXCIvKlwiLFxuICAgICAgXCJHZW5lcmF0ZWRcIixcbiAgICAgIFwiU291cmNlXCIsXG4gICAgICBcIiovXCIsXG4gICAgICBcImFub3RoZXJMaW5lKCk7XCIsXG4gICAgICBcIi8qXCIsXG4gICAgICBcIkdlbmVyYXRlZFwiLFxuICAgICAgXCJTb3VyY2VcIixcbiAgICAgIFwiKi9cIlxuICAgIF0uam9pbihubCkpO1xuXG4gICAgdmFyIGNvcnJlY3RNYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2EuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMSwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDIsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYS5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMywgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiA0LCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiAyIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDUsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYi5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDIgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogNiwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDIsIGNvbHVtbjogMiB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAxMSwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdjLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDMsIGNvbHVtbjogNCB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5wdXRNYXAgPSBpbnB1dC5tYXAudG9KU09OKCk7XG4gICAgY29ycmVjdE1hcCA9IGNvcnJlY3RNYXAudG9KU09OKCk7XG4gICAgdXRpbC5hc3NlcnRFcXVhbE1hcHMoYXNzZXJ0LCBpbnB1dE1hcCwgY29ycmVjdE1hcCk7XG4gIH0pO1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpIHdpdGggZW1wdHkgc3RyaW5nJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgxLCAwLCAnZW1wdHkuanMnLCAnJyk7XG4gICAgdmFyIHJlc3VsdCA9IG5vZGUudG9TdHJpbmdXaXRoU291cmNlTWFwKCk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5jb2RlLCAnJyk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmdXaXRoU291cmNlTWFwKCkgd2l0aCBjb25zZWN1dGl2ZSBuZXdsaW5lcyddID0gZm9yRWFjaE5ld2xpbmUoZnVuY3Rpb24gKGFzc2VydCwgbmwpIHtcbiAgICB2YXIgaW5wdXQgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLCBbXG4gICAgICBcIi8qKiovXCIgKyBubCArIG5sLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiJ3VzZSBzdHJpY3QnO1wiICsgbmwpLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMiwgMCwgXCJhLmpzXCIsIFwiYSgpO1wiKSxcbiAgICBdKTtcbiAgICBpbnB1dCA9IGlucHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGlucHV0LmNvZGUsIFtcbiAgICAgIFwiLyoqKi9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIid1c2Ugc3RyaWN0JztcIixcbiAgICAgIFwiYSgpO1wiLFxuICAgIF0uam9pbihubCkpO1xuXG4gICAgdmFyIGNvcnJlY3RNYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2EuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMSwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDQsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYS5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGlucHV0TWFwID0gaW5wdXQubWFwLnRvSlNPTigpO1xuICAgIGNvcnJlY3RNYXAgPSBjb3JyZWN0TWFwLnRvSlNPTigpO1xuICAgIHV0aWwuYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgaW5wdXRNYXAsIGNvcnJlY3RNYXApO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IHNldFNvdXJjZUNvbnRlbnQgd2l0aCB0b1N0cmluZ1dpdGhTb3VyY2VNYXAnXSA9IGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgICB2YXIgYU5vZGUgPSBuZXcgU291cmNlTm9kZSgxLCAxLCAnYS5qcycsICdhJyk7XG4gICAgYU5vZGUuc2V0U291cmNlQ29udGVudCgnYS5qcycsICdzb21lQ29udGVudCcpO1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHtcXG4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIGFOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDEsIDEsICdiLmpzJywgJ2InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSgpKTsnXSk7XG4gICAgbm9kZS5zZXRTb3VyY2VDb250ZW50KCdiLmpzJywgJ290aGVyQ29udGVudCcpO1xuICAgIHZhciBtYXAgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pLm1hcDtcblxuICAgIGFzc2VydC5vayhtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3IsICdtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3InKTtcbiAgICBtYXAgPSBuZXcgU291cmNlTWFwQ29uc3VtZXIobWFwLnRvU3RyaW5nKCkpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzLmxlbmd0aCwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzWzBdLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChtYXAuc291cmNlc1sxXSwgJ2IuanMnKTtcbiAgICBhc3NlcnQuZXF1YWwobWFwLnNvdXJjZXNDb250ZW50Lmxlbmd0aCwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzQ29udGVudFswXSwgJ3NvbWVDb250ZW50Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzQ29udGVudFsxXSwgJ290aGVyQ29udGVudCcpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3Qgd2Fsa1NvdXJjZUNvbnRlbnRzJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIGFOb2RlID0gbmV3IFNvdXJjZU5vZGUoMSwgMSwgJ2EuanMnLCAnYScpO1xuICAgIGFOb2RlLnNldFNvdXJjZUNvbnRlbnQoJ2EuanMnLCAnc29tZUNvbnRlbnQnKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyhmdW5jdGlvbiAoKSB7XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnLCBhTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnLCBuZXcgU291cmNlTm9kZSgxLCAxLCAnYi5qcycsICdiJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIG5vZGUuc2V0U291cmNlQ29udGVudCgnYi5qcycsICdvdGhlckNvbnRlbnQnKTtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIG5vZGUud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uIChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KSB7XG4gICAgICByZXN1bHRzLnB1c2goW3NvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnRdKTtcbiAgICB9KTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDIpO1xuICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzBdWzBdLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzBdWzFdLCAnc29tZUNvbnRlbnQnKTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVswXSwgJ2IuanMnKTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsxXSwgJ290aGVyQ29udGVudCcpO1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3Rlc3QvdGVzdC1zb3VyY2Utbm9kZS5qc1xuICoqIG1vZHVsZSBpZCA9IDBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuLi9saWIvdXRpbCcpO1xuXG4gIC8vIFRoaXMgaXMgYSB0ZXN0IG1hcHBpbmcgd2hpY2ggbWFwcyBmdW5jdGlvbnMgZnJvbSB0d28gZGlmZmVyZW50IGZpbGVzXG4gIC8vIChvbmUuanMgYW5kIHR3by5qcykgdG8gYSBtaW5pZmllZCBnZW5lcmF0ZWQgc291cmNlLlxuICAvL1xuICAvLyBIZXJlIGlzIG9uZS5qczpcbiAgLy9cbiAgLy8gICBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xuICAvLyAgICAgcmV0dXJuIGJheihiYXIpO1xuICAvLyAgIH07XG4gIC8vXG4gIC8vIEhlcmUgaXMgdHdvLmpzOlxuICAvL1xuICAvLyAgIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xuICAvLyAgICAgcmV0dXJuIG4gKyAxO1xuICAvLyAgIH07XG4gIC8vXG4gIC8vIEFuZCBoZXJlIGlzIHRoZSBnZW5lcmF0ZWQgY29kZSAobWluLmpzKTpcbiAgLy9cbiAgLy8gICBPTkUuZm9vPWZ1bmN0aW9uKGEpe3JldHVybiBiYXooYSk7fTtcbiAgLy8gICBUV08uaW5jPWZ1bmN0aW9uKGEpe3JldHVybiBhKzE7fTtcbiAgZXhwb3J0cy50ZXN0R2VuZXJhdGVkQ29kZSA9IFwiIE9ORS5mb289ZnVuY3Rpb24oYSl7cmV0dXJuIGJheihhKTt9O1xcblwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgVFdPLmluYz1mdW5jdGlvbihhKXtyZXR1cm4gYSsxO307XCI7XG4gIGV4cG9ydHMudGVzdE1hcCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIHNvdXJjZVJvb3Q6ICcvdGhlL3Jvb3QnLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIGV4cG9ydHMudGVzdE1hcE5vU291cmNlUm9vdCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIGV4cG9ydHMudGVzdE1hcEVtcHR5U291cmNlUm9vdCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIHNvdXJjZVJvb3Q6ICcnLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIC8vIFRoaXMgbWFwcGluZyBpcyBpZGVudGljYWwgdG8gYWJvdmUsIGJ1dCB1c2VzIHRoZSBpbmRleGVkIGZvcm1hdCBpbnN0ZWFkLlxuICBleHBvcnRzLmluZGV4ZWRUZXN0TWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB7XG4gICAgICAgICAgdmVyc2lvbjogMyxcbiAgICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgICBcIm9uZS5qc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgICAgICAgJyBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xcbicgK1xuICAgICAgICAgICAgJyAgIHJldHVybiBiYXooYmFyKTtcXG4nICtcbiAgICAgICAgICAgICcgfTsnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbmFtZXM6IFtcbiAgICAgICAgICAgIFwiYmFyXCIsXG4gICAgICAgICAgICBcImJhelwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtYXBwaW5nczogXCJDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQyxJQUFJRFwiLFxuICAgICAgICAgIGZpbGU6IFwibWluLmpzXCIsXG4gICAgICAgICAgc291cmNlUm9vdDogXCIvdGhlL3Jvb3RcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvZmZzZXQ6IHtcbiAgICAgICAgICBsaW5lOiAxLFxuICAgICAgICAgIGNvbHVtbjogMFxuICAgICAgICB9LFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAzLFxuICAgICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICAgIFwidHdvLmpzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNvdXJjZXNDb250ZW50OiBbXG4gICAgICAgICAgICAnIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xcbicgK1xuICAgICAgICAgICAgJyAgIHJldHVybiBuICsgMTtcXG4nICtcbiAgICAgICAgICAgICcgfTsnXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuYW1lczogW1xuICAgICAgICAgICAgXCJuXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1hcHBpbmdzOiBcIkNBQUMsSUFBSSxJQUFNLFNBQVVBLEdBQ2xCLE9BQU9BXCIsXG4gICAgICAgICAgZmlsZTogXCJtaW4uanNcIixcbiAgICAgICAgICBzb3VyY2VSb290OiBcIi90aGUvcm9vdFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGV4cG9ydHMuaW5kZXhlZFRlc3RNYXBEaWZmZXJlbnRTb3VyY2VSb290cyA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG9mZnNldDoge1xuICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgY29sdW1uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIG1hcDoge1xuICAgICAgICAgIHZlcnNpb246IDMsXG4gICAgICAgICAgc291cmNlczogW1xuICAgICAgICAgICAgXCJvbmUuanNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgc291cmNlc0NvbnRlbnQ6IFtcbiAgICAgICAgICAgICcgT05FLmZvbyA9IGZ1bmN0aW9uIChiYXIpIHtcXG4nICtcbiAgICAgICAgICAgICcgICByZXR1cm4gYmF6KGJhcik7XFxuJyArXG4gICAgICAgICAgICAnIH07JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5hbWVzOiBbXG4gICAgICAgICAgICBcImJhclwiLFxuICAgICAgICAgICAgXCJiYXpcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWFwcGluZ3M6IFwiQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSURcIixcbiAgICAgICAgICBmaWxlOiBcIm1pbi5qc1wiLFxuICAgICAgICAgIHNvdXJjZVJvb3Q6IFwiL3RoZS9yb290XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgbGluZTogMSxcbiAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB7XG4gICAgICAgICAgdmVyc2lvbjogMyxcbiAgICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgICBcInR3by5qc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgICAgICAgJyBUV08uaW5jID0gZnVuY3Rpb24gKG4pIHtcXG4nICtcbiAgICAgICAgICAgICcgICByZXR1cm4gbiArIDE7XFxuJyArXG4gICAgICAgICAgICAnIH07J1xuICAgICAgICAgIF0sXG4gICAgICAgICAgbmFtZXM6IFtcbiAgICAgICAgICAgIFwiblwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtYXBwaW5nczogXCJDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQVwiLFxuICAgICAgICAgIGZpbGU6IFwibWluLmpzXCIsXG4gICAgICAgICAgc291cmNlUm9vdDogXCIvZGlmZmVyZW50L3Jvb3RcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuICBleHBvcnRzLnRlc3RNYXBXaXRoU291cmNlc0NvbnRlbnQgPSB7XG4gICAgdmVyc2lvbjogMyxcbiAgICBmaWxlOiAnbWluLmpzJyxcbiAgICBuYW1lczogWydiYXInLCAnYmF6JywgJ24nXSxcbiAgICBzb3VyY2VzOiBbJ29uZS5qcycsICd0d28uanMnXSxcbiAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgJyBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xcbicgK1xuICAgICAgJyAgIHJldHVybiBiYXooYmFyKTtcXG4nICtcbiAgICAgICcgfTsnLFxuICAgICAgJyBUV08uaW5jID0gZnVuY3Rpb24gKG4pIHtcXG4nICtcbiAgICAgICcgICByZXR1cm4gbiArIDE7XFxuJyArXG4gICAgICAnIH07J1xuICAgIF0sXG4gICAgc291cmNlUm9vdDogJy90aGUvcm9vdCcsXG4gICAgbWFwcGluZ3M6ICdDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQyxJQUFJRDtDQ0RiLElBQUksSUFBTSxTQUFVRSxHQUNsQixPQUFPQSdcbiAgfTtcbiAgZXhwb3J0cy50ZXN0TWFwUmVsYXRpdmVTb3VyY2VzID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgbmFtZXM6IFsnYmFyJywgJ2JheicsICduJ10sXG4gICAgc291cmNlczogWycuL29uZS5qcycsICcuL3R3by5qcyddLFxuICAgIHNvdXJjZXNDb250ZW50OiBbXG4gICAgICAnIE9ORS5mb28gPSBmdW5jdGlvbiAoYmFyKSB7XFxuJyArXG4gICAgICAnICAgcmV0dXJuIGJheihiYXIpO1xcbicgK1xuICAgICAgJyB9OycsXG4gICAgICAnIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xcbicgK1xuICAgICAgJyAgIHJldHVybiBuICsgMTtcXG4nICtcbiAgICAgICcgfTsnXG4gICAgXSxcbiAgICBzb3VyY2VSb290OiAnL3RoZS9yb290JyxcbiAgICBtYXBwaW5nczogJ0NBQUMsSUFBSSxJQUFNLFNBQVVBLEdBQ2xCLE9BQU9DLElBQUlEO0NDRGIsSUFBSSxJQUFNLFNBQVVFLEdBQ2xCLE9BQU9BJ1xuICB9O1xuICBleHBvcnRzLmVtcHR5TWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgbmFtZXM6IFtdLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIG1hcHBpbmdzOiAnJ1xuICB9O1xuXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TWFwcGluZyhnZW5lcmF0ZWRMaW5lLCBnZW5lcmF0ZWRDb2x1bW4sIG9yaWdpbmFsU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTGluZSwgb3JpZ2luYWxDb2x1bW4sIG5hbWUsIGJpYXMsIG1hcCwgYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRUZXN0R2VuZXJhdGVkLCBkb250VGVzdE9yaWdpbmFsKSB7XG4gICAgaWYgKCFkb250VGVzdE9yaWdpbmFsKSB7XG4gICAgICB2YXIgb3JpZ01hcHBpbmcgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgIGxpbmU6IGdlbmVyYXRlZExpbmUsXG4gICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBiaWFzOiBiaWFzXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChvcmlnTWFwcGluZy5uYW1lLCBuYW1lLFxuICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgbmFtZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KG5hbWUpXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KG9yaWdNYXBwaW5nLm5hbWUpKTtcbiAgICAgIGFzc2VydC5lcXVhbChvcmlnTWFwcGluZy5saW5lLCBvcmlnaW5hbExpbmUsXG4gICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBsaW5lLCBleHBlY3RlZCAnICsgSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxMaW5lKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5saW5lKSk7XG4gICAgICBhc3NlcnQuZXF1YWwob3JpZ01hcHBpbmcuY29sdW1uLCBvcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IGNvbHVtbiwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsQ29sdW1uKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5jb2x1bW4pKTtcblxuICAgICAgdmFyIGV4cGVjdGVkU291cmNlO1xuXG4gICAgICBpZiAob3JpZ2luYWxTb3VyY2UgJiYgbWFwLnNvdXJjZVJvb3QgJiYgb3JpZ2luYWxTb3VyY2UuaW5kZXhPZihtYXAuc291cmNlUm9vdCkgPT09IDApIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBvcmlnaW5hbFNvdXJjZTtcbiAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBtYXAuc291cmNlUm9vdFxuICAgICAgICAgID8gdXRpbC5qb2luKG1hcC5zb3VyY2VSb290LCBvcmlnaW5hbFNvdXJjZSlcbiAgICAgICAgICA6IG9yaWdpbmFsU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3JpZ01hcHBpbmcuc291cmNlLCBleHBlY3RlZFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHNvdXJjZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkU291cmNlKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvbnRUZXN0R2VuZXJhdGVkKSB7XG4gICAgICB2YXIgZ2VuTWFwcGluZyA9IG1hcC5nZW5lcmF0ZWRQb3NpdGlvbkZvcih7XG4gICAgICAgIHNvdXJjZTogb3JpZ2luYWxTb3VyY2UsXG4gICAgICAgIGxpbmU6IG9yaWdpbmFsTGluZSxcbiAgICAgICAgY29sdW1uOiBvcmlnaW5hbENvbHVtbixcbiAgICAgICAgYmlhczogYmlhc1xuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwoZ2VuTWFwcGluZy5saW5lLCBnZW5lcmF0ZWRMaW5lLFxuICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgbGluZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KGdlbmVyYXRlZExpbmUpXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KGdlbk1hcHBpbmcubGluZSkpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGdlbk1hcHBpbmcuY29sdW1uLCBnZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBjb2x1bW4sIGV4cGVjdGVkICcgKyBKU09OLnN0cmluZ2lmeShnZW5lcmF0ZWRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KGdlbk1hcHBpbmcuY29sdW1uKSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydHMuYXNzZXJ0TWFwcGluZyA9IGFzc2VydE1hcHBpbmc7XG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgYWN0dWFsTWFwLCBleHBlY3RlZE1hcCkge1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAudmVyc2lvbiwgZXhwZWN0ZWRNYXAudmVyc2lvbiwgXCJ2ZXJzaW9uIG1pc21hdGNoXCIpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAuZmlsZSwgZXhwZWN0ZWRNYXAuZmlsZSwgXCJmaWxlIG1pc21hdGNoXCIpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAubmFtZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5uYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgIFwibmFtZXMgbGVuZ3RoIG1pc21hdGNoOiBcIiArXG4gICAgICAgICAgICAgICAgICAgYWN0dWFsTWFwLm5hbWVzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAubmFtZXMuam9pbihcIiwgXCIpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5uYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdHVhbE1hcC5uYW1lc1tpXSxcbiAgICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5uYW1lc1tpXSxcbiAgICAgICAgICAgICAgICAgICBcIm5hbWVzW1wiICsgaSArIFwiXSBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTWFwLm5hbWVzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAubmFtZXMuam9pbihcIiwgXCIpKTtcbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbE1hcC5zb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgIFwic291cmNlcyBsZW5ndGggbWlzbWF0Y2g6IFwiICtcbiAgICAgICAgICAgICAgICAgICBhY3R1YWxNYXAuc291cmNlcy5qb2luKFwiLCBcIikgKyBcIiAhPSBcIiArIGV4cGVjdGVkTWFwLnNvdXJjZXMuam9pbihcIiwgXCIpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlc1tpXSxcbiAgICAgICAgICAgICAgICAgICBcInNvdXJjZXNbXCIgKyBpICsgXCJdIGxlbmd0aCBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgIGFjdHVhbE1hcC5zb3VyY2VzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAuc291cmNlcy5qb2luKFwiLCBcIikpO1xuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgIGV4cGVjdGVkTWFwLnNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgIFwic291cmNlUm9vdCBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgIGFjdHVhbE1hcC5zb3VyY2VSb290ICsgXCIgIT0gXCIgKyBleHBlY3RlZE1hcC5zb3VyY2VSb290KTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLm1hcHBpbmdzLCBleHBlY3RlZE1hcC5tYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgXCJtYXBwaW5ncyBtaXNtYXRjaDpcXG5BY3R1YWw6ICAgXCIgKyBhY3R1YWxNYXAubWFwcGluZ3MgKyBcIlxcbkV4cGVjdGVkOiBcIiArIGV4cGVjdGVkTWFwLm1hcHBpbmdzKTtcbiAgICBpZiAoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5zb3VyY2VzQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgXCJzb3VyY2VzQ29udGVudCBsZW5ndGggbWlzbWF0Y2hcIik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5zb3VyY2VzQ29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50W2ldLFxuICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlc0NvbnRlbnRbaV0sXG4gICAgICAgICAgICAgICAgICAgICBcInNvdXJjZXNDb250ZW50W1wiICsgaSArIFwiXSBtaXNtYXRjaFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZXhwb3J0cy5hc3NlcnRFcXVhbE1hcHMgPSBhc3NlcnRFcXVhbE1hcHM7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vdGVzdC91dGlsLmpzXG4gKiogbW9kdWxlIGlkID0gMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICAvKipcbiAgICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICAgKiBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAgICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICAgKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICovXG4gIGZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICAgIH1cbiAgfVxuICBleHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxuICB2YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbiAgdmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG4gIGZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgICBob3N0OiBtYXRjaFszXSxcbiAgICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgICAgcGF0aDogbWF0Y2hbNV1cbiAgICB9O1xuICB9XG4gIGV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuICBmdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gICAgdmFyIHVybCA9ICcnO1xuICAgIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICAgIH1cbiAgICB1cmwgKz0gJy8vJztcbiAgICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgICB9XG4gICAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBleHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICAgKlxuICAgKiAtIFJlcGxhY2VzIGNvbnNlcXV0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICAgKlxuICAgKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgICB2YXIgcGF0aCA9IGFQYXRoO1xuICAgIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gICAgaWYgKHVybCkge1xuICAgICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG4gICAgICBwYXRoID0gdXJsLnBhdGg7XG4gICAgfVxuICAgIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICAgIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICB1cCsrO1xuICAgICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgICAgdXAgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgICB1cC0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICAgIH1cblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICBleHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuICAvKipcbiAgICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gICAqXG4gICAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAgICpcbiAgICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAgICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gICAqICAgZmlyc3QuXG4gICAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICAgKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAgICogICBpcyByZXR1cm5lZC5cbiAgICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICAgKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gICAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICAgIGFSb290ID0gXCIuXCI7XG4gICAgfVxuICAgIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgICAgYVBhdGggPSBcIi5cIjtcbiAgICB9XG4gICAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICAgIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgICAgaWYgKGFSb290VXJsKSB7XG4gICAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gICAgfVxuXG4gICAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gICAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgPyBhUGF0aFxuICAgICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gam9pbmVkO1xuICB9XG4gIGV4cG9ydHMuam9pbiA9IGpvaW47XG5cbiAgZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gICAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gICAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICAgIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgICAgYVJvb3QgPSBcIi5cIjtcbiAgICB9XG5cbiAgICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gICAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAgIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgICB2YXIgbGV2ZWwgPSAwO1xuICAgIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG5cbiAgICAgICsrbGV2ZWw7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xuICB9XG4gIGV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxuICAvKipcbiAgICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICAgKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG4gIGV4cG9ydHMudG9TZXRTdHJpbmcgPSB0b1NldFN0cmluZztcblxuICBmdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgICByZXR1cm4gYVN0ci5zdWJzdHIoMSk7XG4gIH1cbiAgZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gZnJvbVNldFN0cmluZztcblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAgICpcbiAgICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICAgKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAgICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAgICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICAgKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAgICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gICAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gICAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbiAgZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICAgIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gICAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICAgIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL3V0aWwuanNcbiAqKiBtb2R1bGUgaWQgPSAyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG57XG4gIHZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbiAgdmFyIE1hcHBpbmdMaXN0ID0gcmVxdWlyZSgnLi9tYXBwaW5nLWxpc3QnKS5NYXBwaW5nTGlzdDtcblxuICAvKipcbiAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICAgKiBiZWluZyBidWlsdCBpbmNyZW1lbnRhbGx5LiBZb3UgbWF5IHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZmlsZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpIHtcbiAgICBpZiAoIWFBcmdzKSB7XG4gICAgICBhQXJncyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gICAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICAgIHRoaXMuX3NraXBWYWxpZGF0aW9uID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdza2lwVmFsaWRhdGlvbicsIGZhbHNlKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG5ldyBNYXBwaW5nTGlzdCgpO1xuICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gIH1cblxuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgICAgdmFyIGdlbmVyYXRvciA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3Ioe1xuICAgICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgICAgfSk7XG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5ld01hcHBpbmcubmFtZSA9IG1hcHBpbmcubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0b3IuYWRkTWFwcGluZyhuZXdNYXBwaW5nKTtcbiAgICAgIH0pO1xuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gZm9yIHRoaXMgc291cmNlIG1hcCBiZWluZyBjcmVhdGVkLiBUaGUgbWFwcGluZ1xuICAgKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZ2VuZXJhdGVkOiBBbiBvYmplY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICAgKiAgIC0gbmFtZTogQW4gb3B0aW9uYWwgb3JpZ2luYWwgdG9rZW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYWRkTWFwcGluZyhhQXJncykge1xuICAgICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNYXBwaW5nKGdlbmVyYXRlZCwgb3JpZ2luYWwsIHNvdXJjZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiAhdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgICB2YXIgc291cmNlID0gYVNvdXJjZUZpbGU7XG4gICAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBfc291cmNlc0NvbnRlbnRzIG1hcCBpZiB0aGUgcHJvcGVydHkgaXMgbnVsbC5cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXSA9IGFTb3VyY2VDb250ZW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgICAgLy8gSWYgdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwIGlzIGVtcHR5LCBzZXQgdGhlIHByb3BlcnR5IHRvIG51bGwuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gICAqIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkLiBFYWNoIG1hcHBpbmcgdG8gdGhlIHN1cHBsaWVkIHNvdXJjZSBmaWxlIGlzXG4gICAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICAgKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gICAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAgICogICAgICAgIElmIG9taXR0ZWQsIFNvdXJjZU1hcENvbnN1bWVyJ3MgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAgICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBuZWVkZWQgd2hlbiB0aGUgdHdvIHNvdXJjZSBtYXBzIGFyZW4ndCBpbiB0aGUgc2FtZVxuICAgKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAgICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAqICAgICAgICByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FwcGx5U291cmNlTWFwKGFTb3VyY2VNYXBDb25zdW1lciwgYVNvdXJjZUZpbGUsIGFTb3VyY2VNYXBQYXRoKSB7XG4gICAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgICAgaWYgKGFTb3VyY2VGaWxlID09IG51bGwpIHtcbiAgICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsICcgK1xuICAgICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgICAgfVxuICAgICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgICAvLyB0aGUgbmFtZXMgYXJyYXkuXG4gICAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAgIC8vIEZpbmQgbWFwcGluZ3MgZm9yIHRoZSBcInNvdXJjZUZpbGVcIlxuICAgICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgY2FuIGJlIG1hcHBlZCBieSB0aGUgc291cmNlIG1hcCwgdGhlbiB1cGRhdGUgdGhlIG1hcHBpbmcuXG4gICAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIENvcHkgbWFwcGluZ1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gb3JpZ2luYWwuY29sdW1uO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBuZXdOYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSwgdGhpcyk7XG4gICAgICB0aGlzLl9zb3VyY2VzID0gbmV3U291cmNlcztcbiAgICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAgICpcbiAgICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgMy4gR2VuZXJhdGVkIGFuZCBvcmlnaW5hbCBwb3NpdGlvbiwgb3JpZ2luYWwgc291cmNlLCBhcyB3ZWxsIGFzIGEgbmFtZVxuICAgKiAgICAgIHRva2VuLlxuICAgKlxuICAgKiBUbyBtYWludGFpbiBjb25zaXN0ZW5jeSwgd2UgdmFsaWRhdGUgdGhhdCBhbnkgbmV3IG1hcHBpbmcgYmVpbmcgYWRkZWQgZmFsbHNcbiAgICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmcgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAmJiAhYU9yaWdpbmFsICYmICFhU291cmNlICYmICFhTmFtZSkge1xuICAgICAgICAvLyBDYXNlIDEuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgICAgLy8gQ2FzZXMgMiBhbmQgMy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgICBzb3VyY2U6IGFTb3VyY2UsXG4gICAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICAgKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbWFwcGluZztcbiAgICAgIHZhciBuYW1lSWR4O1xuICAgICAgdmFyIHNvdXJjZUlkeDtcblxuICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nc1tpXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJzsnO1xuICAgICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJywnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShzb3VyY2VJZHggLSBwcmV2aW91c1NvdXJjZSk7XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDE7XG5cbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsQ29sdW1uKTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbmFtZUlkeCA9IHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lID0gbmFtZUlkeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgICAgcmV0dXJuIGFTb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSlcbiAgICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAvKipcbiAgICogRXh0ZXJuYWxpemUgdGhlIHNvdXJjZSBtYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvSlNPTigpIHtcbiAgICAgIHZhciBtYXAgPSB7XG4gICAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHNvdXJjZXM6IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH07XG5cbiAgZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4gKiogbW9kdWxlIGlkID0gM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xue1xuICB2YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuICAvLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbiAgLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4gIC8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuICAvLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4gIC8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuICAvL1xuICAvLyAgIENvbnRpbnVhdGlvblxuICAvLyAgIHwgICAgU2lnblxuICAvLyAgIHwgICAgfFxuICAvLyAgIFYgICAgVlxuICAvLyAgIDEwMTAxMVxuXG4gIHZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbiAgLy8gYmluYXJ5OiAxMDAwMDBcbiAgdmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuICAvLyBiaW5hcnk6IDAxMTExMVxuICB2YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuICAvLyBiaW5hcnk6IDEwMDAwMFxuICB2YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuICAvKipcbiAgICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gICAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICAgKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAgICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAgICovXG4gIGZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHJldHVybiBhVmFsdWUgPCAwXG4gICAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICAgKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAgICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gICAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gICAqL1xuICBmdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICAgIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gICAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICAgID8gLXNoaWZ0ZWRcbiAgICAgIDogc2hpZnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICAgKi9cbiAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICAgIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICAgIGRvIHtcbiAgICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgICAgaWYgKHZscSA+IDApIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgICB9XG4gICAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICAgIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gICAgcmV0dXJuIGVuY29kZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICAgKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBleHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIHNoaWZ0ID0gMDtcbiAgICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICAgIGRvIHtcbiAgICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICAgIH1cblxuICAgICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gICAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICAgIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9iYXNlNjQtdmxxLmpzXG4gKiogbW9kdWxlIGlkID0gNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICB2YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuICAvKipcbiAgICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAgICovXG4gIGV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICAgIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbiAgfTtcblxuICAvKipcbiAgICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICAgKiBmYWlsdXJlLlxuICAgKi9cbiAgZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gICAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gICAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICAgIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICAgIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gICAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gICAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICAgIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAgIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gICAgfVxuXG4gICAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICAgIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyA2MjogK1xuICAgIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgICByZXR1cm4gNjI7XG4gICAgfVxuXG4gICAgLy8gNjM6IC9cbiAgICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICAgIHJldHVybiA2MztcbiAgICB9XG5cbiAgICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgICByZXR1cm4gLTE7XG4gIH07XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL2Jhc2U2NC5qc1xuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gICAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICAgKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gICAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAgICovXG4gIGZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc2V0ID0ge307XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqL1xuICBBcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldDtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAgICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gICAqXG4gICAqIEByZXR1cm5zIE51bWJlclxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKTtcbiAgICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICAgIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgICB9XG4gICAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgaWYgKHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAgICpcbiAgICogQHBhcmFtIE51bWJlciBhSWR4XG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gICAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAgICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAgICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAgICovXG4gIEFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbiAgfTtcblxuICBleHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL2FycmF5LXNldC5qc1xuICoqIG1vZHVsZSBpZCA9IDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxNCBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICAgKiBwb3NpdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gICAgLy8gT3B0aW1pemVkIGZvciBtb3N0IGNvbW1vbiBjYXNlXG4gICAgdmFyIGxpbmVBID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZTtcbiAgICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICAgIHZhciBjb2x1bW5BID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHZhciBjb2x1bW5CID0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikgPD0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGRhdGEgc3RydWN0dXJlIHRvIHByb3ZpZGUgYSBzb3J0ZWQgdmlldyBvZiBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiBhXG4gICAqIHBlcmZvcm1hbmNlIGNvbnNjaW91cyBtYW5uZXIuIEl0IHRyYWRlcyBhIG5lZ2xpYmFibGUgb3ZlcmhlYWQgaW4gZ2VuZXJhbFxuICAgKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAgICovXG4gIGZ1bmN0aW9uIE1hcHBpbmdMaXN0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgICAvLyBTZXJ2ZXMgYXMgaW5maW11bVxuICAgIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICAgKiBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIHRha2VzLlxuICAgKlxuICAgKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICAgKi9cbiAgTWFwcGluZ0xpc3QucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaCA9XG4gICAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgICB0aGlzLl9hcnJheS5mb3JFYWNoKGFDYWxsYmFjaywgYVRoaXNBcmcpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gc291cmNlIG1hcHBpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF9hZGQoYU1hcHBpbmcpIHtcbiAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICAgIHRoaXMuX2xhc3QgPSBhTWFwcGluZztcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICAgKiBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICAgKiBwZXJmb3JtYW5jZS4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IE5PVCBiZSBtdXRhdGVkLCBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXNcbiAgICogYW4gaW1tdXRhYmxlIGJvcnJvdy4gSWYgeW91IHdhbnQgdG8gdGFrZSBvd25lcnNoaXAsIHlvdSBtdXN0IG1ha2UgeW91ciBvd25cbiAgICogY29weS5cbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gTWFwcGluZ0xpc3RfdG9BcnJheSgpIHtcbiAgICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgICAgdGhpcy5fYXJyYXkuc29ydCh1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKTtcbiAgICAgIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcnJheTtcbiAgfTtcblxuICBleHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL21hcHBpbmctbGlzdC5qc1xuICoqIG1vZHVsZSBpZCA9IDdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xuICB2YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xuICB2YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG4gIHZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xuICB9XG5cbiAgU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbiAgLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbiAgLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbiAgLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gIC8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuICAvLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbiAgLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4gIC8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbiAgLy9cbiAgLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbiAgLy9cbiAgLy8gICAgIHtcbiAgLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbiAgLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gIC8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbiAgLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbiAgLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4gIC8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4gIC8vICAgICAgICAgICAgIGNvZGUuXG4gIC8vICAgICB9XG4gIC8vXG4gIC8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbiAgLy8gYG51bGxgLlxuICAvL1xuICAvLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuICAvL1xuICAvLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgIH1cbiAgfSk7XG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICAgIH1cbiAgfSk7XG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gICAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICAgKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICAgIH07XG5cbiAgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcbiAgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG4gIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbiAgU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gICAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAgICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICAgKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gICAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICAgKiBAcGFyYW0gYU9yZGVyXG4gICAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAgICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gICAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICAgKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gICAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgICB2YXIgbWFwcGluZ3M7XG4gICAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gICAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAgICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICAgKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAgICpcbiAgICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwcGluZ3M7XG4gICAgfTtcblxuICBleHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gICAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICAgKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICpcbiAgICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gICAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAgICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gICAqXG4gICAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICAgKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICAgKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICAgKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAgICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAgICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqXG4gICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gICAqXG4gICAqICAgICB7XG4gICAqICAgICAgIHZlcnNpb24gOiAzLFxuICAgKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICAgKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAgICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAgICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gICAqICAgICB9XG4gICAqXG4gICAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICAgKi9cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gICAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gICAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gICAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICAgIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gICAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICAgIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICAgIH1cblxuICAgIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgICAgOiBzb3VyY2U7XG4gICAgICB9KTtcblxuICAgIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAgIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gICAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMsIHRydWUpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gIH1cblxuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAgICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAgICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICAgIHJldHVybiBzbWM7XG4gICAgfTtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICAgKi9cbiAgZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICAgIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICAgIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMubmFtZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICAgKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAgICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICAgIHZhciB0ZW1wID0ge307XG4gICAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICAgKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gICAgfTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICAgKiBpbmNsdXNpdmUuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICAgKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICAgKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gICAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICAgIG5lZWRsZSxcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAgICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gICAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsaWJsZS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgICB9XG5cbiAgICAgIHZhciB1cmw7XG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAgICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAgICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICAgIG5lZWRsZSxcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAgICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAgICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gICAqIGlucHV0LlxuICAgKlxuICAgKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAgICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICAgKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAgICpcbiAgICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gICAqXG4gICAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAgICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gICAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gICAqICAgICAgIGZpZWxkLlxuICAgKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAgICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAgICpcbiAgICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gICAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gICAqIHVuc3VwcG9ydGVkLlxuICAgKlxuICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICAgKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICAgKlxuICAgKiAge1xuICAgKiAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgZmlsZTogXCJhcHAuanNcIixcbiAgICogICAgc2VjdGlvbnM6IFt7XG4gICAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gICAqICAgICAgbWFwOiB7XG4gICAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICAgKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gICAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gICAqICAgICAgfVxuICAgKiAgICB9XSxcbiAgICogIH1cbiAgICpcbiAgICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICAgKi9cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICAgIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICAgIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgICAgbGluZTogLTEsXG4gICAgICBjb2x1bW46IDBcbiAgICB9O1xuICAgIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICBpZiAocy51cmwpIHtcbiAgICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgICB9XG4gICAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgICB9LFxuICAgICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3VyY2VzO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgIH0pO1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgICAgbmFtZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICA6IDApLFxuICAgICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAgICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsYWJsZS5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gICAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAgICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gICAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICAgIDogMClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAgICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gICAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3NbaV07XG5cbiAgICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuY29sdW1uICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSlcbiAgICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzXG4gKiogbW9kdWxlIGlkID0gOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbiAgZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICAgKlxuICAgKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gICAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICAgKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAgICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAgICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy9cbiAgICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIC8vXG4gICAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAgIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAgIC8vXG4gICAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gICAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAgICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAgICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICAgKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICAgKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gICAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gICAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAgICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAgICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gICAqL1xuICBleHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAgIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gICAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAgIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAtLWluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuICoqIG1vZHVsZSBpZCA9IDlcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3RcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbiAgLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbiAgLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4gIC8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbiAgLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbiAgLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2ZcbiAgLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbiAgLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4gIC8qKlxuICAgKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gICAqICAgICAgICBUaGUgYXJyYXkuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gICAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gICAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgICBhcnlbeF0gPSBhcnlbeV07XG4gICAgYXJ5W3ldID0gdGVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICAgKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAgICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gICAqL1xuICBmdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAgICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAgICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAgICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICAgKiBAcGFyYW0ge051bWJlcn0gclxuICAgKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICAgKi9cbiAgZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gICAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gICAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAgIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICAgIGlmIChwIDwgcikge1xuICAgICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgICAgdmFyIGkgPSBwIC0gMTtcblxuICAgICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAgIC8vIHRydWU6XG4gICAgICAvL1xuICAgICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgICAgLy9cbiAgICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgICAgdmFyIHEgPSBpICsgMTtcblxuICAgICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAgICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAgICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAgICovXG4gIGV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9xdWljay1zb3J0LmpzXG4gKiogbW9kdWxlIGlkID0gMTBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIFNvdXJjZU1hcEdlbmVyYXRvciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG4gIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiAgLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbiAgLy8gb3BlcmF0aW5nIHN5c3RlbXMgdGhlc2UgZGF5cyAoY2FwdHVyaW5nIHRoZSByZXN1bHQpLlxuICB2YXIgUkVHRVhfTkVXTElORSA9IC8oXFxyP1xcbikvO1xuXG4gIC8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xuICB2YXIgTkVXTElORV9DT0RFID0gMTA7XG5cbiAgLy8gUHJpdmF0ZSBzeW1ib2wgZm9yIGlkZW50aWZ5aW5nIGBTb3VyY2VOb2RlYHMgd2hlbiBtdWx0aXBsZSB2ZXJzaW9ucyBvZlxuICAvLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuICAvLyB2ZXJzaW9ucyFcbiAgdmFyIGlzU291cmNlTm9kZSA9IFwiJCQkaXNTb3VyY2VOb2RlJCQkXCI7XG5cbiAgLyoqXG4gICAqIFNvdXJjZU5vZGVzIHByb3ZpZGUgYSB3YXkgdG8gYWJzdHJhY3Qgb3ZlciBpbnRlcnBvbGF0aW5nL2NvbmNhdGVuYXRpbmdcbiAgICogc25pcHBldHMgb2YgZ2VuZXJhdGVkIEphdmFTY3JpcHQgc291cmNlIGNvZGUgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGxpbmUgYW5kXG4gICAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gYUxpbmUgVGhlIG9yaWdpbmFsIGxpbmUgbnVtYmVyLlxuICAgKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAgICogQHBhcmFtIGFTb3VyY2UgVGhlIG9yaWdpbmFsIHNvdXJjZSdzIGZpbGVuYW1lLlxuICAgKiBAcGFyYW0gYUNodW5rcyBPcHRpb25hbC4gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGljaCBhcmUgc25pcHBldHMgb2ZcbiAgICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gICAqIEBwYXJhbSBhTmFtZSBUaGUgb3JpZ2luYWwgaWRlbnRpZmllci5cbiAgICovXG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuc291cmNlQ29udGVudHMgPSB7fTtcbiAgICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICAgIHRoaXMuY29sdW1uID0gYUNvbHVtbiA9PSBudWxsID8gbnVsbCA6IGFDb2x1bW47XG4gICAgdGhpcy5zb3VyY2UgPSBhU291cmNlID09IG51bGwgPyBudWxsIDogYVNvdXJjZTtcbiAgICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICAgIHRoaXNbaXNTb3VyY2VOb2RlXSA9IHRydWU7XG4gICAgaWYgKGFDaHVua3MgIT0gbnVsbCkgdGhpcy5hZGQoYUNodW5rcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNvdXJjZU5vZGUgZnJvbSBnZW5lcmF0ZWQgY29kZSBhbmQgYSBTb3VyY2VNYXBDb25zdW1lci5cbiAgICpcbiAgICogQHBhcmFtIGFHZW5lcmF0ZWRDb2RlIFRoZSBnZW5lcmF0ZWQgY29kZVxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICAgKiAgICAgICAgU291cmNlTWFwQ29uc3VtZXIgc2hvdWxkIGJlIHJlbGF0aXZlIHRvLlxuICAgKi9cbiAgU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTm9kZV9mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChhR2VuZXJhdGVkQ29kZSwgYVNvdXJjZU1hcENvbnN1bWVyLCBhUmVsYXRpdmVQYXRoKSB7XG4gICAgICAvLyBUaGUgU291cmNlTm9kZSB3ZSB3YW50IHRvIGZpbGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvZGVcbiAgICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgICB2YXIgbm9kZSA9IG5ldyBTb3VyY2VOb2RlKCk7XG5cbiAgICAgIC8vIEFsbCBldmVuIGluZGljZXMgb2YgdGhpcyBhcnJheSBhcmUgb25lIGxpbmUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLFxuICAgICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAgIC8vIChzaW5jZSBgUkVHRVhfTkVXTElORWAgY2FwdHVyZXMgaXRzIG1hdGNoKS5cbiAgICAgIC8vIFByb2Nlc3NlZCBmcmFnbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGlzIGFycmF5LCBieSBjYWxsaW5nIGBzaGlmdE5leHRMaW5lYC5cbiAgICAgIHZhciByZW1haW5pbmdMaW5lcyA9IGFHZW5lcmF0ZWRDb2RlLnNwbGl0KFJFR0VYX05FV0xJTkUpO1xuICAgICAgdmFyIHNoaWZ0TmV4dExpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpbmVDb250ZW50cyA9IHJlbWFpbmluZ0xpbmVzLnNoaWZ0KCk7XG4gICAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgICAgdmFyIG5ld0xpbmUgPSByZW1haW5pbmdMaW5lcy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgICAgIHJldHVybiBsaW5lQ29udGVudHMgKyBuZXdMaW5lO1xuICAgICAgfTtcblxuICAgICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGUgcG9zaXRpb24gb2YgXCJyZW1haW5pbmdMaW5lc1wiXG4gICAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgICAgLy8gVGhlIGdlbmVyYXRlIFNvdXJjZU5vZGVzIHdlIG5lZWQgYSBjb2RlIHJhbmdlLlxuICAgICAgLy8gVG8gZXh0cmFjdCBpdCBjdXJyZW50IGFuZCBsYXN0IG1hcHBpbmcgaXMgdXNlZC5cbiAgICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICAgIHZhciBsYXN0TWFwcGluZyA9IG51bGw7XG5cbiAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBhZGQgdGhlIGNvZGUgZnJvbSBcImxhc3RNYXBwaW5nXCIgdG8gXCJtYXBwaW5nXCI6XG4gICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBuZXcgbGluZSBpbiBiZXR3ZWVuLlxuICAgICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgICAgdmFyIGNvZGUgPSBcIlwiO1xuICAgICAgICAgICAgLy8gQXNzb2NpYXRlIGZpcnN0IGxpbmUgd2l0aCBcImxhc3RNYXBwaW5nXCJcbiAgICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgICAgIC8vIFRoZSByZW1haW5pbmcgY29kZSBpcyBhZGRlZCB3aXRob3V0IG1hcHBpbmdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmV3IGxpbmUgaW4gYmV0d2Vlbi5cbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgY29kZSBiZXR3ZWVuIFwibGFzdEdlbmVyYXRlZENvbHVtblwiIGFuZFxuICAgICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgICB2YXIgbmV4dExpbmUgPSByZW1haW5pbmdMaW5lc1swXTtcbiAgICAgICAgICAgIHZhciBjb2RlID0gbmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgICAgcmVtYWluaW5nTGluZXNbMF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIGNvZGUpO1xuICAgICAgICAgICAgLy8gTm8gbW9yZSByZW1haW5pbmcgY29kZSwgY29udGludWVcbiAgICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgYWRkIHRoZSBnZW5lcmF0ZWQgY29kZSB1bnRpbCB0aGUgZmlyc3QgbWFwcGluZ1xuICAgICAgICAvLyB0byB0aGUgU291cmNlTm9kZSB3aXRob3V0IGFueSBtYXBwaW5nLlxuICAgICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgICB3aGlsZSAobGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBub2RlLmFkZChzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RHZW5lcmF0ZWRDb2x1bW4gPCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikge1xuICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzWzBdO1xuICAgICAgICAgIG5vZGUuYWRkKG5leHRMaW5lLnN1YnN0cigwLCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikpO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzWzBdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgbGFzdE1hcHBpbmcgPSBtYXBwaW5nO1xuICAgICAgfSwgdGhpcyk7XG4gICAgICAvLyBXZSBoYXZlIHByb2Nlc3NlZCBhbGwgbWFwcGluZ3MuXG4gICAgICBpZiAocmVtYWluaW5nTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIHJlbWFpbmluZyBjb2RlIGluIHRoZSBjdXJyZW50IGxpbmUgd2l0aCBcImxhc3RNYXBwaW5nXCJcbiAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW5kIGFkZCB0aGUgcmVtYWluaW5nIGxpbmVzIHdpdGhvdXQgYW55IG1hcHBpbmdcbiAgICAgICAgbm9kZS5hZGQocmVtYWluaW5nTGluZXMuam9pbihcIlwiKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnQgaW50byBTb3VyY2VOb2RlXG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5qb2luKGFSZWxhdGl2ZVBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ1dpdGhDb2RlKG1hcHBpbmcsIGNvZGUpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcgPT09IG51bGwgfHwgbWFwcGluZy5zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzb3VyY2UgPSBhUmVsYXRpdmVQYXRoXG4gICAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICAgIDogbWFwcGluZy5zb3VyY2U7XG4gICAgICAgICAgbm9kZS5hZGQobmV3IFNvdXJjZU5vZGUobWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGlzIHNvdXJjZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAgICogICAgICAgIFNvdXJjZU5vZGUsIG9yIGFuIGFycmF5IHdoZXJlIGVhY2ggbWVtYmVyIGlzIG9uZSBvZiB0aG9zZSB0aGluZ3MuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2FkZChhQ2h1bmspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgdGhpcy5hZGQoY2h1bmspO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFDaHVua1tpc1NvdXJjZU5vZGVdIHx8IHR5cGVvZiBhQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChhQ2h1bmspIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIiArIGFDaHVua1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc291cmNlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25pcHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwgYW5vdGhlciBpbnN0YW5jZSBvZlxuICAgKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3ByZXBlbmQoYUNodW5rKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYUNodW5rKSkge1xuICAgICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy5wcmVwZW5kKGFDaHVua1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGFDaHVua1tpc1NvdXJjZU5vZGVdIHx8IHR5cGVvZiBhQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChhQ2h1bmspO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICAgKiB3YWxraW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHNuaXBwZXQgb2YgSlMgYW5kIGlzIHBhc3NlZCB0aGF0XG4gICAqIHNuaXBwZXQgYW5kIHRoZSBpdHMgb3JpZ2luYWwgYXNzb2NpYXRlZCBzb3VyY2UncyBsaW5lL2NvbHVtbiBsb2NhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGFGbiBUaGUgdHJhdmVyc2FsIGZ1bmN0aW9uLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgICB2YXIgY2h1bms7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChjaHVua1tpc1NvdXJjZU5vZGVdKSB7XG4gICAgICAgIGNodW5rLndhbGsoYUZuKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoY2h1bmsgIT09ICcnKSB7XG4gICAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAgICogZWFjaCBvZiBgdGhpcy5jaGlsZHJlbmAuXG4gICAqXG4gICAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gU291cmNlTm9kZV9qb2luKGFTZXApIHtcbiAgICB2YXIgbmV3Q2hpbGRyZW47XG4gICAgdmFyIGk7XG4gICAgdmFyIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICBuZXdDaGlsZHJlbiA9IFtdO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbi0xOyBpKyspIHtcbiAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaChhU2VwKTtcbiAgICAgIH1cbiAgICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAgICogZm9yIHRyaW1taW5nIHdoaXRlc3BhY2UgZnJvbSB0aGUgZW5kIG9mIGEgc291cmNlIG5vZGUsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gICAqIEBwYXJhbSBhUmVwbGFjZW1lbnQgVGhlIHRoaW5nIHRvIHJlcGxhY2UgdGhlIHBhdHRlcm4gd2l0aC5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0Q2hpbGRbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxhc3RDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yXG4gICAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGFTb3VyY2VGaWxlIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGVcbiAgICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2VDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKGFTb3VyY2VGaWxlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgU291cmNlTm9kZXMuIFRoZSB3YWxraW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaFxuICAgKiBzb3VyY2UgZmlsZSBjb250ZW50IGFuZCBpcyBwYXNzZWQgdGhlIGZpbGVuYW1lIGFuZCBzb3VyY2UgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIGFGbiBUaGUgdHJhdmVyc2FsIGZ1bmN0aW9uLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VOb2RlX3dhbGtTb3VyY2VDb250ZW50cyhhRm4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLndhbGtTb3VyY2VDb250ZW50cyhhRm4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VzID0gT2JqZWN0LmtleXModGhpcy5zb3VyY2VDb250ZW50cyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc291cmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlLiBXYWxrcyBvdmVyIHRoZSB0cmVlXG4gICAqIGFuZCBjb25jYXRlbmF0ZXMgYWxsIHRoZSB2YXJpb3VzIHNuaXBwZXRzIHRvZ2V0aGVyIHRvIG9uZSBzdHJpbmcuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfdG9TdHJpbmcoKSB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgc3RyICs9IGNodW5rO1xuICAgIH0pO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAgICogbWFwLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0ge1xuICAgICAgY29kZTogXCJcIixcbiAgICAgIGxpbmU6IDEsXG4gICAgICBjb2x1bW46IDBcbiAgICB9O1xuICAgIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgICB2YXIgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHZhciBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgICB2YXIgbGFzdE9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgICB2YXIgbGFzdE9yaWdpbmFsTmFtZSA9IG51bGw7XG4gICAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICAgIGdlbmVyYXRlZC5jb2RlICs9IGNodW5rO1xuICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPT0gbnVsbFxuICAgICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgICAmJiBvcmlnaW5hbC5jb2x1bW4gIT09IG51bGwpIHtcbiAgICAgICAgaWYobGFzdE9yaWdpbmFsU291cmNlICE9PSBvcmlnaW5hbC5zb3VyY2VcbiAgICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgICB8fCBsYXN0T3JpZ2luYWxDb2x1bW4gIT09IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICB8fCBsYXN0T3JpZ2luYWxOYW1lICE9PSBvcmlnaW5hbC5uYW1lKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgbGFzdE9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgbGFzdE9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsLm5hbWU7XG4gICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gbnVsbDtcbiAgICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaWR4ID0gMCwgbGVuZ3RoID0gY2h1bmsubGVuZ3RoOyBpZHggPCBsZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGlmIChjaHVuay5jaGFyQ29kZUF0KGlkeCkgPT09IE5FV0xJTkVfQ09ERSkge1xuICAgICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgICAgZ2VuZXJhdGVkLmNvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gTWFwcGluZ3MgZW5kIGF0IGVvbFxuICAgICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IG9yaWdpbmFsLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbiAoc291cmNlRmlsZSwgc291cmNlQ29udGVudCkge1xuICAgICAgbWFwLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgc291cmNlQ29udGVudCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBjb2RlOiBnZW5lcmF0ZWQuY29kZSwgbWFwOiBtYXAgfTtcbiAgfTtcblxuICBleHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9zb3VyY2Utbm9kZS5qc1xuICoqIG1vZHVsZSBpZCA9IDExXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9