From 900cf18f46c751ae344ccf44c0f8b3f649fc9b17 Mon Sep 17 00:00:00 2001 From: Muhammad Nauman Raza Date: Sat, 23 Mar 2024 20:13:27 +0000 Subject: [PATCH] chore: remove extra platforms Former-commit-id: 694fbd23b097e1ff1f72875fa27da2dd070d195d Former-commit-id: 64da130bc04b6e9a766f2491e6f7e7c4169f1e1b --- Cargo.lock | 424 +- Cargo.toml | 3 - arm7tdmi/examples/simple_emulator.rs | 129 - arm7tdmi/examples/test_program/.gitignore | 2 - arm7tdmi/examples/test_program/Makefile | 37 - arm7tdmi/examples/test_program/reset.s | 40 - arm7tdmi/examples/test_program/test.bin | Bin 432 -> 0 bytes arm7tdmi/examples/test_program/test.c | 17 - arm7tdmi/examples/test_program/test.elf | Bin 68996 -> 0 bytes arm7tdmi/examples/test_program/test.ld | 32 - arm7tdmi/examples/test_program/test.map | 162 - media/screenshot1.png | Bin 21913 -> 0 bytes media/screenshot2.png | Bin 137580 -> 0 bytes media/screenshot3.png | Bin 155175 -> 0 bytes platform/android/.gitignore | 14 - platform/android/.idea/.name | 1 - platform/android/.idea/codeStyles/Project.xml | 116 - platform/android/.idea/gradle.xml | 20 - platform/android/.idea/misc.xml | 9 - platform/android/.idea/runConfigurations.xml | 12 - platform/android/.idea/vcs.xml | 7 - platform/android/README.md | 3 - platform/android/app/.gitignore | 1 - platform/android/app/build.gradle | 59 - platform/android/app/proguard-rules.pro | 21 - .../ExampleInstrumentedTest.java | 27 - .../android/app/src/main/AndroidManifest.xml | 55 - .../android/app/src/main/ic_launcher-web.png | Bin 40429 -> 0 bytes .../rustboyadvance/EmulatorBindings.java | 123 - .../mrmichel/rustboyadvance/IAudioPlayer.java | 15 - .../rustboyadvance/IFrameRenderer.java | 5 - .../com/mrmichel/rustboyadvance/Keypad.java | 44 - .../mrmichel/rustboyadvance/RomHelper.java | 12 - .../java/com/mrmichel/rustdroid_emu/Util.java | 164 - .../core/AndroidAudioPlayer.java | 89 - .../mrmichel/rustdroid_emu/core/Emulator.java | 127 - .../rustdroid_emu/core/RomManager.java | 321 - .../mrmichel/rustdroid_emu/core/Snapshot.java | 55 - .../rustdroid_emu/core/SnapshotManager.java | 169 - .../rustdroid_emu/ui/EmulationThread.java | 49 - .../rustdroid_emu/ui/EmulatorActivity.java | 573 -- .../rustdroid_emu/ui/ScreenRenderer.java | 265 - .../mrmichel/rustdroid_emu/ui/ScreenView.java | 55 - .../rustdroid_emu/ui/SettingsActivity.java | 33 - .../rustdroid_emu/ui/SettingsFragment.java | 17 - .../rustdroid_emu/ui/SplashActivity.java | 148 - .../ui/library/RomListActivity.java | 261 - .../ui/library/RomListItemAdapter.java | 61 - .../ui/snapshots/ISnapshotListener.java | 8 - .../ui/snapshots/SnapshotItemAdapter.java | 63 - .../ui/snapshots/SnapshotListFragment.java | 116 - .../ui/snapshots/SnapshotPickerActivity.java | 39 - .../app/src/main/res/drawable/dpad.png | Bin 3795 -> 0 bytes .../src/main/res/drawable/round_button.xml | 5 - .../res/layout-land/activity_emulator.xml | 18 - .../main/res/layout-land/content_emulator.xml | 123 - .../src/main/res/layout/activity_emulator.xml | 18 - .../src/main/res/layout/activity_rom_list.xml | 47 - .../src/main/res/layout/activity_settings.xml | 9 - .../src/main/res/layout/content_emulator.xml | 124 - .../src/main/res/layout/content_rom_list.xml | 19 - .../android/app/src/main/res/layout/dpad.xml | 58 - .../app/src/main/res/layout/rom_item.xml | 38 - .../app/src/main/res/layout/snapshot_item.xml | 39 - .../res/layout/snapshot_list_fragment.xml | 42 - .../res/layout/snapshot_picker_activity.xml | 7 - .../src/main/res/layout/splash_activity.xml | 25 - .../src/main/res/menu/menu_context_rom.xml | 41 - .../main/res/menu/menu_context_snapshot.xml | 12 - .../app/src/main/res/menu/menu_emulator.xml | 45 - .../app/src/main/res/menu/menu_rom_list.xml | 17 - .../app/src/main/res/menu/menu_snapshot.xml | 10 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2840 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 6187 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 4836 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 3801 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 6759 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 8669 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 11073 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 14287 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 15404 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 20735 -> 0 bytes ...ture_color_correction_fragment_shader.glsl | 21 - .../raw/screen_texture_fragment_shader.glsl | 8 - .../res/raw/screen_texture_vertex_shader.glsl | 8 - .../app/src/main/res/values/colors.xml | 7 - .../app/src/main/res/values/dimens.xml | 5 - .../res/values/ic_launcher_background.xml | 4 - .../app/src/main/res/values/strings.xml | 25 - .../app/src/main/res/values/styles.xml | 20 - .../app/src/main/res/xml/app_preferences.xml | 18 - .../app/src/main/res/xml/provider_paths.xml | 4 - .../rustdroid_emu/ExampleUnitTest.java | 17 - platform/android/build.gradle | 31 - platform/android/gradle.properties | 20 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - platform/android/gradlew | 172 - platform/android/gradlew.bat | 84 - platform/android/settings.gradle | 2 - platform/rustboyadvance-jni/Cargo.toml | 22 - .../rustboyadvance-jni/src/audio/connector.rs | 129 - platform/rustboyadvance-jni/src/audio/mod.rs | 40 - .../rustboyadvance-jni/src/audio/thread.rs | 69 - platform/rustboyadvance-jni/src/emulator.rs | 382 - platform/rustboyadvance-jni/src/lib.rs | 296 - platform/rustboyadvance-jni/src/rom_helper.rs | 34 - platform/rustboyadvance-libretro/Cargo.toml | 24 - platform/rustboyadvance-libretro/README.md | 22 - platform/rustboyadvance-libretro/src/lib.rs | 173 - platform/rustboyadvance-minifb/Cargo.toml | 11 - platform/rustboyadvance-minifb/DEPRECATED | 0 platform/rustboyadvance-minifb/src/cli.yml | 32 - platform/rustboyadvance-minifb/src/main.rs | 142 - platform/rustboyadvance-wasm/.appveyor.yml | 11 - platform/rustboyadvance-wasm/.cargo-ok | 0 platform/rustboyadvance-wasm/.gitignore | 6 - platform/rustboyadvance-wasm/.travis.yml | 69 - platform/rustboyadvance-wasm/Cargo.toml | 55 - platform/rustboyadvance-wasm/LICENSE_APACHE | 176 - platform/rustboyadvance-wasm/LICENSE_MIT | 25 - platform/rustboyadvance-wasm/README.md | 69 - .../app/.bin/create-wasm-app.js | 24 - platform/rustboyadvance-wasm/app/.gitignore | 2 - platform/rustboyadvance-wasm/app/.travis.yml | 5 - .../rustboyadvance-wasm/app/LICENSE-APACHE | 201 - platform/rustboyadvance-wasm/app/LICENSE-MIT | 25 - platform/rustboyadvance-wasm/app/bootstrap.js | 5 - platform/rustboyadvance-wasm/app/index.html | 163 - platform/rustboyadvance-wasm/app/index.js | 236 - .../rustboyadvance-wasm/app/package-lock.json | 8390 ----------------- platform/rustboyadvance-wasm/app/package.json | 26 - .../rustboyadvance-wasm/app/webpack.config.js | 34 - .../rustboyadvance-wasm/package-lock.json | 3 - platform/rustboyadvance-wasm/src/emulator.rs | 125 - platform/rustboyadvance-wasm/src/lib.rs | 59 - platform/rustboyadvance-wasm/src/utils.rs | 10 - platform/rustboyadvance-wasm/tests/web.rs | 13 - utils/Cargo.toml | 3 - utils/src/lib.rs | 9 - 142 files changed, 25 insertions(+), 16257 deletions(-) delete mode 100644 arm7tdmi/examples/simple_emulator.rs delete mode 100644 arm7tdmi/examples/test_program/.gitignore delete mode 100644 arm7tdmi/examples/test_program/Makefile delete mode 100644 arm7tdmi/examples/test_program/reset.s delete mode 100644 arm7tdmi/examples/test_program/test.bin delete mode 100644 arm7tdmi/examples/test_program/test.c delete mode 100644 arm7tdmi/examples/test_program/test.elf delete mode 100644 arm7tdmi/examples/test_program/test.ld delete mode 100644 arm7tdmi/examples/test_program/test.map delete mode 100644 media/screenshot1.png delete mode 100644 media/screenshot2.png delete mode 100644 media/screenshot3.png delete mode 100644 platform/android/.gitignore delete mode 100644 platform/android/.idea/.name delete mode 100644 platform/android/.idea/codeStyles/Project.xml delete mode 100644 platform/android/.idea/gradle.xml delete mode 100644 platform/android/.idea/misc.xml delete mode 100644 platform/android/.idea/runConfigurations.xml delete mode 100644 platform/android/.idea/vcs.xml delete mode 100644 platform/android/README.md delete mode 100644 platform/android/app/.gitignore delete mode 100644 platform/android/app/build.gradle delete mode 100644 platform/android/app/proguard-rules.pro delete mode 100644 platform/android/app/src/androidTest/java/com/mrmichel/rustdroid_emu/ExampleInstrumentedTest.java delete mode 100644 platform/android/app/src/main/AndroidManifest.xml delete mode 100644 platform/android/app/src/main/ic_launcher-web.png delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustboyadvance/EmulatorBindings.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IAudioPlayer.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IFrameRenderer.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustboyadvance/Keypad.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustboyadvance/RomHelper.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/Util.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/AndroidAudioPlayer.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Emulator.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/RomManager.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Snapshot.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/SnapshotManager.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulationThread.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulatorActivity.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenRenderer.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenView.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsActivity.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsFragment.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SplashActivity.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListActivity.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListItemAdapter.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/ISnapshotListener.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotItemAdapter.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotListFragment.java delete mode 100644 platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotPickerActivity.java delete mode 100644 platform/android/app/src/main/res/drawable/dpad.png delete mode 100644 platform/android/app/src/main/res/drawable/round_button.xml delete mode 100644 platform/android/app/src/main/res/layout-land/activity_emulator.xml delete mode 100644 platform/android/app/src/main/res/layout-land/content_emulator.xml delete mode 100644 platform/android/app/src/main/res/layout/activity_emulator.xml delete mode 100644 platform/android/app/src/main/res/layout/activity_rom_list.xml delete mode 100644 platform/android/app/src/main/res/layout/activity_settings.xml delete mode 100644 platform/android/app/src/main/res/layout/content_emulator.xml delete mode 100644 platform/android/app/src/main/res/layout/content_rom_list.xml delete mode 100644 platform/android/app/src/main/res/layout/dpad.xml delete mode 100644 platform/android/app/src/main/res/layout/rom_item.xml delete mode 100644 platform/android/app/src/main/res/layout/snapshot_item.xml delete mode 100644 platform/android/app/src/main/res/layout/snapshot_list_fragment.xml delete mode 100644 platform/android/app/src/main/res/layout/snapshot_picker_activity.xml delete mode 100644 platform/android/app/src/main/res/layout/splash_activity.xml delete mode 100644 platform/android/app/src/main/res/menu/menu_context_rom.xml delete mode 100644 platform/android/app/src/main/res/menu/menu_context_snapshot.xml delete mode 100644 platform/android/app/src/main/res/menu/menu_emulator.xml delete mode 100644 platform/android/app/src/main/res/menu/menu_rom_list.xml delete mode 100644 platform/android/app/src/main/res/menu/menu_snapshot.xml delete mode 100644 platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 platform/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 platform/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 platform/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 platform/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 platform/android/app/src/main/res/raw/screen_texture_color_correction_fragment_shader.glsl delete mode 100644 platform/android/app/src/main/res/raw/screen_texture_fragment_shader.glsl delete mode 100644 platform/android/app/src/main/res/raw/screen_texture_vertex_shader.glsl delete mode 100644 platform/android/app/src/main/res/values/colors.xml delete mode 100644 platform/android/app/src/main/res/values/dimens.xml delete mode 100644 platform/android/app/src/main/res/values/ic_launcher_background.xml delete mode 100644 platform/android/app/src/main/res/values/strings.xml delete mode 100644 platform/android/app/src/main/res/values/styles.xml delete mode 100644 platform/android/app/src/main/res/xml/app_preferences.xml delete mode 100644 platform/android/app/src/main/res/xml/provider_paths.xml delete mode 100644 platform/android/app/src/test/java/com/mrmichel/rustdroid_emu/ExampleUnitTest.java delete mode 100644 platform/android/build.gradle delete mode 100644 platform/android/gradle.properties delete mode 100644 platform/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 platform/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 platform/android/gradlew delete mode 100644 platform/android/gradlew.bat delete mode 100644 platform/android/settings.gradle delete mode 100644 platform/rustboyadvance-jni/Cargo.toml delete mode 100644 platform/rustboyadvance-jni/src/audio/connector.rs delete mode 100644 platform/rustboyadvance-jni/src/audio/mod.rs delete mode 100644 platform/rustboyadvance-jni/src/audio/thread.rs delete mode 100644 platform/rustboyadvance-jni/src/emulator.rs delete mode 100644 platform/rustboyadvance-jni/src/lib.rs delete mode 100644 platform/rustboyadvance-jni/src/rom_helper.rs delete mode 100644 platform/rustboyadvance-libretro/Cargo.toml delete mode 100644 platform/rustboyadvance-libretro/README.md delete mode 100644 platform/rustboyadvance-libretro/src/lib.rs delete mode 100644 platform/rustboyadvance-minifb/Cargo.toml delete mode 100644 platform/rustboyadvance-minifb/DEPRECATED delete mode 100644 platform/rustboyadvance-minifb/src/cli.yml delete mode 100644 platform/rustboyadvance-minifb/src/main.rs delete mode 100644 platform/rustboyadvance-wasm/.appveyor.yml delete mode 100644 platform/rustboyadvance-wasm/.cargo-ok delete mode 100644 platform/rustboyadvance-wasm/.gitignore delete mode 100644 platform/rustboyadvance-wasm/.travis.yml delete mode 100644 platform/rustboyadvance-wasm/Cargo.toml delete mode 100644 platform/rustboyadvance-wasm/LICENSE_APACHE delete mode 100644 platform/rustboyadvance-wasm/LICENSE_MIT delete mode 100644 platform/rustboyadvance-wasm/README.md delete mode 100644 platform/rustboyadvance-wasm/app/.bin/create-wasm-app.js delete mode 100644 platform/rustboyadvance-wasm/app/.gitignore delete mode 100644 platform/rustboyadvance-wasm/app/.travis.yml delete mode 100644 platform/rustboyadvance-wasm/app/LICENSE-APACHE delete mode 100644 platform/rustboyadvance-wasm/app/LICENSE-MIT delete mode 100644 platform/rustboyadvance-wasm/app/bootstrap.js delete mode 100644 platform/rustboyadvance-wasm/app/index.html delete mode 100644 platform/rustboyadvance-wasm/app/index.js delete mode 100644 platform/rustboyadvance-wasm/app/package-lock.json delete mode 100644 platform/rustboyadvance-wasm/app/package.json delete mode 100644 platform/rustboyadvance-wasm/app/webpack.config.js delete mode 100644 platform/rustboyadvance-wasm/package-lock.json delete mode 100644 platform/rustboyadvance-wasm/src/emulator.rs delete mode 100644 platform/rustboyadvance-wasm/src/lib.rs delete mode 100644 platform/rustboyadvance-wasm/src/utils.rs delete mode 100644 platform/rustboyadvance-wasm/tests/web.rs diff --git a/Cargo.lock b/Cargo.lock index baf6b77..f18426f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" - [[package]] name = "adler32" version = "1.2.0" @@ -32,25 +17,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "android_liblog-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf82c031178ca72b38595a54d16df8a257df9deea7d97a8992870e5c6a738e7" -dependencies = [ - "libc", -] - -[[package]] -name = "android_log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc00e0d3a060cce3fa338f9644ce9a93901c79f5405330891aeca69c9957009a" -dependencies = [ - "android_liblog-sys", - "log 0.3.9", -] - [[package]] name = "ansi_term" version = "0.11.0" @@ -81,7 +47,7 @@ dependencies = [ "enum-primitive-derive", "gdbstub", "gdbstub_arch", - "log 0.4.11", + "log", "num", "num-traits 0.2.12", "rustboyadvance-utils", @@ -128,20 +94,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "backtrace" -version = "0.3.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1931848a574faa8f7c71a12ea00453ff5effbb5f51afe7f77d7a48cace6ac1" -dependencies = [ - "addr2line", - "cfg-if 0.1.10", - "libc", - "miniz_oxide 0.4.2", - "object", - "rustc-demangle", -] - [[package]] name = "base-x" version = "0.2.6" @@ -265,12 +217,6 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" -[[package]] -name = "bytes" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" - [[package]] name = "bytesize" version = "1.0.1" @@ -292,12 +238,6 @@ version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c" -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "0.1.10" @@ -360,27 +300,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "combine" -version = "4.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2809f67365382d65fd2b6d9c22577231b954ed27400efeafbe687bda75abcc0b" -dependencies = [ - "bytes", - "memchr", - "pin-project-lite", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" -dependencies = [ - "cfg-if 0.1.10", - "wasm-bindgen", -] - [[package]] name = "const_fn" version = "0.4.2" @@ -639,29 +558,6 @@ dependencies = [ "syn 0.11.11", ] -[[package]] -name = "env_logger" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" -dependencies = [ - "atty", - "humantime", - "log 0.4.11", - "regex", - "termcolor", -] - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "backtrace", - "version_check", -] - [[package]] name = "fake-simd" version = "0.1.2" @@ -677,7 +573,7 @@ dependencies = [ "cfg-if 0.1.10", "crc32fast", "libc", - "miniz_oxide 0.3.7", + "miniz_oxide", ] [[package]] @@ -688,7 +584,7 @@ checksum = "515fb7f6541dafe542c87c12a7ab6a52190cccb6c348b5951ef62d9978189ae8" dependencies = [ "chrono", "glob", - "log 0.4.11", + "log", "regex", "yansi", ] @@ -701,12 +597,6 @@ dependencies = [ "rustboyadvance-utils", ] -[[package]] -name = "futures" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" - [[package]] name = "fuzzy-matcher" version = "0.3.5" @@ -724,7 +614,7 @@ checksum = "32c95766e0414f8bfc1d07055574c621b67739466d6ba516c4fef8e99d30d2e6" dependencies = [ "bitflags", "cfg-if 1.0.0", - "log 0.4.11", + "log", "managed", "num-traits 0.2.12", "paste", @@ -760,12 +650,6 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1", ] -[[package]] -name = "gimli" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" - [[package]] name = "glob" version = "0.3.0" @@ -778,7 +662,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d20fd25aa456527ce4f544271ae4fea65d2eda4a6561ea56f39fb3ee4f7e3884" dependencies = [ - "log 0.4.11", + "log", "plain", "scroll", ] @@ -836,27 +720,6 @@ dependencies = [ "itertools 0.4.19", ] -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] - -[[package]] -name = "instant" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63312a18f7ea8760cdd0a7c5aac1a619752a246b833545e3e36d1f81f7cd9e66" -dependencies = [ - "cfg-if 0.1.10", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "itertools" version = "0.4.19" @@ -884,26 +747,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" -[[package]] -name = "jni" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36bcc950632e48b86da402c5c077590583da5ac0d480103611d5374e7c967a3c" -dependencies = [ - "cesu8", - "combine", - "error-chain", - "jni-sys", - "log 0.4.11", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "js-sys" version = "0.3.45" @@ -938,40 +781,12 @@ version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" -[[package]] -name = "libretro-backend" -version = "0.2.1" -source = "git+https://github.com/michelhe/libretro-backend.git?branch=rustboyadvance#cb525222a9151d10fe61fba95369ea6325dbc318" -dependencies = [ - "libc", - "libretro-sys", - "log 0.4.11", -] - -[[package]] -name = "libretro-sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "207b060b02cecbcee6df3d0f5ed38691d5c4df1379dd1acd5c49c9b25d20b439" -dependencies = [ - "libc", -] - [[package]] name = "linked-hash-map" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" -[[package]] -name = "log" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -dependencies = [ - "log 0.4.11", -] - [[package]] name = "log" version = "0.4.11" @@ -1023,12 +838,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "miniz_oxide" version = "0.3.7" @@ -1038,16 +847,6 @@ dependencies = [ "adler32", ] -[[package]] -name = "miniz_oxide" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c60c0dfe32c10b43a144bad8fc83538c52f58302c92300ea7ec7bf7b38d5a7b9" -dependencies = [ - "adler", - "autocfg", -] - [[package]] name = "nix" version = "0.18.0" @@ -1182,12 +981,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" - [[package]] name = "odds" version = "0.2.26" @@ -1218,12 +1011,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" -[[package]] -name = "pin-project-lite" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe74897791e156a0cd8cce0db31b9b2198e67877316bf3086c3acd187f719f0" - [[package]] name = "plain" version = "0.2.3" @@ -1249,7 +1036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", "version_check", @@ -1261,7 +1048,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "version_check", ] @@ -1272,15 +1059,6 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598" -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - [[package]] name = "proc-macro2" version = "1.0.23" @@ -1290,34 +1068,19 @@ dependencies = [ "unicode-xid 0.2.1", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", -] - [[package]] name = "quote" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", ] [[package]] @@ -1433,7 +1196,7 @@ dependencies = [ "hex-literal", "hexdump", "lazy_static", - "log 0.4.11", + "log", "memmem", "nom", "num", @@ -1449,32 +1212,6 @@ dependencies = [ "zip", ] -[[package]] -name = "rustboyadvance-jni" -version = "0.1.0" -dependencies = [ - "android_log", - "env_logger", - "jni", - "log 0.4.11", - "rustboyadvance-core", - "rustboyadvance-utils", -] - -[[package]] -name = "rustboyadvance-libretro" -version = "0.1.0" -dependencies = [ - "bit", - "libc", - "libretro-backend", - "libretro-sys", - "log 0.4.11", - "rustboyadvance-core", - "rustboyadvance-utils", - "unsafe_unwrap", -] - [[package]] name = "rustboyadvance-sdl2" version = "0.1.0" @@ -1482,7 +1219,7 @@ dependencies = [ "bit", "bytesize", "flexi_logger", - "log 0.4.11", + "log", "ringbuf", "rustboyadvance-core", "rustboyadvance-utils", @@ -1497,34 +1234,10 @@ name = "rustboyadvance-utils" version = "0.1.0" dependencies = [ "goblin", - "instant", - "log 0.4.11", + "log", "ringbuf", ] -[[package]] -name = "rustboyadvance-wasm" -version = "0.1.0" -dependencies = [ - "bit", - "console_error_panic_hook", - "js-sys", - "log 0.4.11", - "rustboyadvance-core", - "rustboyadvance-utils", - "wasm-bindgen", - "wasm-bindgen-console-logger", - "wasm-bindgen-test", - "web-sys", - "wee_alloc", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" - [[package]] name = "rustc_version" version = "0.2.3" @@ -1543,7 +1256,7 @@ dependencies = [ "cfg-if 0.1.10", "dirs-next", "libc", - "log 0.4.11", + "log", "memchr", "nix", "scopeguard", @@ -1568,12 +1281,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - [[package]] name = "scopeguard" version = "1.1.0" @@ -1595,7 +1302,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e367622f934864ffa1c704ba2b82280aab856e3d8213c84c5720257eb34b15b9" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", ] @@ -1662,7 +1369,7 @@ version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", ] @@ -1704,7 +1411,7 @@ checksum = "48047e77b528151aaf841a10a9025f9459da80ba820e425ff7eb005708a76dc7" dependencies = [ "atty", "colored 2.0.0", - "log 0.4.11", + "log", "time 0.3.14", "winapi", ] @@ -1715,7 +1422,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", ] @@ -1765,7 +1472,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "serde", "serde_derive", @@ -1779,7 +1486,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ "base-x", - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "serde", "serde_derive", @@ -1819,7 +1526,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck", "proc-macro-error", - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", ] @@ -1841,7 +1548,7 @@ version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "unicode-xid 0.2.1", ] @@ -1855,15 +1562,6 @@ dependencies = [ "unicode-xid 0.0.4", ] -[[package]] -name = "termcolor" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -dependencies = [ - "winapi-util", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -1888,7 +1586,7 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", ] @@ -1963,7 +1661,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "standback", "syn 1.0.42", @@ -2012,24 +1710,12 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - [[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" -[[package]] -name = "unsafe_unwrap" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1230ec65f13e0f9b28d789da20d2d419511893ea9dac2c1f4ef67b8b14e5da80" - [[package]] name = "utf8parse" version = "0.2.0" @@ -2089,36 +1775,13 @@ checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" dependencies = [ "bumpalo", "lazy_static", - "log 0.4.11", - "proc-macro2 1.0.23", + "log", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-console-logger" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7530a275e7faf7b5b83aabdf78244fb8d9a68a2ec4b26935a05ecc0c9b0185ed" -dependencies = [ - "log 0.4.11", - "wasm-bindgen", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c" -dependencies = [ - "cfg-if 0.1.10", - "futures", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.68" @@ -2135,7 +1798,7 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" dependencies = [ - "proc-macro2 1.0.23", + "proc-macro2", "quote 1.0.7", "syn 1.0.42", "wasm-bindgen-backend", @@ -2148,31 +1811,6 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" -[[package]] -name = "wasm-bindgen-test" -version = "0.2.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1" -dependencies = [ - "console_error_panic_hook", - "futures", - "js-sys", - "scoped-tls", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.2.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", -] - [[package]] name = "web-sys" version = "0.3.45" @@ -2183,18 +1821,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 04cf7d9..54ce792 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,9 +4,6 @@ members = [ "arm7tdmi", "utils", "platform/rustboyadvance-sdl2", - "platform/rustboyadvance-libretro", - "platform/rustboyadvance-wasm", - "platform/rustboyadvance-jni", "fps_bench" ] resolver = "1" diff --git a/arm7tdmi/examples/simple_emulator.rs b/arm7tdmi/examples/simple_emulator.rs deleted file mode 100644 index aa31572..0000000 --- a/arm7tdmi/examples/simple_emulator.rs +++ /dev/null @@ -1,129 +0,0 @@ -use log::info; -use simple_logger::SimpleLogger; - -use gdbstub::common::Signal; -use gdbstub::conn::{Connection, ConnectionExt}; -use gdbstub::stub::{run_blocking, GdbStub, SingleThreadStopReason}; -use gdbstub::target::Target; - -use arm7tdmi::gdb::wait_for_connection; -use arm7tdmi::{Arm7tdmiCore, SimpleMemory}; - -use rustboyadvance_utils::Shared; - -struct SimpleEmulator { - cpu: Arm7tdmiCore, -} - -impl SimpleEmulator { - fn new(program: &[u8]) -> SimpleEmulator { - let mut memory = SimpleMemory::new(0x4000); - memory.load_program(program); - - let bus = Shared::new(memory); - let mut cpu = Arm7tdmiCore::new(bus); - cpu.reset(); - - SimpleEmulator { cpu } - } -} - -impl run_blocking::BlockingEventLoop for SimpleEmulator { - type Target = Arm7tdmiCore; - type Connection = Box>; - type StopReason = SingleThreadStopReason; - - fn wait_for_stop_reason( - target: &mut Self::Target, - conn: &mut Self::Connection, - ) -> Result< - run_blocking::Event>, - run_blocking::WaitForStopReasonError< - ::Error, - ::Error, - >, - > { - let mut steps = 0; - loop { - if conn.peek().map(|b| b.is_some()).unwrap_or(true) { - let byte = conn - .read() - .map_err(run_blocking::WaitForStopReasonError::Connection)?; - return Ok(run_blocking::Event::IncomingData(byte)); - } else { - target.step(); - if target.check_breakpoint().is_some() { - return Ok(run_blocking::Event::TargetStopped( - SingleThreadStopReason::SwBreak(()), - )); - } - - steps += 1; - if steps % 1024 == 0 { - return Ok(run_blocking::Event::TargetStopped( - SingleThreadStopReason::SwBreak(()), - )); - } - } - } - } - - fn on_interrupt( - _target: &mut Arm7tdmiCore, - ) -> Result>, as Target>::Error> - { - // Because this emulator runs as part of the GDB stub loop, there isn't any - // special action that needs to be taken to interrupt the underlying target. It - // is implicitly paused whenever the stub isn't within the - // `wait_for_stop_reason` callback. - Ok(Some(SingleThreadStopReason::Signal(Signal::SIGINT))) - } -} - -fn main() -> Result<(), Box> { - SimpleLogger::new().env().init().unwrap(); - - let mut emulator = SimpleEmulator::new(include_bytes!("test_program/test.bin")); - - let conn: Box> = Box::new(wait_for_connection(1337)?); - let gdb = GdbStub::new(conn); - let result = gdb.run_blocking::(&mut emulator.cpu); - - info!("emulator stopped, gdb result {:?}", result); - - Ok(()) -} - -#[cfg(test)] -mod test { - use super::*; - use arm7tdmi::memory::DebugRead; - use rustboyadvance_utils::elf::read_symbols; - - #[test] - fn test_breakpoint() -> Result<(), Box> { - let mut emulator = SimpleEmulator::new(include_bytes!("test_program/test.bin")); - let symbol_map = read_symbols(include_bytes!("test_program/test.elf"))?; - let breakpoint_addr = *symbol_map.get("breakpoint_on_me").unwrap(); - println!("breakpoint_addr = {:08x}", breakpoint_addr); - let breakpoint_counter_addr = *symbol_map.get("breakpoint_count").unwrap(); - emulator.cpu.breakpoints.push(breakpoint_addr); - - for x in 0..10 { - println!("{}", x); - let timeout = std::time::Instant::now() + std::time::Duration::from_secs(1); - loop { - emulator.cpu.step(); - if let Some(addr) = emulator.cpu.check_breakpoint() { - emulator.cpu.step(); - assert_eq!(addr, breakpoint_addr); - assert_eq!(emulator.cpu.bus.debug_read_32(breakpoint_counter_addr), x); - break; - } - assert!(std::time::Instant::now() < timeout); - } - } - - Ok(()) - } -} diff --git a/arm7tdmi/examples/test_program/.gitignore b/arm7tdmi/examples/test_program/.gitignore deleted file mode 100644 index b2c3624..0000000 --- a/arm7tdmi/examples/test_program/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/*.o -/*.gdb_history diff --git a/arm7tdmi/examples/test_program/Makefile b/arm7tdmi/examples/test_program/Makefile deleted file mode 100644 index 4af0c0d..0000000 --- a/arm7tdmi/examples/test_program/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Easiest to build this using `docker run -it --rm -v $(pwd):/code -w /code devkitpro/devkitarm:latest make -TOOLCHAIN := ${DEVKITARM}/bin/arm-none-eabi -CC := ${TOOLCHAIN}-gcc -OBJCOPY := ${TOOLCHAIN}-objcopy -OBJDUMP := ${TOOLCHAIN}-objdump - -TARGET := test - -CFLAGS := -O0 -g -std=c11 -march=armv4t -mthumb -LDFLAGS := -Wl,-static - - -SOURCES := $(wildcard *.[cs]) -OBJECTS := $(filter %.o,$(SOURCES:%.c=%.o)) -OBJECTS += $(filter %.o,$(SOURCES:%.s=%.o)) - -all: ${TARGET}.bin objdump - -${OBJECTS}: ${SOURCES} - ${CC} -c ${CFLAGS} $^ - -${TARGET}.elf ${TARGET}.map: ${OBJECTS} ${TARGET}.ld - ${CC} ${LDFLAGS} -Wl,-Map=${TARGET}.map -Wl,-T${TARGET}.ld ${OBJECTS} -o $@ - -${TARGET}.bin: ${TARGET}.elf - $(OBJCOPY) -v -O binary $^ $@ - -objdump: ${TARGET}.elf - ${OBJDUMP} -d $^ - -clean: - rm -f ${TARGET}.elf - rm -f ${TARGET}.bin - rm -f ${TARGET}.map - rm -f *.o - -.PHONY: all clean diff --git a/arm7tdmi/examples/test_program/reset.s b/arm7tdmi/examples/test_program/reset.s deleted file mode 100644 index 5b6f045..0000000 --- a/arm7tdmi/examples/test_program/reset.s +++ /dev/null @@ -1,40 +0,0 @@ -.section ".init" - -.global _interrupt_vector -.align 4 -.arm - -.section ".init.vector" -_interrupt_vector: - b _reset - b _not_implemented - b _not_implemented - b _not_implemented - b _not_implemented - b _not_implemented - b _not_implemented - b _not_implemented - -.section ".init.text" -.global _reset -_reset: - mrs r1, cpsr @ save the mode bits from CPSR - bic r0, r1, #0x1F - orr r0, r0, #0x13 @ supervisor - ldr sp, =_stack_top - mov r0, #0 - mov r1, #0 - mov r2, #0 - mov r3, #0 - mov r4, #0 - mov r5, #0 - mov r6, #0 - mov r7, #0 - mov r9, #0 - mov r10, #0 - mov r11, #0 - mov r12, #0 - b main - -_not_implemented: - b _not_implemented diff --git a/arm7tdmi/examples/test_program/test.bin b/arm7tdmi/examples/test_program/test.bin deleted file mode 100644 index 771427008f378f788cb65f11412d916d18e3453c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcma*jKTE?<6b0~`+WMzjebuNj26a)g6a(tuAY2?G7zd%7ICSi$dzauR5S&W_et>4M zTMH2!9V&E}Gz4uY!NE?(^9qHI27U=V4)>j#Jkdah4bWg6)?gJ>D1?4Ad@uF0!9`D1 zh)66&+w>f-kQ*O%yoAV)Nx%+Rz;Fo_xP^Q0A%M`27clcTO$R}d$m}@1ubcYkR=OX# zO={$v&FYnrb@WPTYt**gR;D$37TT}4*KOVf)R=KpF diff --git a/arm7tdmi/examples/test_program/test.c b/arm7tdmi/examples/test_program/test.c deleted file mode 100644 index e7c1025..0000000 --- a/arm7tdmi/examples/test_program/test.c +++ /dev/null @@ -1,17 +0,0 @@ -volatile int breakpoint_count = 0; -volatile int breakpoint_on_me() { - breakpoint_count++; -} - -int main() { - int x = 1337; - for (;;) { - x += 1; - if (x == 7331) { - breakpoint_on_me(); - x = 1337; - } - } - return 0; -} - diff --git a/arm7tdmi/examples/test_program/test.elf b/arm7tdmi/examples/test_program/test.elf deleted file mode 100644 index e27ad3d9f6b1d8a49b71191b3ca8bd1263a2fe71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68996 zcmeI!TWlOx83*w1%y@mt#+&set#fJFh$I+MZ|vfVG{|&J5=X^JC`tQ3RcSoy9otL1 zyVmYFP1*<|ghY7&ae1haiegcOQmJbFK%YpZRN|ozNElS{N)juA_5o4xKoJt=|IN(V zOihsb$ix3gXXku#zH{cxZ*Kdolc#5lF=C4&qoUC`>LhA)2O>vulTyNFREA|J?w9me z$E_n}1GPs3>_;<>bzeLYHn(<(bYq(x7l-_z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZK!N`YfgK_r>_y#!I)eHj>I0~|QHN3cZ?4_`=uczscdehkGi4&VD|r3hA#czd^&D@+>+^PapDah`dJlE_5PpI%sMN&lLo+w| zv~)YYrq2v^4V&HOL3hOLHK&drKUNy8h8Hi?qUm#IO094?4BBDov7?_YO*~qjD38kv zI#^5>Hew#e&qKKMf~z7gp`J$7;+)5iF}b7Ih@`8k9o=!qbu=H*@RdbP zyCkNkPX{$)aI_6)6ew?|%DGRERC~QaNc|g+S6;}a92xC zzcdxJ>K7-Y(%52Y?5pFYv369QnxB}E%#`!ZRa}aCP-_UDE7?LZ;#?{0>=!V^#hOnS zdcW)Zz)bh|BnsMj9aXQJ?JE@HZteP?#Z?RxomY#SdY(vjBX;Bc`dnynQ|Y-*jHeOh z^-dh$A!46DSFk{ojZS}W9NQmP`fM}ax`H=Yrnr*NM0$LcxmR52zZan8N?}{PYg=4Q z&p6rLB_D2md<7;xLev>$;uVf(V!fX(W#Uq&t@mLv-@Sdwc5EcS%wlIe~_a9b8Y%@9pF}@+@L|eGIOT_S@@+r%e_zu|cf! z$KMKU^?Cb#Cbsh*&CLH(^y|A+i=AKZ%cL0jIT|)L$k5~4^+>uNJ6_{=(viBczE?W? z65ppf$9Lu3PG6F*^XscFDLwK#H0=GZ=cE0 z-D^a_muj%Q94FPns=rXFMQ!o@YSUj_ZdQV2zZx}LZ9iDO zB=b$33DcA(?w{c=)EYHEXtjdNK91MAEDNom9{SbQdi}CAE8hs`BYgaPKeOA%kmzG$ zu(Adgn7;83M#!HzH+|-$fAZ`J-_O2*lb1SXh{9HDbtUpI;sDK-F0S45mx4xhIh6PS z;JhSCTh&yi~il(u|^JUHn)sdw}E>FXi^-dK6T!jatce$+mR$QjWq)_|>zQ za=4V7o|LOW6eN3-^OJI=-PTF45-H=KK{<$`R;{v%Q6b&F%a;({ zz}A-J+b;2Y)8^^@d;%YH`(4yrn>U8G=IK8JeeRw^p6$b~PWuaJYo31L=Fpf!-f6UL zv16vNL%$-Lr|-$v?=zp~K8f0!=IQ%v9eE|hw%Ga3Vu#Js=Wqjgw=$n8?25}X_{A|- z(lDOyunn-ad12bN&+s2H->0|bX>KDkM!Wxsyl-kFEp|TrD{0%>^}J)``7}p2wok8> zZR`HOBCn*4wAj9v5!<$Q74Sm)TAHI9+xKePw&&p^ueL2ubKl5}(e8JVcfaeVxyipn y&B8aV%ZP`IFo^asRJ|U05B8zzwYBAGd@Rq|MPa9H>MJ&z_sc#bzqW%idH(@0g8pj& diff --git a/arm7tdmi/examples/test_program/test.ld b/arm7tdmi/examples/test_program/test.ld deleted file mode 100644 index 277585b..0000000 --- a/arm7tdmi/examples/test_program/test.ld +++ /dev/null @@ -1,32 +0,0 @@ -ENTRY(_reset) - -MEMORY { - RAM : ORIGIN = 0x00000000, LENGTH = 16K -} - -SECTIONS { - . = ORIGIN(RAM); - - .init : { - *(.init.vector); - *(.init*); - } > RAM - - .text : ALIGN(4) { - *(.text) - *(.text.*) - } > RAM - .data : ALIGN(4) { - *(.rodata*); - *(.data*); - } > RAM - .bss : ALIGN(4) { - *(.bss*) - } > RAM - - .stack : AT (0x00003000) { - _stack_bottom = .; - . += 0xfe0; - _stack_top = .; - } > RAM -} \ No newline at end of file diff --git a/arm7tdmi/examples/test_program/test.map b/arm7tdmi/examples/test_program/test.map deleted file mode 100644 index 7efb850..0000000 --- a/arm7tdmi/examples/test_program/test.map +++ /dev/null @@ -1,162 +0,0 @@ - -Memory Configuration - -Name Origin Length Attributes -RAM 0x0000000000000000 0x0000000000004000 -*default* 0x0000000000000000 0xffffffffffffffff - -Linker script and memory map - -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - 0x0000000000000000 . = ORIGIN (RAM) - -.init 0x0000000000000000 0x88 - *(.init.vector) - .init.vector 0x0000000000000000 0x20 reset.o - 0x0000000000000000 _interrupt_vector - *(.init*) - .init 0x0000000000000020 0xc /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - 0x0000000000000020 _init - .init_array 0x000000000000002c 0x4 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .init 0x0000000000000030 0x0 reset.o - .init.text 0x0000000000000030 0x4c reset.o - 0x0000000000000030 _reset - .init 0x000000000000007c 0xc /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - -.text 0x0000000000000088 0xbc - *(.text) - .text 0x0000000000000088 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - .text 0x0000000000000088 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .text 0x0000000000000088 0x4c test.o - 0x0000000000000088 breakpoint_on_me - 0x00000000000000a8 main - .text 0x00000000000000d4 0x0 reset.o - .text 0x00000000000000d4 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - .text 0x00000000000000d4 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - *(.text.*) - .text.__do_global_dtors_aux - 0x00000000000000d4 0x40 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .text.frame_dummy - 0x0000000000000114 0x30 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - -.glue_7 0x0000000000000144 0x0 - .glue_7 0x0000000000000144 0x0 linker stubs - -.glue_7t 0x0000000000000144 0x0 - .glue_7t 0x0000000000000144 0x0 linker stubs - -.vfp11_veneer 0x0000000000000144 0x0 - .vfp11_veneer 0x0000000000000144 0x0 linker stubs - -.v4_bx 0x0000000000000144 0x0 - .v4_bx 0x0000000000000144 0x0 linker stubs - -.fini 0x0000000000000144 0x18 - .fini 0x0000000000000144 0xc /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - 0x0000000000000144 _fini - .fini 0x0000000000000150 0xc /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - -.iplt 0x000000000000015c 0x0 - .iplt 0x000000000000015c 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - -.eh_frame 0x000000000000015c 0x4 - .eh_frame 0x000000000000015c 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .eh_frame 0x000000000000015c 0x4 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - -.rel.dyn 0x0000000000000160 0x0 - .rel.iplt 0x0000000000000160 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - -.data 0x0000000000000160 0x4c - *(.rodata*) - .rodata.all_implied_fbits - 0x0000000000000160 0x24 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .rodata.all_implied_fbits - 0x0000000000000184 0x24 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - *(.data*) - .data 0x00000000000001a8 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - .data 0x00000000000001a8 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .data.__dso_handle - 0x00000000000001a8 0x4 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - 0x00000000000001a8 __dso_handle - .data 0x00000000000001ac 0x0 test.o - .data 0x00000000000001ac 0x0 reset.o - .data 0x00000000000001ac 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - .data 0x00000000000001ac 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - -.fini_array 0x00000000000001ac 0x4 - .fini_array 0x00000000000001ac 0x4 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - -.igot.plt 0x00000000000001b0 0x0 - .igot.plt 0x00000000000001b0 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - -.bss 0x00000000000001b0 0x20 - *(.bss*) - .bss 0x00000000000001b0 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - .bss 0x00000000000001b0 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .bss.completed.1 - 0x00000000000001b0 0x1 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - *fill* 0x00000000000001b1 0x3 - .bss.object.0 0x00000000000001b4 0x18 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .bss 0x00000000000001cc 0x4 test.o - 0x00000000000001cc breakpoint_count - .bss 0x00000000000001d0 0x0 reset.o - .bss 0x00000000000001d0 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - .bss 0x00000000000001d0 0x0 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - -.stack 0x00000000000001d0 0xfe0 load address 0x0000000000003000 - 0x00000000000001d0 _stack_bottom = . - 0x00000000000011b0 . = (. + 0xfe0) - *fill* 0x00000000000001d0 0xfe0 - 0x00000000000011b0 _stack_top = . -LOAD test.o -LOAD reset.o -START GROUP -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/libgcc.a -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/../../../../arm-none-eabi/lib/libc.a -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/../../../../arm-none-eabi/lib/libsysbase.a -END GROUP -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o -LOAD /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o -OUTPUT(test.elf elf32-littlearm) -LOAD linker stubs - -.ARM.attributes - 0x0000000000000000 0x26 - .ARM.attributes - 0x0000000000000000 0x1c /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crti.o - .ARM.attributes - 0x000000000000001c 0x2a /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - .ARM.attributes - 0x0000000000000046 0x2a test.o - .ARM.attributes - 0x0000000000000070 0x1a reset.o - .ARM.attributes - 0x000000000000008a 0x2a /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - .ARM.attributes - 0x00000000000000b4 0x1c /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtn.o - -.comment 0x0000000000000000 0x23 - .comment 0x0000000000000000 0x23 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtbegin.o - 0x24 (size before relaxing) - .comment 0x0000000000000023 0x24 test.o - .comment 0x0000000000000023 0x24 /opt/devkitpro/devkitARM/bin/../lib/gcc/arm-none-eabi/12.1.0/crtend.o - -.debug_info 0x0000000000000000 0x7e - .debug_info 0x0000000000000000 0x7e test.o - -.debug_abbrev 0x0000000000000000 0x77 - .debug_abbrev 0x0000000000000000 0x77 test.o - -.debug_aranges 0x0000000000000000 0x20 - .debug_aranges - 0x0000000000000000 0x20 test.o - -.debug_line 0x0000000000000000 0x51 - .debug_line 0x0000000000000000 0x51 test.o - -.debug_str 0x0000000000000000 0x69 - .debug_str 0x0000000000000000 0x69 test.o - -.debug_frame 0x0000000000000000 0x4c - .debug_frame 0x0000000000000000 0x4c test.o diff --git a/media/screenshot1.png b/media/screenshot1.png deleted file mode 100644 index b6eee5e9c537f16db1e5f0c5be4036568699ad9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21913 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 AbpQYW diff --git a/media/screenshot2.png b/media/screenshot2.png deleted file mode 100644 index 7ba9f42fe0551cbcbdd14b7e058acc7b880eca46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137580 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�@{ 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�Y4>8v6 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 KMNUMnLSTaa8qJgd diff --git a/platform/android/.gitignore b/platform/android/.gitignore deleted file mode 100644 index ebdd23d..0000000 --- a/platform/android/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/caches -/.idea/libraries -/.idea/modules.xml -/.idea/workspace.xml -/.idea/navEditor.xml -/.idea/assetWizardSettings.xml -.DS_Store -/build -/captures -.externalNativeBuild -.cxx diff --git a/platform/android/.idea/.name b/platform/android/.idea/.name deleted file mode 100644 index d193fd8..0000000 --- a/platform/android/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -RustdroidAdvance \ No newline at end of file diff --git a/platform/android/.idea/codeStyles/Project.xml b/platform/android/.idea/codeStyles/Project.xml deleted file mode 100644 index 3279b6b..0000000 --- a/platform/android/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -
- - - - xmlns:android - - ^$ - - - -
-
- - - - xmlns:.* - - ^$ - - - BY_NAME - -
-
- - - - .*:id - - http://schemas.android.com/apk/res/android - - - -
-
- - - - .*:name - - http://schemas.android.com/apk/res/android - - - -
-
- - - - name - - ^$ - - - -
-
- - - - style - - ^$ - - - -
-
- - - - .* - - ^$ - - - BY_NAME - -
-
- - - - .* - - http://schemas.android.com/apk/res/android - - - ANDROID_ATTRIBUTE_ORDER - -
-
- - - - .* - - .* - - - BY_NAME - -
-
-
-
-
-
\ No newline at end of file diff --git a/platform/android/.idea/gradle.xml b/platform/android/.idea/gradle.xml deleted file mode 100644 index 78708b3..0000000 --- a/platform/android/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/platform/android/.idea/misc.xml b/platform/android/.idea/misc.xml deleted file mode 100644 index f797995..0000000 --- a/platform/android/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/platform/android/.idea/runConfigurations.xml b/platform/android/.idea/runConfigurations.xml deleted file mode 100644 index 9b770a6..0000000 --- a/platform/android/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/platform/android/.idea/vcs.xml b/platform/android/.idea/vcs.xml deleted file mode 100644 index 3f1db62..0000000 --- a/platform/android/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/platform/android/README.md b/platform/android/README.md deleted file mode 100644 index 2e3bf8d..0000000 --- a/platform/android/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# RustdroidAdvance - -RustdroidAdvance is an android frontend for my rustboyadvance emulator core diff --git a/platform/android/app/.gitignore b/platform/android/app/.gitignore deleted file mode 100644 index 3543521..0000000 --- a/platform/android/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/platform/android/app/build.gradle b/platform/android/app/build.gradle deleted file mode 100644 index fe9f261..0000000 --- a/platform/android/app/build.gradle +++ /dev/null @@ -1,59 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 29 - buildToolsVersion "29.0.3" - defaultConfig { - applicationId "com.mrmichel.rustdroid_emu" - minSdkVersion 21 - targetSdkVersion 26 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -apply plugin: 'org.mozilla.rust-android-gradle.rust-android' - -cargo { - prebuiltToolchains = true - verbose = true - profile = 'release' - module = "../../../platform/rustboyadvance-jni" - targetDirectory = '../../../target' - libname = "rustboyadvance_jni" - targets = ['x86', 'arm64'] - apiLevel = 21 -} - -afterEvaluate { - // The `cargoBuild` task isn't available until after evaluation. - android.applicationVariants.all { variant -> - def productFlavor = "" - variant.productFlavors.each { - productFlavor += "${it.name.capitalize()}" - } - def buildType = "${variant.buildType.name.capitalize()}" - tasks["generate${productFlavor}${buildType}Assets"].dependsOn(tasks["cargoBuild"]) - } -} -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'com.google.android.material:material:1.1.0' - implementation "androidx.documentfile:documentfile:1.0.1" - implementation 'androidx.preference:preference:1.1.0' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'commons-io:commons-io:2.6' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/platform/android/app/proguard-rules.pro b/platform/android/app/proguard-rules.pro deleted file mode 100644 index 6e7ffa9..0000000 --- a/platform/android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/platform/android/app/src/androidTest/java/com/mrmichel/rustdroid_emu/ExampleInstrumentedTest.java b/platform/android/app/src/androidTest/java/com/mrmichel/rustdroid_emu/ExampleInstrumentedTest.java deleted file mode 100644 index 921f480..0000000 --- a/platform/android/app/src/androidTest/java/com/mrmichel/rustdroid_emu/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mrmichel.rustdroid_emu; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.mrmichel.rustdroid_emu", appContext.getPackageName()); - } -} diff --git a/platform/android/app/src/main/AndroidManifest.xml b/platform/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 2b2a0c4..0000000 --- a/platform/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/platform/android/app/src/main/ic_launcher-web.png b/platform/android/app/src/main/ic_launcher-web.png deleted file mode 100644 index 1de11113a8a665415cfa6fcbf79b907977f7c788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40429 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 diff --git a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/EmulatorBindings.java b/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/EmulatorBindings.java deleted file mode 100644 index a447503..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/EmulatorBindings.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.mrmichel.rustboyadvance; - -/** - * JNI wrapper to the rust core - */ -public class EmulatorBindings { - - static { - System.loadLibrary("rustboyadvance_jni"); - } - - /** - * Open a new emulator context - * - * @param bios bytearray of the GBA bios - * @param rom bytearray of the rom to run - * @param renderer renderer instance - * @param audioPlayer audio player instance - * @param keypad Keypad instance - * @param save_name name of the save file TODO remove this - * @param skipBios skip bios - * @return the emulator context to use pass to other methods in this class - * @throws NativeBindingException - */ - public static native long openEmulator(byte[] bios, byte[] rom, IFrameRenderer renderer, IAudioPlayer audioPlayer, Keypad keypad, String save_name, boolean skipBios) throws NativeBindingException; - - /** - * Open a new emulator context from a saved state buffer - * - * @param bios bytearray of the GBA bios - * @param rom bytearray of the rom to run - * @param savedState saved state buffer - * @param renderer renderer instance - * @param audioPlayer audio player instance - * @param keypad Keypad instance - * @return - * @throws NativeBindingException - */ - public static native long openSavedState(byte[] bios, byte[] rom, byte[] savedState, IFrameRenderer renderer, IAudioPlayer audioPlayer, Keypad keypad) throws NativeBindingException; - - /** - * Destroys the emulator instance - * should be put in a finalizer or else the emulator context may leak. - * - * @param ctx - */ - public static native void closeEmulator(long ctx); - - /** - * Run the emulation thread - * - * @param ctx - */ - public static native void runMainLoop(long ctx); - - public static native void pause(long ctx); - - public static native void resume(long ctx); - - public static native void setTurbo(long ctx, boolean turbo); - - public static native void stop(long ctx); - - - public static native int[] getFrameBuffer(long ctx); - -// /** -// * Runs the emulation for a single frame. -// * @param ctx -// * @param frame_buffer will be filled with the frame buffer to render -// */ -// public static native void runFrame(long ctx, int[] frame_buffer); - - /** - * @param ctx - * @return The loaded ROM title - */ - public static native String getGameTitle(long ctx); - - /** - * @param ctx - * @return The loaded ROM game code - */ - public static native String getGameCode(long ctx); - - /** - * Sets the keystate - * - * @param keyState - */ - public static native void setKeyState(long ctx, int keyState); - - /** - * Saves the state - * - * @param ctx - * @return save state buffer - * @throws NativeBindingException - */ - public static native byte[] saveState(long ctx) throws NativeBindingException; - - /** - * Loads a save state - * - * @param ctx - * @param state save state buffer - * @throws NativeBindingException - */ - public static native void loadState(long ctx, byte[] state) throws NativeBindingException; - - /** - * Logs the emulator state - * - * @return non-zero value on failure - */ - public static native void log(long ctx); - - public class NativeBindingException extends Exception { - public NativeBindingException(String errorMessage) { - super(errorMessage); - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IAudioPlayer.java b/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IAudioPlayer.java deleted file mode 100644 index e6386b0..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IAudioPlayer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mrmichel.rustboyadvance; - -public interface IAudioPlayer { - int audioWrite(short[] buffer, int offsetInShorts, int sizeInShorts); - - void pause(); - - void play(); - - int getSampleCount(); - - int getSampleRate(); - - int availableBufferSize(); -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IFrameRenderer.java b/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IFrameRenderer.java deleted file mode 100644 index 63230ad..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/IFrameRenderer.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mrmichel.rustboyadvance; - -public interface IFrameRenderer { - void renderFrame(int[] framebuffer); -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/Keypad.java b/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/Keypad.java deleted file mode 100644 index 994c631..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/Keypad.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.mrmichel.rustboyadvance; - -public class Keypad { - private int keyState; - - public Keypad() { - reset(); - } - - public void reset() { - this.keyState = 0xffff; - } - - public void onKeyDown(Key key) { - this.keyState = this.keyState & ~(1 << key.keyBit); - } - - public void onKeyUp(Key key) { - this.keyState = this.keyState | (1 << key.keyBit); - } - - public int getKeyState() { - return keyState; - } - - public enum Key { - ButtonA(0), - ButtonB(1), - Select(2), - Start(3), - Right(4), - Left(5), - Up(6), - Down(7), - ButtonR(8), - ButtonL(9); - - private final int keyBit; - - Key(int keyBit) { - this.keyBit = keyBit; - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/RomHelper.java b/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/RomHelper.java deleted file mode 100644 index 33ffe66..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustboyadvance/RomHelper.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mrmichel.rustboyadvance; - -public class RomHelper { - - static { - System.loadLibrary("rustboyadvance_jni"); - } - - public static native String getGameCode(byte[] romData); - - public static native String getGameTitle(byte[] romData); -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/Util.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/Util.java deleted file mode 100644 index 3a40bcf..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/Util.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.mrmichel.rustdroid_emu; - -import android.app.Activity; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Build; -import android.util.Log; - -import androidx.appcompat.app.AlertDialog; -import androidx.core.content.FileProvider; - -import com.mrmichel.rustdroid_emu.ui.EmulatorActivity; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -public class Util { - - private static final String TAG = "Util"; - - - public static void startEmulator(Context context, byte[] bios, int romId) { - Intent intent = new Intent(context, EmulatorActivity.class); - intent.putExtra("bios", bios); - intent.putExtra("romId", romId); - context.startActivity(intent); - } - - - public static void showAlertDialogAndExit(final Activity activity, Exception e) { - new AlertDialog.Builder(activity) - .setTitle(e.toString()) - .setMessage(e.getMessage()) - // Specifying a listener allows you to take an action before dismissing the dialog. - // The dialog is automatically dismissed when a dialog button is clicked. - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - activity.finishAffinity(); - } - }) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); - } - - public static void showAlertDialog(final Activity activity, Exception e) { - new AlertDialog.Builder(activity) - .setTitle(e.toString()) - .setMessage(e.getMessage()) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); - } - - - public static byte[] compressBitmapToByteArray(Bitmap bitmap) { - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.PNG, 10, byteArrayOutputStream); - return byteArrayOutputStream.toByteArray(); - } - - public static void writeCompressedFile(File file, byte[] bytes) { - try { - FileOutputStream fos = new FileOutputStream(file); - GZIPOutputStream gos = new GZIPOutputStream(fos); - - gos.write(bytes); - gos.close(); - fos.close(); - } catch (Exception e) { - Log.e(TAG, "failed to write compressed file " + file.toString() + " error: " + e.getMessage()); - } - } - - public static byte[] readCompressedFile(File file) { - try { - byte[] buffer = new byte[8192]; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - GZIPInputStream gis = new GZIPInputStream(new FileInputStream(file)); - - int len; - - while ((len = gis.read(buffer, 0, 8192)) != -1) { - outputStream.write(buffer, 0, len); - } - gis.close(); - return outputStream.toByteArray(); - } catch (Exception e) { - Log.e(TAG, "failed to read compressed file " + file.toString() + " error: " + e.getMessage()); - return null; - } - } - - public static byte[] readFile(File file) throws IOException { - byte[] buffer = new byte[8192]; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - FileInputStream fis = new FileInputStream(file); - - int len; - - while ((len = fis.read(buffer, 0, 8192)) != -1) { - outputStream.write(buffer, 0, len); - } - fis.close(); - return outputStream.toByteArray(); - } - - public static String byteArrayToHexString(final byte[] bytes) { - StringBuilder sb = new StringBuilder(); - for (byte b : bytes) { - sb.append(String.format("%02x", b & 0xff)); - } - return sb.toString(); - } - - public static String getHash(final byte[] bytes) { - MessageDigest md; - try { - md = MessageDigest.getInstance("SHA-256"); - } catch (NoSuchAlgorithmException e) { - // impossible - Log.e("SnapshotManager", "SHA-256 algo not found"); - return null; - } - - md.update(bytes); - return byteArrayToHexString(md.digest()); - } - - public static void shareFile(Context context, File file, String message) throws FileNotFoundException { - if (!file.exists()) { - throw new FileNotFoundException("file does not exist"); - } - - final Uri uri; - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - uri = Uri.fromFile(file); - } else { - uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file); - } - - if (uri == null) { - throw new FileNotFoundException("could not find file to share"); - } - - - Intent intentShareFile = new Intent(Intent.ACTION_SEND); - intentShareFile.setType("*/*"); - intentShareFile.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intentShareFile.putExtra(Intent.EXTRA_STREAM, uri); - intentShareFile.putExtra(Intent.EXTRA_TEXT, message); - - context.startActivity(Intent.createChooser(intentShareFile, message)); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/AndroidAudioPlayer.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/AndroidAudioPlayer.java deleted file mode 100644 index 0cc99de..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/AndroidAudioPlayer.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.mrmichel.rustdroid_emu.core; - -import android.media.AudioFormat; -import android.media.AudioManager; -import android.media.AudioTrack; -import android.os.Build; -import android.util.Log; - -import com.mrmichel.rustboyadvance.IAudioPlayer; - - -/** - * Simple wrapper around the android AudioTrack class that implements IAudioPlayer - */ -public class AndroidAudioPlayer implements IAudioPlayer { - private static final String TAG = "AndroidAudioPlayer"; - - private static final int BUFFER_SIZE_IN_BYTES = 8192; - private static int SAMPLE_RATE_HZ = 44100; - - private AudioTrack audioTrack; - - public AndroidAudioPlayer() { - if (Build.VERSION.SDK_INT >= 23) { - AudioTrack.Builder audioTrackBuilder = new AudioTrack.Builder() - .setAudioFormat(new AudioFormat.Builder() - .setEncoding(AudioFormat.ENCODING_PCM_16BIT) - .setSampleRate(SAMPLE_RATE_HZ) - .setChannelMask(AudioFormat.CHANNEL_IN_STEREO | AudioFormat.CHANNEL_OUT_STEREO) - .build() - ) - .setBufferSizeInBytes(AndroidAudioPlayer.BUFFER_SIZE_IN_BYTES) - .setTransferMode(AudioTrack.MODE_STREAM); - if (Build.VERSION.SDK_INT >= 26) { - audioTrackBuilder.setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY); - } - this.audioTrack = audioTrackBuilder.build(); - } else { - this.audioTrack = new AudioTrack( - AudioManager.STREAM_MUSIC, - SAMPLE_RATE_HZ, - AudioFormat.CHANNEL_IN_STEREO | AudioFormat.CHANNEL_OUT_STEREO, - AudioFormat.ENCODING_PCM_16BIT, - AndroidAudioPlayer.BUFFER_SIZE_IN_BYTES, - AudioTrack.MODE_STREAM); - } - Log.d(TAG, "sampleCount = " + this.getSampleCount()); - } - - @Override - public int audioWrite(short[] buffer, int offsetInShorts, int sizeInShorts) { - if (Build.VERSION.SDK_INT >= 23) { - return this.audioTrack.write(buffer, offsetInShorts, sizeInShorts, AudioTrack.WRITE_NON_BLOCKING); - } else { - // Native bindings will do its best to make sure this doesn't block anyway - return this.audioTrack.write(buffer, offsetInShorts, sizeInShorts); - } - } - - @Override - public void pause() { - this.audioTrack.pause(); - } - - @Override - public void play() { - this.audioTrack.play(); - } - - @Override - public int getSampleCount() { - if (Build.VERSION.SDK_INT >= 23) { - return this.audioTrack.getBufferSizeInFrames(); - } else { - return BUFFER_SIZE_IN_BYTES / 2; - } - } - - @Override - public int getSampleRate() { - return this.audioTrack.getSampleRate(); - } - - @Override - public int availableBufferSize() { - return 2; - } - -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Emulator.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Emulator.java deleted file mode 100644 index e169f1d..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Emulator.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.mrmichel.rustdroid_emu.core; - -import com.mrmichel.rustboyadvance.EmulatorBindings; -import com.mrmichel.rustboyadvance.IFrameRenderer; -import com.mrmichel.rustboyadvance.Keypad; - -public class Emulator { - - public Keypad keypad; - /// context received by the native binding - private long ctx = -1; - - private AndroidAudioPlayer audioPlayer; - private IFrameRenderer frameRenderer; - public Emulator(IFrameRenderer frameRenderer, AndroidAudioPlayer audioPlayer) { - this.keypad = new Keypad(); - this.frameRenderer = frameRenderer; - this.audioPlayer = audioPlayer; - } - - public Emulator(long ctx, IFrameRenderer frameRenderer, AndroidAudioPlayer audioPlayer) { - this.ctx = ctx; - this.frameRenderer = frameRenderer; - this.audioPlayer = audioPlayer; - this.keypad = new Keypad(); - - } - - /** - * Get the native emulator handle for caching - */ - public long getCtx() { - return ctx; - } - - public void runMainLoop() { - EmulatorBindings.runMainLoop(this.ctx); - } - - public void pause() { - EmulatorBindings.pause(this.ctx); - this.audioPlayer.pause(); - } - - public void resume() { - EmulatorBindings.resume(this.ctx); - this.audioPlayer.play(); - } - - public void setTurbo(boolean turbo) { - EmulatorBindings.setTurbo(ctx, turbo); - } - - public void stop() { - EmulatorBindings.stop(this.ctx); - this.audioPlayer.pause(); - - } - - public int[] getFrameBuffer() { - return EmulatorBindings.getFrameBuffer(this.ctx); - } - - public synchronized byte[] saveState() throws EmulatorBindings.NativeBindingException { - return EmulatorBindings.saveState(this.ctx); - } - - public synchronized void loadState(byte[] state) throws EmulatorBindings.NativeBindingException, EmulatorException { - if (ctx != -1) { - EmulatorBindings.loadState(this.ctx, state); - } else { - throw new EmulatorException("Call open() first"); - } - } - - public synchronized void open(byte[] bios, byte[] rom, String saveName, boolean skipBios) throws EmulatorBindings.NativeBindingException { - this.ctx = EmulatorBindings.openEmulator(bios, rom, this.frameRenderer, this.audioPlayer, this.keypad, saveName, skipBios); - } - - public synchronized void openSavedState(byte[] bios, byte[] rom, byte[] savedState) throws EmulatorBindings.NativeBindingException { - this.ctx = EmulatorBindings.openSavedState(bios, rom, savedState, this.frameRenderer, this.audioPlayer, this.keypad); - } - - public synchronized void close() { - if (this.ctx != -1) { - EmulatorBindings.closeEmulator(this.ctx); - this.ctx = -1; - - } - } - - public String getGameCode() { - if (ctx != -1) { - return EmulatorBindings.getGameCode(ctx); - } else { - return null; - } - } - - public String getGameTitle() { - if (ctx != -1) { - return EmulatorBindings.getGameTitle(ctx); - } else { - return null; - } - } - - public boolean isOpen() { - return this.ctx != -1; - } - - @Override - protected void finalize() throws Throwable { - super.finalize(); - close(); - } - - public synchronized void log() { - EmulatorBindings.log(this.ctx); - } - - public class EmulatorException extends Exception { - public EmulatorException(String errorMessage) { - super(errorMessage); - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/RomManager.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/RomManager.java deleted file mode 100644 index a1b9cb2..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/RomManager.java +++ /dev/null @@ -1,321 +0,0 @@ -package com.mrmichel.rustdroid_emu.core; - -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.net.Uri; -import android.util.Log; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.documentfile.provider.DocumentFile; - -import com.mrmichel.rustboyadvance.RomHelper; -import com.mrmichel.rustdroid_emu.Util; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.sql.Timestamp; -import java.util.ArrayList; - -public class RomManager { - private static final String TAG = "RomManager"; - private static RomManager instance; - private RomDatabaseHelper dbHelper; - private Context context; - - public RomManager(Context context) { - this.context = context; - this.dbHelper = new RomDatabaseHelper(this.context, 1); - } - - public static RomManager getInstance(Context context) { - if (instance == null) { - instance = new RomManager(context); - } - return instance; - } - - private static String byteArrayToHexString(final byte[] bytes) { - StringBuilder sb = new StringBuilder(); - for (byte b : bytes) { - sb.append(String.format("%02x", b & 0xff)); - } - return sb.toString(); - } - - private static String getHash(final byte[] bytes) { - MessageDigest md; - try { - md = MessageDigest.getInstance("SHA-256"); - } catch (NoSuchAlgorithmException e) { - // impossible - Log.e(TAG, "SHA-256 algo not found"); - return null; - } - - md.update(bytes); - return byteArrayToHexString(md.digest()); - } - - public ArrayList getAllRomMetaData() { - return this.dbHelper.queryRomMetadata("SELECT * FROM " + RomDatabaseHelper.TABLE_METADATA + " ORDER BY lastPlayed DESC"); - } - - public RomMetadataEntry getRomMetadata(byte[] romData) { - String romHash = getHash(romData); - - ArrayList metadataEntries = dbHelper.queryRomMetadata( - "SELECT * FROM " + RomDatabaseHelper.TABLE_METADATA + " where hash == '" + romHash + "'"); - - if (metadataEntries.size() > 0) { - return metadataEntries.get(0); - } else { - return null; - } - } - - public RomMetadataEntry getRomMetadata(int romId) { - ArrayList metadataEntries = dbHelper.queryRomMetadata( - "SELECT * FROM " + RomDatabaseHelper.TABLE_METADATA + " where id = '" + romId + "'"); - - if (metadataEntries.size() > 0) { - return metadataEntries.get(0); - } else { - return null; - } - } - - - private byte[] readFromUri(Uri uri) throws IOException { - ContentResolver cr = context.getContentResolver(); - - InputStream is = cr.openInputStream(uri); - byte[] data = new byte[is.available()]; - is.read(data); - return data; - } - - public void importRom(DocumentFile documentFile) { - - Uri uri = documentFile.getUri(); - - byte[] romData; - try { - romData = readFromUri(uri); - } catch (Exception e) { - Log.e(TAG, "could not read rom file"); - return; - } - - if (null != getRomMetadata(romData)) { - Toast.makeText(context, "This rom is already imported!", Toast.LENGTH_LONG).show(); - return; - } - - String hash = getHash(romData); - String gameCode = RomHelper.getGameCode(romData); - String gameTitle = RomHelper.getGameTitle(romData); - - String romFileName = documentFile.getName(); - - // Multiple roms can have the same title+code combo, so we rely on a hash to be a unique identifier. - File baseDir = new File(context.getFilesDir(), hash); - baseDir.mkdirs(); - - File romFile = new File(baseDir, romFileName); - - // cache the rom - try { - FileOutputStream fileOutputStream = new FileOutputStream(romFile); - fileOutputStream.write(romData); - } catch (Exception e) { - Log.e(TAG, "cannot cache rom file"); - } - - File backupFile = new File(baseDir, romFileName + ".sav"); - - SQLiteDatabase db = dbHelper.getWritableDatabase(); - - ContentValues cv = new ContentValues(); - - cv.put("name", romFileName); - cv.put("gameTitle", gameTitle); - cv.put("gameCode", gameCode); - cv.put("hash", hash); - cv.put("path", romFile.getPath()); - cv.put("backupPath", backupFile.getPath()); - - db.insertOrThrow(RomDatabaseHelper.TABLE_METADATA, null, cv); - db.close(); - } - - public void deleteRomMetadata(RomMetadataEntry romMetadataEntry) { - SQLiteDatabase db = dbHelper.getWritableDatabase(); - - db.delete(RomDatabaseHelper.TABLE_METADATA, "id=" + romMetadataEntry.getId(), null); - } - - public void updateLastPlayed(int romId) { - Timestamp now = new Timestamp(System.currentTimeMillis()); - - ContentValues cv = new ContentValues(); - cv.put("lastPlayed", now.toString()); - - SQLiteDatabase db = dbHelper.getWritableDatabase(); - db.update(RomDatabaseHelper.TABLE_METADATA, cv, "id=" + romId, null); - } - - public void updateScreenshot(int romId, Bitmap bitmap) { - - ContentValues cv = new ContentValues(); - cv.put("screenshot", Util.compressBitmapToByteArray(bitmap)); - - SQLiteDatabase db = dbHelper.getWritableDatabase(); - db.update(RomDatabaseHelper.TABLE_METADATA, cv, "id=" + romId, null); - } - - - public class RomMetadataEntry { - int id; - String name; - String gameTitle; - String gameCode; - File romFile; - File backupFile; - Bitmap screenshot; - Timestamp lastPlayed; - - private RomMetadataEntry(int id, String name, String gameTitle, String gameCode, File romFile, File backupFile, Bitmap screenshot, Timestamp lastPlayed) { - this.id = id; - this.name = name; - this.gameTitle = gameTitle; - this.gameCode = gameCode; - this.romFile = romFile; - this.backupFile = backupFile; - this.screenshot = screenshot; - this.lastPlayed = lastPlayed; - } - - - public String getName() { - return name; - } - - public int getId() { - return id; - } - - public Bitmap getScreenshot() { - return screenshot; - } - - public File getBackupFile() { - return backupFile; - } - - public File getRomFile() { - return romFile; - } - - public String getGameTitle() { - return gameTitle; - } - - public String getGameCode() { - return gameCode; - } - - public Timestamp getLastPlayed() { - return lastPlayed; - } - } - - private class RomDatabaseHelper extends SQLiteOpenHelper { - private static final String DATABASE_NAME = "rom_db"; - - private static final String TABLE_METADATA = "rom_metadata"; - - - public RomDatabaseHelper(@Nullable Context context, int version) { - super(context, DATABASE_NAME, null, version); - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL("create table " + TABLE_METADATA + - " (id INTEGER PRIMARY KEY," + - "name TEXT UNIQUE," + - "hash TEXT UNIQUE," + - "gameTitle TEXT," + - "gameCode TEXT," + - "screenshot BLOB," + - "lastPlayed TIMESTAMP," + - "path TEXT UNIQUE," + - "backupPath TEXT UNIQUE" + - ")"); - } - - public ArrayList queryRomMetadata(String query) { - ArrayList arrayList = new ArrayList<>(); - - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(query, null); - - if (cursor.moveToFirst()) { - do { - - String name = cursor.getString(cursor.getColumnIndex("name")); - - File romFile = new File(cursor.getString(cursor.getColumnIndex("path"))); - File backupFile = new File(cursor.getString(cursor.getColumnIndex("backupPath"))); - - byte[] screenshotBlob = cursor.getBlob(cursor.getColumnIndex("screenshot")); - Bitmap screenshot; - if (null != screenshotBlob) { - screenshot = BitmapFactory.decodeByteArray(screenshotBlob, 0, screenshotBlob.length); - } else { - screenshot = null; - } - - String gameTitle = cursor.getString(cursor.getColumnIndex("gameTitle")); - String gameCode = cursor.getString(cursor.getColumnIndex("gameCode")); - - int id = cursor.getInt(cursor.getColumnIndex("id")); - - String lastPlayedString = cursor.getString(cursor.getColumnIndex("lastPlayed")); - Timestamp lastPlayed; - if (lastPlayedString != null) { - lastPlayed = Timestamp.valueOf(lastPlayedString); - } else { - lastPlayed = null; - } - - arrayList.add(new RomMetadataEntry(id, name, gameTitle, gameCode, romFile, backupFile, screenshot, lastPlayed)); - - } while (cursor.moveToNext()); - } - - - cursor.close(); - db.close(); - - return arrayList; - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - db.execSQL("DROP TABLE IF EXISTS " + TABLE_METADATA); - onCreate(db); - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Snapshot.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Snapshot.java deleted file mode 100644 index eb13220..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/Snapshot.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mrmichel.rustdroid_emu.core; - -import android.graphics.Bitmap; - -import com.mrmichel.rustdroid_emu.Util; - -import java.io.File; - -public class Snapshot { - private Bitmap preview; - private String gameCode; - private String gameTitle; - private long timestamp; - private File file; - - public Snapshot(File file, String gameCode, String gameTitle, Bitmap preview) { - this.file = file; - this.gameCode = gameCode; - this.gameTitle = gameTitle; - this.preview = preview; - this.timestamp = System.currentTimeMillis(); - } - - public Snapshot(File file, String gameCode, String gameTitle, Bitmap preview, long timestamp) { - this.file = file; - this.gameCode = gameCode; - this.gameTitle = gameTitle; - this.preview = preview; - this.timestamp = timestamp; - } - - public File getFile() { - return file; - } - - public String getGameCode() { - return gameCode; - } - - public String getGameTitle() { - return gameTitle; - } - - public long getTimestamp() { - return timestamp; - } - - public Bitmap getPreview() { - return preview; - } - - public byte[] load() { - return Util.readCompressedFile(this.file); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/SnapshotManager.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/SnapshotManager.java deleted file mode 100644 index 8ef5a71..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/core/SnapshotManager.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.mrmichel.rustdroid_emu.core; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - -import com.mrmichel.rustdroid_emu.Util; - -import java.io.File; -import java.sql.Timestamp; -import java.util.ArrayList; - -public class SnapshotManager { - private static final String TAG = "SnapshotManager"; - - private static final String SNAPSHOT_ROOT = "snapshots"; - private static final String DB_NAME = "snapshots"; - - static SnapshotManager instance; - - private Context context; - - private SnapshotDatabaseHelper dbHelper; - - private SnapshotManager(Context context) { - this.context = context; - this.dbHelper = new SnapshotDatabaseHelper(this.context); -// this.snapshotDB = context.openOrCreateDatabase("snapshots", Context.MODE_PRIVATE, null); - } - - public static SnapshotManager getInstance(Context context) { - if (instance == null) { - instance = new SnapshotManager(context); - } - return instance; - } - - private File getPreviewsDir(String gameCode) { - File d = new File(context.getFilesDir(), SNAPSHOT_ROOT + "/previews"); - d.mkdirs(); - return d; - } - - private File getSnapshotDir(String gameCode) { - File d = new File(context.getFilesDir(), SNAPSHOT_ROOT + "/data"); - d.mkdirs(); - return d; - } - - public void saveSnapshot(String gameCode, String gameTitle, Bitmap previewImage, byte[] data) { - byte[] previewImageBytes = Util.compressBitmapToByteArray(previewImage); - - String hash = Util.getHash(data); - - File previewsDir = getPreviewsDir(gameCode); - File snapshotsDir = getSnapshotDir(gameCode); - - File previewFile = new File(previewsDir, hash); - Util.writeCompressedFile(previewFile, previewImageBytes); - - File snapshotFile = new File(snapshotsDir, hash); - Util.writeCompressedFile(snapshotFile, data); - - this.dbHelper.insertSnapshot(gameCode, gameTitle, previewFile, snapshotFile); - } - - public void deleteSnapshot(Snapshot snapshot) { - - SQLiteDatabase db = dbHelper.getWritableDatabase(); - - File file = snapshot.getFile(); - db.delete(SnapshotDatabaseHelper.TABLE_NAME, "dataFile = '" + file.toString() + "'", null); - file.delete(); - } - - public ArrayList getAllSnapshots() { - return this.dbHelper.getEntries(); - } - - public ArrayList getByGameCode(String gameCode) { - return this.dbHelper.getEntries(gameCode); - } - - public class SnapshotDBEntry { - String gameCode; - String gameTitle; - File previewFile; - File snapshotFile; - Timestamp timestamp; - - public SnapshotDBEntry(String gameCode, File previewFile, File snapshotFile, Timestamp timestamp) { - this.gameCode = gameCode; - this.previewFile = previewFile; - this.snapshotFile = snapshotFile; - this.timestamp = timestamp; - } - } - - public class SnapshotDatabaseHelper extends SQLiteOpenHelper { - public static final String TABLE_NAME = "snapshot_table"; - private Context context; - - public SnapshotDatabaseHelper(Context context) { - super(context, DB_NAME, null, 1); - this.context = context; - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL("create table " + TABLE_NAME + - " (id INTEGER PRIMARY KEY, gameCode TEXT, gameTitle TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, previewImageFile TEXT, dataFile TEXT)" - ); - } - - public void insertSnapshot(String gameCode, String gameTitle, File previewCacheFile, File snapshotDataFile) { - SQLiteDatabase db = this.getWritableDatabase(); - ContentValues values = new ContentValues(); - values.put("gameCode", gameCode); - values.put("gameTitle", gameTitle); - values.put("previewImageFile", previewCacheFile.getPath()); - values.put("dataFile", snapshotDataFile.getPath()); - db.insertOrThrow(TABLE_NAME, null, values); - db.close(); - } - - public ArrayList getEntriesByQuery(String query) { - ArrayList arrayList = new ArrayList<>(); - - SQLiteDatabase db = this.getWritableDatabase(); - Cursor cursor = db.rawQuery(query, null); - - if (cursor.moveToFirst()) { - do { - String gameCode = cursor.getString(1); - String gameTitle = cursor.getString(2); - Timestamp timestamp = Timestamp.valueOf(cursor.getString(3)); - File previewImageFile = new File(cursor.getString(4)); - File dataFile = new File(cursor.getString(5)); - - byte[] previewData = Util.readCompressedFile(previewImageFile); - Bitmap previewBitmap = BitmapFactory.decodeByteArray(previewData, 0, previewData.length); - - arrayList.add(new Snapshot(dataFile, gameCode, gameTitle, previewBitmap, timestamp.getTime())); - } while (cursor.moveToNext()); - } - - cursor.close(); - db.close(); - return arrayList; - } - - public ArrayList getEntries() { - return getEntriesByQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY timestamp DESC "); - } - - public ArrayList getEntries(String gameCode) { - return getEntriesByQuery("SELECT * FROM " + TABLE_NAME + " where gameCode = '" + gameCode + "' ORDER BY timestamp DESC "); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulationThread.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulationThread.java deleted file mode 100644 index 11206f9..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulationThread.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.util.Log; - -import com.mrmichel.rustdroid_emu.core.Emulator; - -public class EmulationThread extends Thread { - - private static final String TAG = "EmulationThread"; - - public static final long NANOSECONDS_PER_MILLISECOND = 1000000; - public static final long FRAME_TIME = 1000000000 / 60; - - private Emulator emulator; - private ScreenView screenView; - - private boolean running; - - public EmulationThread(Emulator emulator, ScreenView screenView) { - this.emulator = emulator; - this.screenView = screenView; - this.running = false; - } - - public void pauseEmulation() { - this.emulator.pause(); - } - - public void resumeEmulation() { - this.emulator.resume(); - } - - @Override - public void run() { - super.run(); - - // wait until renderer is ready - while (!screenView.getRenderer().isReady()); - - while (!emulator.isOpen()); - - running = true; - emulator.runMainLoop(); - Log.d(TAG, "Native runMainLoop returned!"); - running = false; - } - - -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulatorActivity.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulatorActivity.java deleted file mode 100644 index ad15267..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/EmulatorActivity.java +++ /dev/null @@ -1,573 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.os.Bundle; -import android.util.Log; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; -import android.widget.CompoundButton; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.PreferenceManager; - -import com.mrmichel.rustboyadvance.EmulatorBindings; -import com.mrmichel.rustboyadvance.Keypad; -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.Util; -import com.mrmichel.rustdroid_emu.core.AndroidAudioPlayer; -import com.mrmichel.rustdroid_emu.core.Emulator; -import com.mrmichel.rustdroid_emu.core.RomManager; -import com.mrmichel.rustdroid_emu.core.Snapshot; -import com.mrmichel.rustdroid_emu.core.SnapshotManager; -import com.mrmichel.rustdroid_emu.ui.snapshots.SnapshotPickerActivity; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; - -public class EmulatorActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener { - - private static final String TAG = "EmulatorActivty"; - - private static final String TAG_EMULATOR_STATE = "EmulatorStateFragment"; - - private static final int LOAD_ROM_REQUESTCODE = 123; - private static final int LOAD_SNAPSHOT_REQUESTCODE = 124; - - private Menu menu; - - private RomManager.RomMetadataEntry romMetadata; - private byte[] bios; - private EmulationThread emulationThread; - private AndroidAudioPlayer audioPlayer; - private byte[] on_resume_saved_state = null; - - private Emulator emulator; - private ScreenView screenView; - private CompoundButton turboButton; - - private boolean isEmulatorRunning() { - return emulator.isOpen() && emulationThread != null; - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.tbTurbo) { - if (!isEmulatorRunning()) { - return; - } - emulator.setTurbo(((CompoundButton) findViewById(R.id.tbTurbo)).isChecked()); - } - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - Keypad.Key key = null; - switch (v.getId()) { - case R.id.bDpadUp: - key = Keypad.Key.Up; - break; - case R.id.bDpadDown: - key = Keypad.Key.Down; - break; - case R.id.bDpadLeft: - key = Keypad.Key.Left; - break; - case R.id.bDpadRight: - key = Keypad.Key.Right; - break; - case R.id.buttonA: - key = Keypad.Key.ButtonA; - break; - case R.id.buttonB: - key = Keypad.Key.ButtonB; - break; - case R.id.buttonL: - key = Keypad.Key.ButtonL; - break; - case R.id.buttonR: - key = Keypad.Key.ButtonR; - break; - case R.id.bStart: - key = Keypad.Key.Start; - break; - case R.id.bSelect: - key = Keypad.Key.Select; - break; - } - int action = event.getAction(); - if (key != null) { - if (action == MotionEvent.ACTION_DOWN) { - v.setPressed(true); - emulator.keypad.onKeyDown(key); - } else if (action == MotionEvent.ACTION_UP) { - v.setPressed(false); - emulator.keypad.onKeyUp(key); - } else if (action == MotionEvent.ACTION_OUTSIDE) { - v.setPressed(false); - emulator.keypad.onKeyUp(key); - } - } - - return true; - } - - public Keypad.Key keyCodeToGbaKey(int keyCode) { - switch (keyCode) { - case KeyEvent.KEYCODE_DPAD_UP: - return Keypad.Key.Up; - case KeyEvent.KEYCODE_DPAD_DOWN: - return Keypad.Key.Down; - case KeyEvent.KEYCODE_DPAD_LEFT: - return Keypad.Key.Left; - case KeyEvent.KEYCODE_DPAD_RIGHT: - return Keypad.Key.Right; - case KeyEvent.KEYCODE_Z: - return Keypad.Key.ButtonB; - case KeyEvent.KEYCODE_X: - return Keypad.Key.ButtonA; - case KeyEvent.KEYCODE_A: - return Keypad.Key.ButtonL; - case KeyEvent.KEYCODE_S: - return Keypad.Key.ButtonR; - case KeyEvent.KEYCODE_DEL: - return Keypad.Key.Select; - case KeyEvent.KEYCODE_COMMA: - return Keypad.Key.Start; - } - return null; - } - - @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { - if (!isEmulatorRunning()) { - return false; - } - Keypad.Key key = keyCodeToGbaKey(keyCode); - Log.d(TAG, "onKeyLongPress(: keyCode = " + keyCode + " GBAKey:" + key); - if (null != key) { - this.emulator.keypad.onKeyDown(key); - return false; - } else { - return super.onKeyDown(keyCode, event); - } - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (!isEmulatorRunning()) { - return false; - } - Keypad.Key key = keyCodeToGbaKey(keyCode); - Log.d(TAG, "onKeyDown: keyCode = " + keyCode + " GBAKey:" + key); - if (null != key) { - switch (event.getAction()) { - case KeyEvent.ACTION_DOWN: - this.emulator.keypad.onKeyDown(key); - break; - case KeyEvent.ACTION_UP: - this.emulator.keypad.onKeyUp(key); - break; - } - return event.getAction() == KeyEvent.ACTION_DOWN; - } else { - return super.onKeyDown(keyCode, event); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { -// if (requestCode == LOAD_ROM_REQUESTCODE) { -// Uri uri = data.getData(); -// try { -// InputStream inputStream = getContentResolver().openInputStream(uri); -// byte[] rom = new byte[inputStream.available()]; -// inputStream.read(rom); -// inputStream.close(); -// -// String filename = new File(uri.getPath()).getName(); -// -// File saveRoot = getFilesDir(); -// String savePath = saveRoot.getAbsolutePath() + "/" + filename + ".sav"; -// onRomLoaded(rom, savePath); -// } catch (Exception e) { -// Log.e(TAG, "got error while reading rom file"); -// Util.showAlertDialogAndExit(this, e); -// } -// } - if (requestCode == LOAD_SNAPSHOT_REQUESTCODE) { - Snapshot pickedSnapshot = SnapshotPickerActivity.obtainPickedSnapshot(); - - Toast.makeText(this, "Loading snapshot from " + pickedSnapshot.getTimestamp(), Toast.LENGTH_LONG).show(); - - boolean emulatorWasRunning = isEmulatorRunning(); - - pauseEmulation(); - try { - emulator.loadState(pickedSnapshot.load()); - } catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - } - resumeEmulation(); - - if (!emulatorWasRunning) { - createThreads(); - } - } - } else { - Log.e(TAG, "got error for request code " + requestCode); - } - } - - private void killThreads() { - if (emulationThread != null) { - try { - emulator.stop(); - emulationThread.join(); - } catch (InterruptedException e) { - Log.e(TAG, "emulation thread join interrupted"); - } - emulationThread = null; - } - } - - private void createThreads() { - emulationThread = new EmulationThread(emulator, screenView); - emulator.setTurbo(turboButton.isChecked()); - emulationThread.start(); - } - - public void onRomLoaded(byte[] rom, String savePath) { -// killThreads(); -// -// try { -// emulator.open(bios, rom, savePath); -// } catch (EmulatorBindings.NativeBindingException e) { -// Util.showAlertDialogAndExit(this, e); -// } -// -// createThreads(); - } - - public void doLoadRom() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.setType("*/*"); - intent.putExtra("android.content.extra.SHOW_ADVANCED", true); - startActivityForResult(intent, LOAD_ROM_REQUESTCODE); - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - - if (!isEmulatorRunning()) { - return; - } - // save the emulator state - try { - byte[] savedState = emulator.saveState(); - - File saveFile = new File(getCacheDir(), "saved_state"); - FileOutputStream fis = new FileOutputStream(saveFile); - - fis.write(savedState); - - fis.close(); - - outState.putString("saveFile", saveFile.getPath()); - outState.putInt("romId", this.romMetadata.getId()); - - outState.putBoolean("turbo", false); - - } catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - } - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_emulator); - - this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); - - this.audioPlayer = new AndroidAudioPlayer(); - - findViewById(R.id.bStart).setOnTouchListener(this); - findViewById(R.id.bSelect).setOnTouchListener(this); - findViewById(R.id.buttonA).setOnTouchListener(this); - findViewById(R.id.buttonB).setOnTouchListener(this); - findViewById(R.id.buttonL).setOnTouchListener(this); - findViewById(R.id.buttonR).setOnTouchListener(this); - findViewById(R.id.bDpadUp).setOnTouchListener(this); - findViewById(R.id.bDpadDown).setOnTouchListener(this); - findViewById(R.id.bDpadLeft).setOnTouchListener(this); - findViewById(R.id.bDpadRight).setOnTouchListener(this); - - turboButton = findViewById(R.id.tbTurbo); - turboButton.setOnClickListener(this); - - this.bios = getIntent().getByteArrayExtra("bios"); - - this.screenView = findViewById(R.id.gba_view); - this.emulator = new Emulator(this.screenView, this.audioPlayer); - - final String saveFilePath; - - SharedPreferences sharedPreferences = - PreferenceManager.getDefaultSharedPreferences(this /* Activity context */); - boolean skipBios = sharedPreferences.getBoolean("skip_bios", false); - - if (null != savedInstanceState && (saveFilePath = savedInstanceState.getString("saveFile")) != null) { - final EmulatorActivity thisActivity = this; - int romId = getIntent().getIntExtra("romId", -1); - - // busy wait until surface view is ready - try { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - byte[] buffer = new byte[4096]; - File saveFile = new File(saveFilePath); - FileInputStream fis = new FileInputStream(saveFile); - - int read = 0; - while ((read = fis.read(buffer)) != -1) { - outputStream.write(buffer); - } - - fis.close(); - - saveFile.delete(); - - byte[] savedState = outputStream.toByteArray(); - RomManager romManager = RomManager.getInstance(this); - romManager.updateLastPlayed(romId); - this.romMetadata = romManager.getRomMetadata(romId); - - byte[] romData; - try { - romData = Util.readFile(romMetadata.getRomFile()); - } catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - return; - } - emulator.openSavedState(this.bios, romData, savedState); - - createThreads(); - - boolean turbo = savedInstanceState.getBoolean("turbo"); - - turboButton.setPressed(turbo); - emulator.setTurbo(turbo); - - } catch (Exception e) { - Util.showAlertDialogAndExit(thisActivity, e); - } - - } else { - int romId = getIntent().getIntExtra("romId", -1); - if (-1 != romId) { - RomManager romManager = RomManager.getInstance(this); - romManager.updateLastPlayed(romId); - this.romMetadata = romManager.getRomMetadata(romId); - - byte[] romData; - try { - romData = Util.readFile(romMetadata.getRomFile()); - this.emulator.open(bios, romData, romMetadata.getBackupFile().getAbsolutePath(), skipBios); - } catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - return; - } - - createThreads(); - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - getMenuInflater().inflate(R.menu.menu_emulator, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_load_rom: - doLoadRom(); - return true; - case R.id.action_view_snapshots: - doViewSnapshots(); - return true; - case R.id.action_save_snapshot: - doSaveSnapshot(); - return true; - case R.id.action_set_library_image: - doSaveScreenshotToLibrary(); - return true; - case R.id.action_settings: - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.findItem(R.id.action_save_snapshot).setEnabled(isEmulatorRunning()); - return super.onPrepareOptionsMenu(menu); - } - - private void pauseEmulation() { - if (null != emulationThread) { - emulationThread.pauseEmulation(); - } - } - - private void resumeEmulation() { - if (null != emulationThread) { - emulationThread.resumeEmulation(); - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - pauseEmulation(); - - if (this.romMetadata != null) { - if (this.romMetadata.getScreenshot() == null) { - // Save current screenshot - Bitmap screenshot = Bitmap.createBitmap( - emulator.getFrameBuffer(), - 240, - 160, - Bitmap.Config.RGB_565); - - RomManager.getInstance(this).updateScreenshot(this.romMetadata.getId(), screenshot); - - } - } - killThreads(); - } - - @Override - protected void onPause() { - super.onPause(); - pauseEmulation(); - screenView.onPause(); - } - - @Override - protected void onResume() { - super.onResume(); - screenView.onResume(); - resumeEmulation(); - audioPlayer.play(); - } - - public void doSaveScreenshotToLibrary() { - if (!isEmulatorRunning() || null == this.romMetadata) { - Toast.makeText(this, "No game is running!", Toast.LENGTH_LONG).show(); - return; - } - - pauseEmulation(); - - Bitmap screenshot = Bitmap.createBitmap( - emulator.getFrameBuffer(), - 240, - 160, - Bitmap.Config.RGB_565); - - RomManager.getInstance(this).updateScreenshot(this.romMetadata.getId(), screenshot); - - - resumeEmulation(); - } - - public void doSaveSnapshot() { - if (!isEmulatorRunning()) { - Toast.makeText(this, "No game is running!", Toast.LENGTH_LONG).show(); - return; - } - - SnapshotManager snapshotManager = SnapshotManager.getInstance(this); - - pauseEmulation(); - try { - String gameCode = emulator.getGameCode(); - String gameTitle = emulator.getGameTitle(); - byte[] saveState = emulator.saveState(); - Bitmap preview = Bitmap.createBitmap(emulator.getFrameBuffer(), 240, 160, Bitmap.Config.RGB_565); - - snapshotManager.saveSnapshot(gameCode, gameTitle, preview, saveState); - Toast.makeText(this, "Snapshot saved", Toast.LENGTH_LONG).show(); - - } catch (EmulatorBindings.NativeBindingException e) { - Log.e(TAG, e.toString()); - Util.showAlertDialogAndExit(this, e); - } finally { - resumeEmulation(); - } - } - - public void doViewSnapshots() { - Intent intent = new Intent(this, SnapshotPickerActivity.class); - if (emulator.isOpen()) { - intent.putExtra("gameCode", emulator.getGameCode()); - } - startActivityForResult(intent, LOAD_SNAPSHOT_REQUESTCODE); - } - - @Override - public void onBackPressed() { - boolean emulatorIsRunning = isEmulatorRunning(); - - if (!emulatorIsRunning) { - super.onBackPressed(); - return; - } - - new AlertDialog.Builder(this) - .setIcon(android.R.drawable.ic_dialog_alert) - .setTitle("Closing Emulator") - .setCancelable(false) - .setMessage("Are you sure you want to close the emulator?") - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - EmulatorActivity.super.onBackPressed(); - } - }) - .setNeutralButton("Yes - but save snapshot", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - doSaveSnapshot(); - EmulatorActivity.super.onBackPressed(); - } - }) - .setNegativeButton(android.R.string.no, null) - .show(); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenRenderer.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenRenderer.java deleted file mode 100644 index 036f4cd..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenRenderer.java +++ /dev/null @@ -1,265 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.opengl.GLES20; -import android.opengl.GLSurfaceView; -import android.opengl.GLUtils; - -import androidx.preference.PreferenceManager; - -import com.mrmichel.rustdroid_emu.R; - -import org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import java.nio.charset.StandardCharsets; - -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.opengles.GL10; - -public class ScreenRenderer implements GLSurfaceView.Renderer { - - private ScreenTexture texture; - private boolean ready = false; - private Context context; - - public ScreenRenderer(Context context) { - this.context = context; - } - - public void updateTexture(int[] frameBuffer) { - this.texture.update(frameBuffer); - } - - public void initTextureIfNotInitialized() { - if (this.texture == null) { - this.texture = new ScreenTexture(this.context); - } - } - - @Override - public void onSurfaceCreated(GL10 gl, EGLConfig config) { - initTextureIfNotInitialized(); - ready = true; - } - - @Override - public void onSurfaceChanged(GL10 gl, int width, int height) { - gl.glViewport(0, 0, width, height); - } - - @Override - public void onDrawFrame(GL10 gl) { - this.texture.render(); - } - - public boolean isReady() { - return ready; - } - - public void setColorCorrection(boolean colorCorrection) { - this.texture.setColorCorrection(colorCorrection); - } - - /** - * Private class to manage the screen texture rendering - */ - private class ScreenTexture { - int normalShaderProgram; - int colorCorrectionShaderProgram; - int currentShaderProgram; - int positionHandle; - int texCoordHandle; - int samplerHandle; - int textureId; - - private FloatBuffer vertexBuffer; - private FloatBuffer textureBuffer; - private ByteBuffer indicesBuffer; - - private Bitmap bitmap; - private Context context; - - // square vertices - private float[] vertices = { - -1.0f, 1.0f, 0.0f, // top left - -1.0f, -1.0f, 0.0f, // bottom left - 1.0f, -1.0f, 0.0f, // bottom right - 1.0f, 1.0f, 0.0f, // top right - }; - - // texture space vertices - private float[] textureVertices = { - 0.0f, 0.0f, - 0.0f, 1.0f, - 1.0f, 1.0f, - 1.0f, 0.0f - }; - - // two triangles compose a rect - private byte[] indicies = { - 0, 1, 2, - 0, 2, 3 - }; - - public ScreenTexture(Context context) { - this.context = context; - this.bitmap = Bitmap.createBitmap(240, 160, Bitmap.Config.RGB_565); - - GLES20.glEnable(GLES20.GL_TEXTURE_2D); - - // create vertex array - vertexBuffer = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); - vertexBuffer.put(vertices); - vertexBuffer.position(0); - - // create texture coordinate array - textureBuffer = ByteBuffer.allocateDirect(textureVertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); - textureBuffer.put(textureVertices); - textureBuffer.position(0); - - // create triangle index array - indicesBuffer = ByteBuffer.allocateDirect(indicies.length).order(ByteOrder.nativeOrder()); - indicesBuffer.put(indicies); - indicesBuffer.position(0); - - textureId = createTexture(); - - String vertexShader = readShaderResource(R.raw.screen_texture_vertex_shader); - String normalFragmentShader = readShaderResource(R.raw.screen_texture_fragment_shader); - String colorCorrectionFragmentShader = readShaderResource(R.raw.screen_texture_color_correction_fragment_shader); - - normalShaderProgram = createShaderProgram(vertexShader, normalFragmentShader); - colorCorrectionShaderProgram = createShaderProgram(vertexShader, colorCorrectionFragmentShader); - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.context); - boolean colorCorrection = sharedPreferences.getBoolean("color_correction", false); - setColorCorrection(colorCorrection); - - GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - } - - private void setColorCorrection(boolean colorCorrection) { - - if (colorCorrection) { - currentShaderProgram = colorCorrectionShaderProgram; - } else { - currentShaderProgram = normalShaderProgram; - } - - // use the program - GLES20.glUseProgram(currentShaderProgram); - - positionHandle = GLES20.glGetAttribLocation(currentShaderProgram, "a_position"); - - texCoordHandle = GLES20.glGetAttribLocation(currentShaderProgram, "a_texCoord"); - - samplerHandle = GLES20.glGetUniformLocation(currentShaderProgram, "s_texture"); - - - // load the vertex position - GLES20.glVertexAttribPointer(positionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer); - GLES20.glEnableVertexAttribArray(positionHandle); - // load texture coordinate - GLES20.glVertexAttribPointer(texCoordHandle, 2, GLES20.GL_FLOAT, false, 0, textureBuffer); - GLES20.glEnableVertexAttribArray(texCoordHandle); - - - GLES20.glVertexAttribPointer(positionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer); - GLES20.glEnableVertexAttribArray(positionHandle); - // load texture coordinate - GLES20.glVertexAttribPointer(texCoordHandle, 2, GLES20.GL_FLOAT, false, 0, textureBuffer); - GLES20.glEnableVertexAttribArray(texCoordHandle); - } - - private int compileShader(int type, String code) { - int shader = GLES20.glCreateShader(type); - GLES20.glShaderSource(shader, code); - GLES20.glCompileShader(shader); - return shader; - } - - private void update(int[] frameBuffer) { - bitmap.setPixels(frameBuffer, 0, 240, 0, 0, 240, 160); - } - - private int createShaderProgram(String vertexShaderCode, String fragmentShaderCode) { - int vertexShader = compileShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); - int fragmentShader = compileShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); - - int program = GLES20.glCreateProgram(); - GLES20.glAttachShader(program, vertexShader); - GLES20.glAttachShader(program, fragmentShader); - - GLES20.glLinkProgram(program); - - return program; - } - - private int createTexture() { - int[] texturesIds = new int[1]; - - GLES20.glGenTextures(1, texturesIds, 0); - if (texturesIds[0] == GLES20.GL_FALSE) { - throw new RuntimeException("Error loading texture"); - } - // bind the texture - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturesIds[0]); - - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); - - // set the parameters - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - - return texturesIds[0]; - } - - private String readShaderResource(int resourceId) { - InputStream in = context.getResources().openRawResource(resourceId); - String code; - try { - code = IOUtils.toString(in, StandardCharsets.UTF_8); - } catch (IOException e) { - code = ""; - } - return code; - } - - protected void destroy() { - GLES20.glDeleteProgram(normalShaderProgram); - GLES20.glDeleteProgram(colorCorrectionShaderProgram); - int[] textures = {textureId}; - GLES20.glDeleteTextures(1, textures, 0); - } - - public void render() { - // use the shader program - GLES20.glUseProgram(currentShaderProgram); - - // clear the color buffer - GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); - - // bind the texture - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); - - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); - - // Set the sampler texture unit to 0 - GLES20.glUniform1i(samplerHandle, 0); - - GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, 6, GLES20.GL_UNSIGNED_BYTE, indicesBuffer); - } - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenView.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenView.java deleted file mode 100644 index 1dcb979..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/ScreenView.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.content.Context; -import android.content.SharedPreferences; -import android.opengl.GLSurfaceView; -import android.util.AttributeSet; - -import androidx.preference.PreferenceManager; - -import com.mrmichel.rustboyadvance.IFrameRenderer; - -public class ScreenView extends GLSurfaceView implements SharedPreferences.OnSharedPreferenceChangeListener, IFrameRenderer { - private ScreenRenderer mRenderer; - - public ScreenView(Context context) { - super(context); - init(); - } - - public ScreenView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - private void init() { - this.setEGLContextClientVersion(2); - this.setPreserveEGLContextOnPause(true); - - SharedPreferences sharedPreferences = - PreferenceManager.getDefaultSharedPreferences(getContext()); - sharedPreferences.registerOnSharedPreferenceChangeListener(this); - - mRenderer = new ScreenRenderer(getContext()); - this.setRenderer(mRenderer); - this.setRenderMode(RENDERMODE_WHEN_DIRTY); - } - - public ScreenRenderer getRenderer() { - return mRenderer; - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (key.equals("color_correction")) { - boolean colorCorrection = sharedPreferences.getBoolean("color_correction", false); - mRenderer.setColorCorrection(colorCorrection); - } - } - - @Override - public void renderFrame(int[] frameBuffer) { - mRenderer.updateTexture(frameBuffer); - requestRender(); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsActivity.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsActivity.java deleted file mode 100644 index 8223c37..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsActivity.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.os.Bundle; - -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.PreferenceFragmentCompat; - -import com.mrmichel.rustdroid_emu.R; - -public class SettingsActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_settings); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.settings, new SettingsFragment()) - .commit(); - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - } - } - - public static class SettingsFragment extends PreferenceFragmentCompat { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferencesFromResource(R.xml.app_preferences, rootKey); - } - } -} \ No newline at end of file diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsFragment.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsFragment.java deleted file mode 100644 index 4e37e31..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SettingsFragment.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.os.Bundle; - -import androidx.preference.PreferenceFragment; -import androidx.preference.PreferenceFragmentCompat; - -import com.mrmichel.rustdroid_emu.R; - - -public class SettingsFragment extends PreferenceFragmentCompat { - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferencesFromResource(R.xml.app_preferences, rootKey); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SplashActivity.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SplashActivity.java deleted file mode 100644 index 968df47..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/SplashActivity.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui; - -import android.Manifest; -import android.app.ActivityManager; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.ConfigurationInfo; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.ui.library.RomListActivity; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -public class SplashActivity extends AppCompatActivity { - - private static final String TAG = "SplashActivity"; - private static final int REQUEST_PERMISSION_CODE = 55; - private static final int BIOS_REQUEST_CODE = 66; - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == REQUEST_PERMISSION_CODE) { - if (permissions.length == 1 && permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - initCacheBios(); - } else { - Toast.makeText(this, "WRITE_EXTERNAL_STORAGE not granted, need to quit", Toast.LENGTH_LONG).show(); - this.finishAffinity(); - } - } - } - } - - private void checkOpenGLES20() { - ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); - ConfigurationInfo configurationInfo = am.getDeviceConfigurationInfo(); - if (configurationInfo.reqGlEsVersion >= 0x20000) { - // Supported - } else { - new AlertDialog.Builder(this) - .setTitle("OpenGLES 2") - .setMessage("Your device doesn't support GLES20. reqGLEsVersion = " + configurationInfo.reqGlEsVersion) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - finishAffinity(); - } - }) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); - } - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.splash_activity); - - checkOpenGLES20(); - - if (ContextCompat.checkSelfPermission(this, - Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { - - // No explanation needed; request the permission - ActivityCompat.requestPermissions(this - , - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, - REQUEST_PERMISSION_CODE); - } else { - // Permission has already been granted - initCacheBios(); - - } - } - - private void cacheBiosInAppFiles(byte[] bios) throws IOException { - FileOutputStream fos = openFileOutput("gba_bios.bin", MODE_PRIVATE); - fos.write(bios); - fos.close(); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { - if (requestCode == BIOS_REQUEST_CODE) { - Uri uri = data.getData(); - try { - InputStream inputStream = getContentResolver().openInputStream(uri); - byte[] bios = new byte[inputStream.available()]; - inputStream.read(bios); - inputStream.close(); - - cacheBiosInAppFiles(bios); - - startLibraryActivity(bios); - } catch (Exception e) { - Log.e(TAG, "can't open bios file"); - this.finishAffinity(); - } - } - } else { - Log.e(TAG, "get error for request code " + requestCode); - } - } - - private void initCacheBios() { - try { - FileInputStream fis = openFileInput("gba_bios.bin"); - byte[] bios = new byte[fis.available()]; - fis.read(bios); - startLibraryActivity(bios); - } catch (FileNotFoundException e) { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.setType("*/*"); - intent.putExtra("android.content.extra.SHOW_ADVANCED", true); - intent.putExtra(Intent.EXTRA_TITLE, "Please load the gba_bios.bin file"); - startActivityForResult(intent, BIOS_REQUEST_CODE); - } catch (IOException e) { - Log.e(TAG, "Got IOException while reading from bios"); - } - } - - private void startLibraryActivity(byte[] bios) { - Intent intent = new Intent(this, RomListActivity.class); - intent.putExtra("bios", bios); - startActivity(intent); - finish(); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListActivity.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListActivity.java deleted file mode 100644 index 9356150..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListActivity.java +++ /dev/null @@ -1,261 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.library; - -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.provider.MediaStore; -import android.util.Log; -import android.view.ContextMenu; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.GridView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.documentfile.provider.DocumentFile; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.Util; -import com.mrmichel.rustdroid_emu.core.RomManager; -import com.mrmichel.rustdroid_emu.ui.SettingsActivity; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; - -public class RomListActivity extends AppCompatActivity { - - private static final String TAG = "RomListActivity"; - - private static final int REQUEST_IMPORT_ROM = 100; - private static final int REQUEST_IMPORT_DIR = 101; - private static final int REQUEST_SET_IMAGE = 102; - private static final int REQUEST_IMPORT_SAVE = 103; - - private static String[] ALLOWED_EXTENSIONS = {"gba", "zip", "bin"}; - - private GridView mGridView; - private RomListItemAdapter itemAdapter; - - private RomManager.RomMetadataEntry selectedEntry; - - private byte[] bios; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_rom_list); - - this.bios = getIntent().getByteArrayExtra("bios"); - - mGridView = findViewById(R.id.gridview_rom_list); - - final RomManager romManager = RomManager.getInstance(this); - - ArrayList entries = romManager.getAllRomMetaData(); - - itemAdapter = new RomListItemAdapter(this, entries); - mGridView.setAdapter(itemAdapter); - - final Context context = this; - mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - RomManager.RomMetadataEntry entry = itemAdapter.getItem(position); - romManager.updateLastPlayed(entry.getId()); - Util.startEmulator(context, bios, entry.getId()); - } - }); - - registerForContextMenu(mGridView); - } - - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - if (v.getId() == R.id.gridview_rom_list) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.menu_context_rom, menu); - } - } - - - @Override - public boolean onContextItemSelected(@NonNull MenuItem item) { - AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); - - RomManager romManager = RomManager.getInstance(this); - - RomManager.RomMetadataEntry entry = itemAdapter.getItem(menuInfo.position); - - selectedEntry = entry; - - switch (item.getItemId()) { - case R.id.action_play: - romManager.updateLastPlayed(entry.getId()); - Util.startEmulator(this, this.bios, entry.getId()); - this.itemAdapter.notifyDataSetChanged(); - return true; - case R.id.action_delete: - romManager.deleteRomMetadata(itemAdapter.getItem(menuInfo.position)); - return true; - case R.id.action_set_screenshot: - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.setType("image/*"); - intent.putExtra("romId", entry.getId()); - startActivityForResult(intent, REQUEST_SET_IMAGE); - return true; - case R.id.action_export_save_file: - File backupFile = entry.getBackupFile(); - try { - Util.shareFile(this, backupFile, "Sending " + backupFile.getName()); - } catch (FileNotFoundException e) { - Util.showAlertDialog(this, e); - } - return true; - case R.id.action_import_save_file: - intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.setType("*/*"); - startActivityForResult(intent, REQUEST_IMPORT_SAVE); - return true; - default: - return super.onContextItemSelected(item); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - getMenuInflater().inflate(R.menu.menu_rom_list, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_import_rom: - doImportRom(); - return true; - case R.id.action_import_directory: - doImportDirectory(); - return true; - case R.id.action_settings: - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - String getFileExtension(String name) { - if (name == null) { - return ""; - } - int i = name.lastIndexOf('.'); - String ext = i > 0 ? name.substring(i + 1) : ""; - return ext; - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { - ContentResolver contentResolver = getContentResolver(); - RomManager romManager = RomManager.getInstance(this); - switch (requestCode) { - case REQUEST_IMPORT_ROM: - Uri uri = data.getData(); - contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); - - romManager.importRom(DocumentFile.fromSingleUri(this, uri)); - - break; - case REQUEST_IMPORT_DIR: - - Uri treeUri = data.getData(); - - contentResolver.takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - - DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); - - for (DocumentFile file : pickedDir.listFiles()) { - - String extension = getFileExtension(file.getName()); - if (Arrays.asList(ALLOWED_EXTENSIONS).contains(extension)) { - Log.d(TAG, "Importing ROM " + file.getName() + " with size " + file.length() + " and type: " + extension); - romManager.importRom(file); - } - } - - break; - case REQUEST_SET_IMAGE: - int romId = selectedEntry.getId(); - - Bitmap bitmap; - try { - bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData()); - - } - catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - return; - } - - Log.d(TAG, "found bitmap"); - romManager.updateScreenshot(romId, bitmap); - - break; - case REQUEST_IMPORT_SAVE: - try { - InputStream inputStream = getContentResolver().openInputStream(data.getData()); - byte[] saveData = new byte[inputStream.available()]; - inputStream.read(saveData); - inputStream.close(); - - File file = selectedEntry.getBackupFile(); - Log.d(TAG, "Saving imported save to " + file.getAbsolutePath()); - FileOutputStream fos = new FileOutputStream(file); - fos.write(saveData); - fos.close(); - } catch (Exception e) { - Util.showAlertDialogAndExit(this, e); - } - break; - - } - - this.itemAdapter.notifyDataSetChanged(); - mGridView.setAdapter(new RomListItemAdapter(this, romManager.getAllRomMetaData())); - mGridView.invalidate(); - - } else { - Log.e(TAG, "got error for request code " + requestCode); - } - } - - void doImportRom() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("*/*"); - Log.d(TAG, "pressed import rom"); - Intent chooser = Intent.createChooser(intent, "choose GBA rom file to import"); - startActivityForResult(chooser, REQUEST_IMPORT_ROM); - } - - void doImportDirectory() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); - startActivityForResult(intent, REQUEST_IMPORT_DIR); - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListItemAdapter.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListItemAdapter.java deleted file mode 100644 index cee895f..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/library/RomListItemAdapter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.library; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.core.RomManager.RomMetadataEntry; - -import java.util.ArrayList; - -public class RomListItemAdapter extends ArrayAdapter { - - Context context; - ArrayList items; - - public RomListItemAdapter(Context context, ArrayList romEntries) { - super(context, 0, romEntries); - this.context = context; - this.items = romEntries; - } - - @Override - public long getItemId(int position) { - return 0; - } - - @NonNull - @Override - public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { - RomMetadataEntry item = getItem(position); - - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.rom_item, parent, false); - } - - ImageView screenshotImageView = convertView.findViewById(R.id.imageview_screenshot); - - Bitmap screenshot = item.getScreenshot(); - if (screenshot != null) { - screenshotImageView.setImageBitmap(screenshot); - } else { - screenshotImageView.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher)); - } - - - TextView tvTitle = convertView.findViewById(R.id.textview_game_title); - tvTitle.setText(item.getName()); - - return convertView; - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/ISnapshotListener.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/ISnapshotListener.java deleted file mode 100644 index 0df1e87..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/ISnapshotListener.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.snapshots; - -import com.mrmichel.rustdroid_emu.core.Snapshot; - -public interface ISnapshotListener { - - public void onSnapshotClicked(Snapshot snapshot); -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotItemAdapter.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotItemAdapter.java deleted file mode 100644 index d0cfa4b..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotItemAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.snapshots; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.core.Snapshot; - -import java.sql.Timestamp; -import java.util.ArrayList; - -public class SnapshotItemAdapter extends ArrayAdapter { - - Context context; - ArrayList items; - - public SnapshotItemAdapter(Context context, ArrayList items) { - super(context, 0, items); - this.context = context; - this.items = items; - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public long getItemId(int position) { - return 0; - } - - @NonNull - @Override - public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { - Snapshot snapshot = getItem(position); - - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.snapshot_item, parent, false); - } - - ImageView preview = (ImageView) convertView.findViewById(R.id.imageview_snapshot_preview); - preview.setImageBitmap(snapshot.getPreview()); - - - TextView tvTitle = (TextView) convertView.findViewById(R.id.textview_snapshot_title); - tvTitle.setText(snapshot.getGameTitle()); - - TextView tvTimestamp = (TextView) convertView.findViewById(R.id.textview_snapshot_timestmap); - Timestamp timestamp = new Timestamp(snapshot.getTimestamp()); - tvTimestamp.setText(timestamp.toString()); - - return convertView; - } -} diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotListFragment.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotListFragment.java deleted file mode 100644 index 0b7f337..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotListFragment.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.snapshots; - -import android.os.Bundle; -import android.util.Log; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.GridView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.core.Snapshot; -import com.mrmichel.rustdroid_emu.core.SnapshotManager; - -import java.util.ArrayList; - -public class SnapshotListFragment extends Fragment { - - private static final String TAG = "SnapshotListFragment"; - - private GridView mGridView; - - private ArrayList snapshots; - - private ISnapshotListener mListener; - - public SnapshotListFragment() { - super(); - mListener = new ISnapshotListener() { - @Override - public void onSnapshotClicked(Snapshot snapshot) { - Log.d(TAG, "stub onSnapshotClicked"); - } - }; - } - - public SnapshotListFragment(ISnapshotListener listener) { - super(); - mListener = listener; - } - - public static SnapshotListFragment newInstance(ISnapshotListener listener) { - return new SnapshotListFragment(listener); - } - - @Override - public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, @Nullable ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - if (v.getId() == R.id.gridview_snapshots) { - MenuInflater inflater = getActivity().getMenuInflater(); - inflater.inflate(R.menu.menu_context_snapshot, menu); - } - } - - @Override - public boolean onContextItemSelected(@NonNull MenuItem item) { - AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); - - Snapshot snapshot = snapshots.get(menuInfo.position); - switch (item.getItemId()) { - case R.id.action_delete: - SnapshotManager.getInstance(getContext()).deleteSnapshot(snapshot); - snapshots.remove(menuInfo.position); - - SnapshotItemAdapter adapter = new SnapshotItemAdapter(getContext(), snapshots); - mGridView.setAdapter(adapter); - mGridView.invalidate(); - - return true; - default: - return super.onContextItemSelected(item); - } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.snapshot_list_fragment, container, false); - } - - @Override - public void onStart() { - super.onStart(); - - Bundle args = getArguments(); - - SnapshotManager manager = SnapshotManager.getInstance(getContext()); - - String gameCode; - if (args != null && (gameCode = args.getString("gameCode")) != null) { - snapshots = manager.getByGameCode(gameCode); - } else { - snapshots = manager.getAllSnapshots(); - } - - mGridView = getActivity().findViewById(R.id.gridview_snapshots); - SnapshotItemAdapter adapter = new SnapshotItemAdapter(getContext(), snapshots); - mGridView.setAdapter(adapter); - mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - final Snapshot snapshot = snapshots.get(position); - mListener.onSnapshotClicked(snapshot); - } - }); - registerForContextMenu(mGridView); - } -} - diff --git a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotPickerActivity.java b/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotPickerActivity.java deleted file mode 100644 index 2e5add6..0000000 --- a/platform/android/app/src/main/java/com/mrmichel/rustdroid_emu/ui/snapshots/SnapshotPickerActivity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mrmichel.rustdroid_emu.ui.snapshots; - -import androidx.appcompat.app.AppCompatActivity; - -import android.content.Intent; -import android.os.Bundle; - -import com.mrmichel.rustdroid_emu.R; -import com.mrmichel.rustdroid_emu.core.Snapshot; - -public class SnapshotPickerActivity extends AppCompatActivity implements ISnapshotListener { - - static Snapshot pickedSnapshot; - - public static Snapshot obtainPickedSnapshot() { - Snapshot ret = pickedSnapshot; - pickedSnapshot = null; - return ret; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.snapshot_picker_activity); - if (savedInstanceState == null) { - getSupportFragmentManager().beginTransaction() - .replace(R.id.container, SnapshotListFragment.newInstance(this)) - .commitNow(); - } - } - - @Override - public void onSnapshotClicked(Snapshot snapshot) { - Intent data = new Intent(); - pickedSnapshot = snapshot; - setResult(RESULT_OK, data); - finish(); - } -} diff --git a/platform/android/app/src/main/res/drawable/dpad.png b/platform/android/app/src/main/res/drawable/dpad.png deleted file mode 100644 index 38b8513e526716122721be8db9b7ad28a549e7de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmV;^4lMDBP)002!01^@s6?iZQ&00004b3#c}2nYxW zdcrU*e;aOGv!MDD3X>E~m%c2^3^wH10 z1LVUZ{I#mSQ&mM(0Yx<&`5d~>W?cW;dwml8zpCE#pI5GYeQ%z9SO{1j|M=&hRn>R& zb$B=&FdmN?jYf>eL!4_631WFa;b79Tzqils?k+n!+wAS_%>d880{q35E8qC;y!tVi zSH+$3CIAs(b#;}~r%!SG_%ZIf>lmZa2#_>v<>+a360Y|557^q;Vsmqo_4Reu*4Aj- z2_VNr{Hb|%Vo_i<0QcN;f&1?J6T}b^sj1!Jxj?{3!j%H!@rbi$&v53<8Q%Qn``O&w z;;E{38FtP%rFP}MXUETYUEtoOa|iw*1o0W9aF zR>9cWUUpTiBC#oerico%IAYBothc{?z1i4U1wfp`Iae^MW>SJpNUTagL9$n-imHlR zAX;+=Yjbm)+AwATNqr<6FRC*MfaE8^S(ONq0IH<=7E$I7miNaRk)Vc+Yj6?`eDbTN zXTe0Q@@7;$0M%&VV_l0Xa|cUxx3T_|2EMXa9d=D$WmW}{0$_qJ7qe6k8W;j*vn0=k z)$gr}pwZtlkV5>pWNJ7byTN1<&KsKzrM6pH6Z;*l>_JG32_?pZg7khfpRxd(HEN&* zf&*zzq=-}?&1P3*mCcNWf2FF(GBFD#jX~lXL0sU%ow2KjRl#hf`%9&Us>23?9y$rL zVP=)g4ywb==!E83FvNvX4Uy&Y;8iD$ox4VYQyQq%>zqzSI}n{wkO&abUM*d?GZ@HV zG6~FZ&IL6rS(QNR<5esv%!w)(9kC@;L!WF`6H_!5P@SN9x&lx!cR>QXqJyf+axqJ_ zX}|*@;tHFU8P*M|I~7#Ha|Vp%vsvH^o8__xA3>WHRHxDtJcsmquw6^#I!dFD)%Z9D(itpCtSYh)Mc<E|l7-R?V)v}q%STCi8_q^|}TY78cZd*oYbW=2|123T5bu+5TJ*Zl4?Xn3cYg1CPd+;Uc;bn_ zKRubq!=Q{tLx#fvB1ET;6q|*SBzn)$zm7diqnD=noaHp7Sy>r%fa)?V7KuPb04->) zI_toxaAZ8@fd}qK@t}%VQ19cU5H!R`N-BzakN04#^Qx%NO!Ho&hQJFi{3>K)oqHGv zV70A03XB2nz4siet1Bt@WZBKkiu#^7!AX1`)y%H#TvE2d>R<}6DmF~G)WNf z@hB%w9_K@U^}*0_A3E+ebXa}vygm2c$KME?_S}o_ef!%txqkf`z{9|oB8lar0ORqH zm7_<}h(>FY(;$fjW!9i(N0%*AHY$Qvg5Cu@oaX_`gJa1<$&tVmOLL&!XBVaDLtZQ? zdTE(S5iVSKqw)Bm_rCYy8Ta_(UmF8|25|iNY6eK68pNa9FvWWnczuAy!`ub~L?m>) z0?JLF=Q=WYRee=^xy@Q0I&w=Tw*iz10_V@)os@omzx~re)3opMUd8|`N5|E4WFO^x zK=y~~#tN3%fXx7`ysmt%SWnq{3Z69^_h?R#Xw*bVYl$LpT~UHhCd9mbYSZ4)w9ID9 zB7$b^kMf^9bvoNfb>?(9Wu_=RR zFZQZr?651Ez{0(DZbSgu#aJHV3+um~~q(L%k5OJg~QljYJv$x`hFK(pUDa>SU$ z=>f15m2qgA zlwlgUT+d;v>xy)^_h;F_(xvFD{m$BY?S1Kf9Rh3sCJt~x$k$%^ozl8|zb6zA|7xA_ zmq{Y9t6H={yg|zrrq;o8wO=%QgZ1XPPkM-PM(k$KK z2Q+*UHunO^z5~_(4kqm(D$D{`a&->tXzs8{U39p3UI(=y$gKisYq4shr~WB)G7$~~ zngYAKVF!>1*B!_jKs)ih9WGf=3O-9Pr3c7D#q#$xP-+>2BJ#I;RWh;suES{Uwm+jk zw*%J3Lh%s<;9?Aq0kq%&SBKP1ONLbq{oYL6w z3NXu+^$nmV=61oGWh!p>jxkG>>jU5y0DF5A(hijZ+ze0$oTO&4leWPu=FJmyoj};I z^eQ+XymJA>M{itfzI55=6F@aHD_hnDuTtf*KQ%C2MN#$Kym`YO|7HOGIS9GwgUJNf zj6#;O008X)M{;P8g_HkN1Mzr z?@8Xbg)rescE595I`f?3I)hZ&tu6~|c4a$PQJPmWt5D^6x4V1f$3*vGdwaK{@=T*x zHlkEQ^mV`v@AGe%>2e;tOzlpcr#dVR+^Meuqm-e;qDt;QBVVX8u)d!Ehu&!9e(Ek= z`s6n7BLk~6lKI1=KhxlJ8lD>Yu5tDeq$=;-0ZcnUCEzqHMwIGU)oaFont^>Pm{qRm zWucB68|#ME)u*4na(xi=k^ffZ-P_xHwBE;AOOoMELP^dBlq#sjEEi;w0?csFdvFds z9`SYZEd|1+19cW<#$fb-RNX7yp8=j0b=MO?c=qzk39KJO3U%~5Ce+Ov+Z7f2REnO) zyVr>kMTe5_RK4$O)hoU$@0-e&fOOxlRq_@#t|LDssBx5h+p@K_8L^W8fw;)}(n}Yf zK7anDYrwgySFiEni~mlYB*Rr>hy zuZ3?FQ^R6uV6yI6u_=EFsB9api0C(-eDa(B_Imfh%G|dci9{C|XxpHE$y+y%J?7VY zlWNAU0<2_^71YmP4XrF-Gn-BEA68SRzep*+z2% zO#KpIHet_T7MQWwBgK2IR9(;UUg0^I8sFT5~)UIfo^i%|c1-!0g+ zY_5aIptb*D;ag2=XrBJzqY?DV0MQ*jqo5K@xQVlfQ zEW3y@cd&ML{A4^1K(v;;v)wXUggLikh$e;1J{GV*tQPSu1F)?Xg=^vE&@f+`(F1B|D`)`dM^>=Lk!Ydx)iDkvh)l(#?jW(f_uSN!ZAmY!*xf z&&eSz<3p`}rh;k|ye>`;=l+LWE?v5mmbz!I-lRi&4qMzPo)@X;1!A?3KMAD--@*B~ zs-xw~a~bBOE!Ul|(@!TpWXZyvSX#gtGs@sOFW1W~pOgZsDZ8~)u0t#nV7Rxtm;9_U zcn(Ex0akHZ1l0!z`>d@k?oX925-fiAyK8K0Y;yMO8#r;|1Sd}(kAFc#C{qqo*$0Km zNIWZroT(X8j%TY2fVc?k+F9a23@T5rLJJBMgTl#^X`k1ng)U z$Nv642M7D??d`F%v&+uT4iwqZa;XY<6?kegalf2rC;qUVs)r~SFFrm#d2;1rBKkL~ z`k<=1?pj?whwih^^((6SL(pg1*8c|_`|iB|`YkLFtg<}v$P=fVM&6?;?@{&lfnHG6 zdqIyDVC{gesj>$Cx8Cc|Mfkbp5%@moK-sZ|U_dzX!d6_Waf$j*b8T002ov JPDHLkV1kXiV2}U+ diff --git a/platform/android/app/src/main/res/drawable/round_button.xml b/platform/android/app/src/main/res/drawable/round_button.xml deleted file mode 100644 index d4f184d..0000000 --- a/platform/android/app/src/main/res/drawable/round_button.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/platform/android/app/src/main/res/layout-land/activity_emulator.xml b/platform/android/app/src/main/res/layout-land/activity_emulator.xml deleted file mode 100644 index fdd865b..0000000 --- a/platform/android/app/src/main/res/layout-land/activity_emulator.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/platform/android/app/src/main/res/layout-land/content_emulator.xml b/platform/android/app/src/main/res/layout-land/content_emulator.xml deleted file mode 100644 index 704cb45..0000000 --- a/platform/android/app/src/main/res/layout-land/content_emulator.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - -
  • - - -
  • -
  • -
  • -
  • - - -
  • -
     You can also drag rom files directly into the screen 
    - - -
    -
     Built with WASM
    - -
    - FPS - -
    -
    -
    - - - - \ No newline at end of file diff --git a/platform/rustboyadvance-wasm/app/index.js b/platform/rustboyadvance-wasm/app/index.js deleted file mode 100644 index 2fe03e0..0000000 --- a/platform/rustboyadvance-wasm/app/index.js +++ /dev/null @@ -1,236 +0,0 @@ -import * as wasm from "rustboyadvance-wasm"; - -var fps_text = document.getElementById('fps'); -var canvas = document.getElementById("screen"); -var ctx = canvas.getContext('2d'); -var intervalId = 0; -var romData = null; -var biosData = null; -let emulator = null; - -document.getElementById("skipBios").checked = JSON.parse(localStorage.getItem("skipBios")); -var shouldSkipBios = document.getElementById("skipBios").checked; - -console.log("Calling wasm init routine"); -wasm.init(); - -function loadLocalFile(localFile, callback) { - var reader = new FileReader(); - reader.onload = function(e) { - var data = reader.result; - var array = new Uint8Array(data); - callback(array); - }; - reader.readAsArrayBuffer(localFile); -} - -function ensureFilesLoaded() { - var bios = localStorage.getItem("bios"); - if (null == biosData) { - alert("please load bios first!"); - return false; - } - - if (null == romData) { - alert("rom not loaded"); - return false; - } - return true; -} - -const convertAudioBuffer = buffer => { - let length = buffer.length; - const floatArray = new Float32Array(length); - for (let i = 0; i < length; i++) { - floatArray[i] = (buffer[i] - 32767) / 32767; - } - return floatArray; -} - -var fpsCounter = (function() { - var lastLoop = (new Date).getMilliseconds(); - var count = 0; - var fps = 0; - - return function() { - var currentLoop = (new Date).getMilliseconds(); - if (lastLoop > currentLoop) { - fps = count; - count = 0; - } else { - count += 1; - } - lastLoop = currentLoop; - return fps; - } -}()); - -// Create our audio context -const audioContext = new (window.AudioContext || window.webkitAudioContext)(); -console.log("audio context " + audioContext); - -const playAudio = emulator => { - let audioData = emulator.collect_audio_samples(); - - let frameCount = audioData.length / 2; - const audioBuffer = audioContext.createBuffer( - 2, - frameCount, - audioContext.sampleRate - ); - - for (let channel = 0; channel < 2; channel++) { - let nowBuffering = audioBuffer.getChannelData(channel); - for (let i = 0; i < frameCount; i++) { - // audio data frames are interleaved - nowBuffering[i] = audioData[i*2 + channel]; - } - } - - const audioSource = audioContext.createBufferSource(); - audioSource.buffer = audioBuffer; - - audioSource.connect(audioContext.destination); - audioSource.start(); -} - -const emulatorLoop = function() { - emulator.run_frame(ctx); - fps_text.innerHTML = fpsCounter(); - playAudio(emulator); -} - -function startEmulator() { - if (!ensureFilesLoaded()) { - return; - } - - if (intervalId != 0) { - console.log("killing emulator"); - clearInterval(intervalId); - intervalId = 0; - emulator = null; - } - - emulator = new wasm.Emulator(biosData, romData); - - if (shouldSkipBios) { - emulator.skip_bios(); - } - - intervalId = setInterval(emulatorLoop, 16); -} - -const biosCached = localStorage.getItem("biosCached"); -if (biosCached) { - console.log("found cached bios!"); - document.getElementById("bios-file-input").parentNode.style.display = "none"; - document.getElementById("reloadBios").classList.remove("hidden"); - biosData = new Uint8Array(JSON.parse(biosCached)); -} else { - console.log("Bios is not cached"); - var loadBios = biosFile => { - console.log("loaded file " + biosFile) - loadLocalFile(biosFile, result => { - console.log("Loaded bios (" + result.length + " bytes )"); - biosData = result; - - console.log("Caching to localStorage"); - localStorage.setItem("biosCached", JSON.stringify(Array.from(biosData))); - document.getElementById("bios-file-input").parentNode.style.display = "none"; - }); - }; - document.getElementById("bios-file-input").addEventListener('change', event => { - loadBios(event.target.files[0]) - }, false); -} - -document.getElementById("reloadBios").addEventListener('click', function() { - this.classList.add("hidden"); - document.getElementById("bios-file-input").parentNode.style.display = "block"; - localStorage.removeItem("biosCached"); -}, false); - -function loadRom(romFile) { - var promise = new Promise(function(resolve, reject) { - loadLocalFile(romFile, result => { - console.log('Loaded "' + romFile.name + '" ! length: ' + result.length); - - var rom_info = wasm.parse_rom_header(result); - var rom_info2 = wasm.parse_rom_header(result); - - console.log("Game Code" + rom_info.get_game_code()); - console.log("Game Title" + rom_info.get_game_title()); - - romData = result; - resolve(); - }); - }); - - return promise; -}; - -let dropArea = document.getElementById('screen'); - -['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { - dropArea.addEventListener(eventName, - e => { - // prevent default events - e.preventDefault(); - e.stopPropagation(); - }, false) -}); - -dropArea.addEventListener('dragover', e => { - dropArea.classList.add('hover'); -}, false); - -dropArea.addEventListener('dragleave', e => { - dropArea.classList.remove('hover'); -}, false); - -dropArea.addEventListener('drop', e => { - dropArea.classList.remove('hover'); - var files = e.dataTransfer.files; - loadRom(files[0]).then(startEmulator); -}, true); - -document.getElementById("skipBios").addEventListener('change', e => { - shouldSkipBios = e.target.checked; - localStorage.setItem("skipBios", JSON.stringify(shouldSkipBios)); -}); - -document.getElementById("rom-file-input").addEventListener('change', e => { - loadRom(e.target.files[0]).then(startEmulator); -}, false); - -document.getElementById("startEmulator").addEventListener('click', e => { - if (null == emulator) { - startEmulator(); - } -}, false); - -document.getElementById("maxFps").addEventListener('change', e => { - if (intervalId != 0) { - let checked = e.target.checked; - clearInterval(intervalId); - if (checked) { - intervalId = setInterval(emulatorLoop, 0); - } else { - intervalId = setInterval(emulatorLoop, 16); - } - - } -}) - -document.addEventListener("keydown", e => { - if (null != emulator) { - emulator.key_down(e.key) - } -}, false); - -document.addEventListener("keyup", e => { - if (null != emulator) { - emulator.key_up(e.key) - } -}, false); \ No newline at end of file diff --git a/platform/rustboyadvance-wasm/app/package-lock.json b/platform/rustboyadvance-wasm/app/package-lock.json deleted file mode 100644 index 4437999..0000000 --- a/platform/rustboyadvance-wasm/app/package-lock.json +++ /dev/null @@ -1,8390 +0,0 @@ -{ - "name": "rustboyadvance-wasm", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@jimp/bmp": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", - "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "bmp-js": "^0.1.0", - "core-js": "^3.4.1" - } - }, - "@jimp/core": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", - "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^3.4.1", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } - } - }, - "@jimp/custom": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", - "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/gif": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", - "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", - "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1", - "jpeg-js": "^0.3.4" - } - }, - "@jimp/plugin-blit": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", - "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-blur": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", - "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-circle": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", - "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-color": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", - "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", - "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-cover": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", - "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-crop": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", - "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-displace": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", - "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-dither": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", - "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", - "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-flip": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", - "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", - "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-invert": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", - "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-mask": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", - "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-normalize": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", - "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-print": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", - "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", - "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-rotate": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", - "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-scale": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", - "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-shadow": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", - "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugin-threshold": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", - "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1" - } - }, - "@jimp/plugins": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", - "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.9.8", - "@jimp/plugin-blur": "^0.9.8", - "@jimp/plugin-circle": "^0.9.8", - "@jimp/plugin-color": "^0.9.8", - "@jimp/plugin-contain": "^0.9.8", - "@jimp/plugin-cover": "^0.9.8", - "@jimp/plugin-crop": "^0.9.8", - "@jimp/plugin-displace": "^0.9.8", - "@jimp/plugin-dither": "^0.9.8", - "@jimp/plugin-fisheye": "^0.9.8", - "@jimp/plugin-flip": "^0.9.8", - "@jimp/plugin-gaussian": "^0.9.8", - "@jimp/plugin-invert": "^0.9.8", - "@jimp/plugin-mask": "^0.9.8", - "@jimp/plugin-normalize": "^0.9.8", - "@jimp/plugin-print": "^0.9.8", - "@jimp/plugin-resize": "^0.9.8", - "@jimp/plugin-rotate": "^0.9.8", - "@jimp/plugin-scale": "^0.9.8", - "@jimp/plugin-shadow": "^0.9.8", - "@jimp/plugin-threshold": "^0.9.8", - "core-js": "^3.4.1", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", - "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.8", - "core-js": "^3.4.1", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", - "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", - "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.9.8", - "@jimp/gif": "^0.9.8", - "@jimp/jpeg": "^0.9.8", - "@jimp/png": "^0.9.8", - "@jimp/tiff": "^0.9.8", - "core-js": "^3.4.1", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", - "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true, - "optional": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/favicons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/favicons/-/favicons-5.5.0.tgz", - "integrity": "sha512-s76OlRaBfqtGu2ZBobnZv2NETfqsQUVfKKlOkKNGo4ArBsqiblodKsnQ3j29hCCgmpQacEfLxealV96za+tzVQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz", - "integrity": "sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw==", - "dev": true, - "optional": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz", - "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true, - "optional": true - }, - "@types/tapable": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", - "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==", - "dev": true, - "optional": true - }, - "@types/uglify-js": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.0.tgz", - "integrity": "sha512-3ZcoyPYHVOCcLpnfZwD47KFLr8W/mpUcgjpf1M4Q78TMJIw7KMAHSjiCLJp1z3ZrBR9pTLbe191O0TldFK5zcw==", - "dev": true, - "optional": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "@types/webpack": { - "version": "4.41.12", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.12.tgz", - "integrity": "sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w==", - "dev": true, - "optional": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "@types/webpack-sources": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", - "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", - "dev": true - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "http://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true - }, - "author-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", - "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "bignumber.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", - "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", - "dev": true - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "dev": true, - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^3.0.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", - "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", - "dev": true, - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "dev": true, - "optional": true, - "requires": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", - "dev": true, - "requires": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - } - } - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "optional": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "optional": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "optional": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "optional": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true, - "optional": true - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true, - "optional": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "optional": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "optional": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "dev": true, - "optional": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true, - "optional": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "favicons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/favicons/-/favicons-5.5.0.tgz", - "integrity": "sha512-xZ4B+fZDuq2y999iorrYq4KuBT3OIZHU+CVfjOWQbjOC1OiU0xbf6pp4Ju/yAfJn7W74RVrC3Cv0oqR5CLvviw==", - "dev": true, - "requires": { - "clone": "^2.1.2", - "colors": "^1.4.0", - "core-js": "^3.4.5", - "image-size": "^0.8.3", - "jimp": "^0.9.3", - "jsontoxml": "^1.0.1", - "lodash.defaultsdeep": "^4.6.1", - "require-directory": "^2.1.1", - "sharp": "^0.23.3", - "through2": "^3.0.1", - "tinycolor2": "^1.4.1", - "to-ico": "^1.1.5", - "vinyl": "^2.2.0", - "xml2js": "^0.4.22" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - } - } - }, - "favicons-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/favicons-webpack-plugin/-/favicons-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-u5wIPl++qjoU+sOmCOurh8Wfmojh/7FmIQbIkteh5aYiCkJLSj/SyQps7WvVKAgJ3njKCOuxKiqIDFZnvhbEYQ==", - "dev": true, - "requires": { - "@types/favicons": "5.5.0", - "cache-loader": "^4.1.0", - "camelcase": "^5.3.1", - "favicons": "5.5.0", - "find-cache-dir": "^3.2.0", - "find-root": "^1.1.0", - "html-webpack-plugin": ">=4.0.0 || ^4.0.0-beta.11", - "loader-utils": "^1.2.3", - "parse-author": "^2.0.0", - "parse5": "^5.1.0", - "tapable": "^1.1.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", - "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", - "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "optional": true - }, - "hello-wasm-pack": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/hello-wasm-pack/-/hello-wasm-pack-0.1.0.tgz", - "integrity": "sha512-3hx0GDkDLf/a9ThCMV2qG4mwza8N/MCtm8aeFFc/cdBCL2zMJ1kW1wjNl7xPqD1lz8Yl5+uhnc/cpui4dLwz/w==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", - "integrity": "sha512-tiYE76O1zunboByeB/nFGwUEb263Z3nkNv6Lz2oLC1s6M36bLKfTrjQ+7ssVfaucVllE+N7hh/FbpbxvnIA+LQ==", - "dev": true, - "optional": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "optional": true - } - } - }, - "html-webpack-plugin": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.2.1.tgz", - "integrity": "sha512-zTTPxKJ8bgRe4RVDzT1MZW8ysW5wwDfJmD3AN+7mw2MKMWZJibZzBgHaDqnL6FJg1kvk38sQPMJNmI8Q1Ntr9A==", - "dev": true, - "optional": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "optional": true - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "optional": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", - "dev": true - }, - "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "image-size": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.8.3.tgz", - "integrity": "sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==", - "dev": true, - "requires": { - "queue": "6.0.1" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jimp": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", - "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.9.8", - "@jimp/plugins": "^0.9.8", - "@jimp/types": "^0.9.8", - "core-js": "^3.4.1", - "regenerator-runtime": "^0.13.3" - } - }, - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "jsontoxml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", - "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "load-bmfont": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", - "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, - "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", - "dev": true - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "dev": true, - "requires": { - "mime-db": "1.43.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-classic": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", - "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", - "dev": true - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "optional": true, - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - }, - "node-abi": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz", - "integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==", - "dev": true, - "requires": { - "semver": "^5.4.1" - } - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "optional": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "dev": true, - "optional": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-author": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", - "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", - "dev": true, - "requires": { - "author-regex": "^1.0.0" - } - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse-png": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-1.1.2.tgz", - "integrity": "sha1-9cKtfHmTSQmGAgooTBmu5FlxH/I=", - "dev": true, - "requires": { - "pngjs": "^3.2.0" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "dev": true, - "optional": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dev": true, - "requires": { - "pngjs": "^3.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "optional": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "queue": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz", - "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==", - "dev": true, - "requires": { - "inherits": "~2.0.3" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "read-chunk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", - "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "optional": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "optional": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - } - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resize-img": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/resize-img/-/resize-img-1.1.2.tgz", - "integrity": "sha1-+tZQ+vPvLFPqYxErwnLZXp2SVQ4=", - "dev": true, - "requires": { - "bmp-js": "0.0.1", - "file-type": "^3.8.0", - "get-stream": "^2.0.0", - "jimp": "^0.2.21", - "jpeg-js": "^0.1.1", - "parse-png": "^1.1.1" - }, - "dependencies": { - "bmp-js": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz", - "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=", - "dev": true - }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "jimp": { - "version": "0.2.28", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", - "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", - "dev": true, - "requires": { - "bignumber.js": "^2.1.0", - "bmp-js": "0.0.3", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.2.0", - "load-bmfont": "^1.2.3", - "mime": "^1.3.4", - "mkdirp": "0.5.1", - "pixelmatch": "^4.0.0", - "pngjs": "^3.0.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" - }, - "dependencies": { - "bmp-js": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", - "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=", - "dev": true - }, - "jpeg-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", - "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=", - "dev": true - } - } - }, - "jpeg-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", - "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=", - "dev": true - } - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rustboyadvance-wasm": { - "version": "file:../pkg" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", - "dev": true, - "requires": { - "color": "^3.1.2", - "detect-libc": "^1.0.3", - "nan": "^2.14.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.3", - "semver": "^6.3.0", - "simple-get": "^3.1.0", - "tar": "^5.0.5", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-to": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", - "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", - "dev": true - }, - "stream-to-buffer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", - "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", - "dev": true, - "requires": { - "stream-to": "~0.2.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", - "dev": true - }, - "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", - "dev": true, - "requires": { - "chownr": "^1.1.3", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", - "dev": true, - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "terser": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.4.tgz", - "integrity": "sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timm": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz", - "integrity": "sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==", - "dev": true - }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-ico": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/to-ico/-/to-ico-1.1.5.tgz", - "integrity": "sha512-5kIh7m7bkIlqIESEZkL8gAMMzucXKfPe3hX2FoDY5HEAfD9OJU+Qh9b6Enp74w0qRcxVT5ejss66PHKqc3AVkg==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "buffer-alloc": "^1.1.0", - "image-size": "^0.5.0", - "parse-png": "^1.0.0", - "resize-img": "^1.1.0" - }, - "dependencies": { - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true - } - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "^1.0.1" - }, - "dependencies": { - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dev": true, - "requires": { - "pako": "^1.0.5" - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true, - "optional": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz", - "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.6", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.25", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dev": true, - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/platform/rustboyadvance-wasm/app/package.json b/platform/rustboyadvance-wasm/app/package.json deleted file mode 100644 index 185bfab..0000000 --- a/platform/rustboyadvance-wasm/app/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "rustboyadvance-wasm", - "collaborators": [ - "Michel Heily " - ], - "version": "0.1.0", - "main": "index.js", - "bin": { - "create-wasm-app": ".bin/create-wasm-app.js" - }, - "scripts": { - "build": "webpack --config webpack.config.js", - "start": "webpack-dev-server" - }, - "dependencies": { - "rustboyadvance-wasm": "file:../pkg" - }, - "devDependencies": { - "copy-webpack-plugin": "^5.0.0", - "favicons-webpack-plugin": "^3.0.1", - "hello-wasm-pack": "^0.1.0", - "webpack": "^4.29.3", - "webpack-cli": "^3.1.0", - "webpack-dev-server": "^3.1.5" - } -} diff --git a/platform/rustboyadvance-wasm/app/webpack.config.js b/platform/rustboyadvance-wasm/app/webpack.config.js deleted file mode 100644 index f125390..0000000 --- a/platform/rustboyadvance-wasm/app/webpack.config.js +++ /dev/null @@ -1,34 +0,0 @@ -const CopyWebpackPlugin = require("copy-webpack-plugin"); -const FaviconsWebpackPlugin = require('favicons-webpack-plugin') - -const path = require('path'); - -module.exports = { - entry: "./bootstrap.js", - output: { - path: path.resolve(__dirname, "dist"), - filename: "bootstrap.js", - }, - mode: "development", - plugins: [ - new CopyWebpackPlugin(['index.html', '../../../assets/icon.png']), - new FaviconsWebpackPlugin({ - logo: '../../../assets/icon.png', - cache: true, - mode: 'webapp', - devMode: 'webapp', - favicons: { - appName: 'rustboyadvance', - appDescription: 'Web Demo for rustboyadvance', - developerName: 'michel', - developerURL: null, // prevent retrieving from the nearest package.json - background: '#ddd', - theme_color: '#333', - icons: { - coast: false, - yandex: false, - } - } - }) - ], -}; diff --git a/platform/rustboyadvance-wasm/package-lock.json b/platform/rustboyadvance-wasm/package-lock.json deleted file mode 100644 index 48e341a..0000000 --- a/platform/rustboyadvance-wasm/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} diff --git a/platform/rustboyadvance-wasm/src/emulator.rs b/platform/rustboyadvance-wasm/src/emulator.rs deleted file mode 100644 index 481209b..0000000 --- a/platform/rustboyadvance-wasm/src/emulator.rs +++ /dev/null @@ -1,125 +0,0 @@ -use rustboyadvance_utils::audio::SampleConsumer; -use wasm_bindgen::prelude::*; -use wasm_bindgen::Clamped; - -use js_sys::Float32Array; - -use web_sys::CanvasRenderingContext2d; - -use rustboyadvance_core::keypad as gba_keypad; -use rustboyadvance_core::prelude::*; - -use bit::BitIndex; - -#[wasm_bindgen] -pub struct Emulator { - gba: GameBoyAdvance, - audio_consumer: SampleConsumer, - frame: Option>, -} - -fn translate_frame_to_u8(input_fb: &[u32], out_fb: &mut [u8]) { - // TODO optimize - for i in 0..input_fb.len() { - let color = input_fb[i]; - out_fb[4 * i + 0] = ((color >> 16) & 0xff) as u8; - out_fb[4 * i + 1] = ((color >> 8) & 0xff) as u8; - out_fb[4 * i + 2] = (color & 0xff) as u8; - out_fb[4 * i + 3] = 255; - } -} - -fn convert_sample(s: i16) -> f32 { - (s as f32) / 32767_f32 -} - -#[wasm_bindgen] -impl Emulator { - #[wasm_bindgen(constructor)] - pub fn new(bios: &[u8], rom: &[u8]) -> Result { - let audio_ctx = web_sys::AudioContext::new()?; - let (audio_device, audio_consumer) = - SimpleAudioInterface::create_channel(audio_ctx.sample_rate() as i32, None); - - let gamepak = GamepakBuilder::new() - .take_buffer(rom.to_vec().into_boxed_slice()) - .without_backup_to_file() - .build() - .unwrap(); - - let gba = GameBoyAdvance::new(bios.to_vec().into_boxed_slice(), gamepak, audio_device); - - Ok(Emulator { - gba, - audio_consumer, - frame: Some(vec![0; 240 * 160 * 4].into_boxed_slice()), - }) - } - - pub fn skip_bios(&mut self) { - self.gba.skip_bios(); - } - - pub fn run_frame(&mut self, ctx: &CanvasRenderingContext2d) -> Result<(), JsValue> { - self.gba.frame(); - let mut frame = self.frame.take().unwrap(); - translate_frame_to_u8(self.gba.get_frame_buffer(), &mut frame); - let data = - web_sys::ImageData::new_with_u8_clamped_array_and_sh(Clamped(&mut frame), 240, 160)?; - self.frame.replace(frame); - ctx.put_image_data(&data, 0.0, 0.0) - } - - fn map_key(event_key: &str) -> Option { - match event_key { - "Enter" => Some(gba_keypad::Keys::Start), - "Backspace" => Some(gba_keypad::Keys::Select), - "ArrowUp" => Some(gba_keypad::Keys::Up), - "ArrowDown" => Some(gba_keypad::Keys::Down), - "ArrowLeft" => Some(gba_keypad::Keys::Left), - "ArrowRight" => Some(gba_keypad::Keys::Right), - "z" => Some(gba_keypad::Keys::ButtonB), - "x" => Some(gba_keypad::Keys::ButtonA), - "a" => Some(gba_keypad::Keys::ButtonL), - "s" => Some(gba_keypad::Keys::ButtonR), - _ => None, - } - } - - pub fn key_down(&mut self, event_key: &str) { - debug!("Key down: {}", event_key); - if let Some(key) = Emulator::map_key(event_key) { - self.gba.get_key_state_mut().set_bit(key as usize, false); - } - } - - pub fn key_up(&mut self, event_key: &str) { - debug!("Key up: {}", event_key); - if let Some(key) = Emulator::map_key(event_key) { - self.gba.get_key_state_mut().set_bit(key as usize, true); - } - } - - pub fn test_fps(&mut self) { - use rustboyadvance_utils::FpsCounter; - - let mut fps_counter = FpsCounter::default(); - - self.gba.skip_bios(); - for _ in 0..6000 { - self.gba.frame(); - if let Some(fps) = fps_counter.tick() { - info!("FPS: {}", fps); - } - } - } - - pub fn collect_audio_samples(&mut self) -> Result { - let mut samples = Vec::with_capacity(self.audio_consumer.len()); - while let Some(sample) = self.audio_consumer.pop() { - samples.push(convert_sample(sample)); - } - - Ok(Float32Array::from(samples.as_slice())) - } -} diff --git a/platform/rustboyadvance-wasm/src/lib.rs b/platform/rustboyadvance-wasm/src/lib.rs deleted file mode 100644 index b0cd769..0000000 --- a/platform/rustboyadvance-wasm/src/lib.rs +++ /dev/null @@ -1,59 +0,0 @@ -mod utils; - -use wasm_bindgen::prelude::*; - -#[macro_use] -extern crate log; - -use wasm_bindgen_console_logger::DEFAULT_LOGGER; - -use rustboyadvance_core::cartridge; - -pub mod emulator; - -// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global -// allocator. -#[cfg(feature = "wee_alloc")] -#[global_allocator] -static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; - -#[wasm_bindgen] -pub fn init() { - utils::set_panic_hook(); - - log::set_logger(&DEFAULT_LOGGER).unwrap(); - log::set_max_level(log::LevelFilter::Info); - - info!("Initialized wasm module"); -} - -#[wasm_bindgen] -pub struct RomInfo { - game_code: String, - game_title: String, -} - -#[wasm_bindgen] -impl RomInfo { - pub fn get_game_code(&self) -> String { - self.game_code.to_string() - } - - pub fn get_game_title(&self) -> String { - self.game_title.to_string() - } -} - -impl From for RomInfo { - fn from(header: cartridge::header::CartridgeHeader) -> RomInfo { - RomInfo { - game_code: header.game_code, - game_title: header.game_title, - } - } -} - -#[wasm_bindgen] -pub fn parse_rom_header(rom_bin: &[u8]) -> RomInfo { - cartridge::header::parse(rom_bin).unwrap().into() -} diff --git a/platform/rustboyadvance-wasm/src/utils.rs b/platform/rustboyadvance-wasm/src/utils.rs deleted file mode 100644 index b1d7929..0000000 --- a/platform/rustboyadvance-wasm/src/utils.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub fn set_panic_hook() { - // When the `console_error_panic_hook` feature is enabled, we can call the - // `set_panic_hook` function at least once during initialization, and then - // we will get better error messages if our code ever panics. - // - // For more details see - // https://github.com/rustwasm/console_error_panic_hook#readme - #[cfg(feature = "console_error_panic_hook")] - console_error_panic_hook::set_once(); -} diff --git a/platform/rustboyadvance-wasm/tests/web.rs b/platform/rustboyadvance-wasm/tests/web.rs deleted file mode 100644 index de5c1da..0000000 --- a/platform/rustboyadvance-wasm/tests/web.rs +++ /dev/null @@ -1,13 +0,0 @@ -//! Test suite for the Web and headless browsers. - -#![cfg(target_arch = "wasm32")] - -extern crate wasm_bindgen_test; -use wasm_bindgen_test::*; - -wasm_bindgen_test_configure!(run_in_browser); - -#[wasm_bindgen_test] -fn pass() { - assert_eq!(1 + 1, 2); -} diff --git a/utils/Cargo.toml b/utils/Cargo.toml index 0eb9f53..a1500a4 100644 --- a/utils/Cargo.toml +++ b/utils/Cargo.toml @@ -10,6 +10,3 @@ ringbuf = "0.2.2" log = "0.4.8" goblin = "0.2" - -[target.'cfg(target_arch="wasm32")'.dependencies] -instant = { version = "0.1.2", features = ["wasm-bindgen"] } diff --git a/utils/src/lib.rs b/utils/src/lib.rs index fe4d3e3..622d5a9 100644 --- a/utils/src/lib.rs +++ b/utils/src/lib.rs @@ -15,15 +15,6 @@ fn now() -> Instant { time::Instant::now() } -#[cfg(target_arch = "wasm32")] -use instant; -#[cfg(target_arch = "wasm32")] -type Instant = instant::Instant; -#[cfg(target_arch = "wasm32")] -fn now() -> Instant { - instant::Instant::now() -} - pub fn read_bin_file(filename: &Path) -> io::Result> { let mut buf = Vec::new(); let mut file = File::open(filename)?;