From 0ee372882ceb4f309fbae08258cfed34b4d31224 Mon Sep 17 00:00:00 2001 From: An Phan Date: Sun, 13 Dec 2015 12:42:28 +0800 Subject: [PATCH] Big Bang --- .babelrc | 3 + .editorconfig | 3 + .env.example | 29 + .gitattributes | 3 + .gitignore | 75 + .htaccess | 41 + .jshintrc | 6 + .travis.yml | 15 + app/Application.php | 35 + app/Console/Commands/SyncMedia.php | 86 + app/Console/Kernel.php | 28 + app/Events/Event.php | 8 + app/Exceptions/Handler.php | 51 + app/Facades/Media.php | 13 + app/Http/Controllers/API/Controller.php | 9 + app/Http/Controllers/API/DataController.php | 37 + .../Controllers/API/InteractionController.php | 58 + .../Controllers/API/PlaylistController.php | 90 + .../Controllers/API/SettingController.php | 29 + app/Http/Controllers/API/SongController.php | 43 + app/Http/Controllers/API/UserController.php | 81 + app/Http/Controllers/Auth/AuthController.php | 68 + .../Controllers/Auth/PasswordController.php | 30 + app/Http/Controllers/Controller.php | 13 + app/Http/Kernel.php | 42 + app/Http/Middleware/Authenticate.php | 47 + app/Http/Middleware/EncryptCookies.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 43 + app/Http/Middleware/VerifyCsrfToken.php | 17 + .../Requests/API/BatchInteractionRequest.php | 28 + .../Requests/API/PlaylistStoreRequest.php | 29 + .../Requests/API/ProfileUpdateRequest.php | 29 + app/Http/Requests/API/Request.php | 10 + app/Http/Requests/API/SettingRequest.php | 28 + app/Http/Requests/API/UserStoreRequest.php | 30 + app/Http/Requests/API/UserUpdateRequest.php | 29 + app/Http/Requests/Request.php | 10 + app/Http/Streamers/BaseStreamer.php | 39 + app/Http/Streamers/PHPStreamer.php | 116 + app/Http/Streamers/StreamerInterface.php | 11 + app/Http/Streamers/XSendFileStreamer.php | 23 + app/Http/routes.php | 38 + app/Jobs/Job.php | 21 + app/Listeners/.gitkeep | 0 app/Models/Album.php | 109 + app/Models/Artist.php | 54 + app/Models/Interaction.php | 132 + app/Models/Playlist.php | 29 + app/Models/Setting.php | 69 + app/Models/Song.php | 68 + app/Models/User.php | 53 + app/Policies/.gitkeep | 0 app/Providers/AppServiceProvider.php | 32 + app/Providers/AuthServiceProvider.php | 31 + app/Providers/EventServiceProvider.php | 45 + app/Providers/MediaServiceProvider.php | 31 + app/Providers/RouteServiceProvider.php | 44 + app/Services/Media.php | 231 ++ app/Traits/CanFilterByUser.php | 16 + apple-touch-icon-precomposed.png | Bin 0 -> 4342 bytes artisan | 51 + bootstrap/app.php | 55 + bootstrap/autoload.php | 34 + bootstrap/cache/.gitignore | 2 + bower.json | 29 + composer.json | 54 + composer.lock | 3241 +++++++++++++++++ config/app.php | 206 ++ config/auth.php | 67 + config/broadcasting.php | 52 + config/cache.php | 79 + config/compile.php | 35 + config/database.php | 126 + config/filesystems.php | 85 + config/mail.php | 124 + config/queue.php | 94 + config/services.php | 38 + config/session.php | 153 + config/view.php | 33 + database/.gitignore | 1 + database/factories/ModelFactory.php | 46 + database/migrations/.gitkeep | 0 .../2014_10_12_000000_create_users_table.php | 35 + ...12_100000_create_password_resets_table.php | 31 + ...2015_11_23_074600_create_artists_table.php | 31 + .../2015_11_23_074709_create_albums_table.php | 35 + .../2015_11_23_074713_create_songs_table.php | 39 + ...15_11_23_074723_create_playlists_table.php | 34 + ...11_23_074733_create_interactions_table.php | 37 + ...1_23_082854_create_playlist_song_table.php | 34 + ...015_11_25_033351_create_settings_table.php | 32 + database/seeds/.gitkeep | 0 database/seeds/AlbumTableSeeder.php | 21 + database/seeds/ArtistTableSeeder.php | 18 + database/seeds/DatabaseSeeder.php | 24 + database/seeds/SettingTableSeeder.php | 17 + database/seeds/UserTableSeeder.php | 29 + favicon.ico | Bin 0 -> 4286 bytes gulpfile.js | 23 + index.php | 58 + package.json | 46 + phpspec.yml | 5 + phpunit.xml | 27 + resources/assets/css/meyer-reset.min.css | 1 + resources/assets/db/db.mwb | Bin 0 -> 13463 bytes resources/assets/img/covers/unknown-album.png | Bin 0 -> 25502 bytes resources/assets/img/drag-icon.png | Bin 0 -> 704 bytes resources/assets/img/logo.png | Bin 0 -> 20634 bytes resources/assets/img/logo.svg | 31 + resources/assets/js/app.vue | 208 ++ .../components/main-wrapper/extra/index.vue | 92 + .../components/main-wrapper/extra/lyrics.vue | 42 + .../js/components/main-wrapper/index.vue | 27 + .../main-wrapper/main-content/albums.vue | 92 + .../main-wrapper/main-content/artists.vue | 92 + .../main-wrapper/main-content/favorites.vue | 67 + .../main-wrapper/main-content/index.vue | 190 + .../main-wrapper/main-content/playlist.vue | 106 + .../main-wrapper/main-content/profile.vue | 150 + .../main-wrapper/main-content/queue.vue | 184 + .../main-wrapper/main-content/settings.vue | 75 + .../main-wrapper/main-content/songs.vue | 65 + .../main-wrapper/main-content/users.vue | 378 ++ .../components/main-wrapper/sidebar/index.vue | 177 + .../main-wrapper/sidebar/playlists.vue | 248 ++ .../js/components/shared/album-item.vue | 40 + .../js/components/shared/artist-item.vue | 39 + .../assets/js/components/shared/overlay.vue | 35 + .../assets/js/components/shared/song-item.vue | 78 + .../assets/js/components/shared/song-list.vue | 471 +++ .../assets/js/components/shared/sound-bar.vue | 86 + .../js/components/site-footer/index.vue | 568 +++ .../js/components/site-header/index.vue | 84 + .../js/components/site-header/search-form.vue | 83 + .../js/components/site-header/user-badge.vue | 77 + resources/assets/js/config/index.js | 4 + resources/assets/js/directives/focus.js | 14 + resources/assets/js/main.js | 12 + resources/assets/js/mixins/infinite-scroll.js | 37 + resources/assets/js/services/http.js | 57 + resources/assets/js/services/ls.js | 17 + resources/assets/js/services/playback.js | 291 ++ resources/assets/js/services/utils.js | 29 + resources/assets/js/stores/album.js | 58 + resources/assets/js/stores/artist.js | 81 + resources/assets/js/stores/favorite.js | 93 + resources/assets/js/stores/playlist.js | 84 + resources/assets/js/stores/preference.js | 43 + resources/assets/js/stores/queue.js | 137 + resources/assets/js/stores/setting.js | 27 + resources/assets/js/stores/shared.js | 34 + resources/assets/js/stores/song.js | 141 + resources/assets/js/stores/user.js | 159 + resources/assets/js/stubs/album.js | 11 + resources/assets/js/stubs/artist.js | 5 + resources/assets/js/stubs/playlist.js | 4 + resources/assets/js/stubs/settings.js | 3 + resources/assets/js/stubs/song.js | 13 + resources/assets/js/stubs/user.js | 7 + .../assets/js/tests/blobs/interactions.js | 32 + resources/assets/js/tests/blobs/media.js | 160 + resources/assets/js/tests/blobs/users.js | 23 + resources/assets/js/tests/services/lsTest.js | 36 + .../assets/js/tests/services/utilsTest.js | 15 + resources/assets/js/tests/stores/albumTest.js | 37 + .../assets/js/tests/stores/artistTest.js | 36 + .../assets/js/tests/stores/preferenceTest.js | 30 + resources/assets/js/tests/stores/queueTest.js | 110 + resources/assets/js/tests/stores/songTest.js | 56 + resources/assets/js/tests/stores/userTest.js | 68 + resources/assets/psd/logo.psd | Bin 0 -> 48218 bytes resources/assets/sass/app.scss | 6 + resources/assets/sass/partials/_mixins.scss | 106 + resources/assets/sass/partials/_shared.scss | 109 + resources/assets/sass/partials/_vars.scss | 33 + resources/assets/sass/vendors/_plyr.scss | 651 ++++ resources/lang/en/auth.php | 19 + resources/lang/en/pagination.php | 19 + resources/lang/en/passwords.php | 22 + resources/lang/en/validation.php | 110 + resources/views/auth/login.blade.php | 97 + resources/views/errors/503.blade.php | 47 + resources/views/index.blade.php | 24 + resources/views/vendor/.gitkeep | 0 robots.txt | 2 + server.php | 21 + storage/app/.gitignore | 2 + storage/framework/.gitignore | 7 + storage/framework/cache/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/views/.gitignore | 2 + tests/InteractionTest.php | 99 + tests/MediaTest.php | 54 + tests/PlaylistTest.php | 117 + tests/SettingTest.php | 44 + tests/TestCase.php | 83 + tests/UserTest.php | 66 + tests/songs/blank.mp3 | Bin 0 -> 80942 bytes tests/songs/fake.mp3 | 2 + tests/songs/full.mp3 | Bin 0 -> 72081 bytes tests/songs/lorem.mp3 | Bin 0 -> 40818 bytes tests/songs/subdir/back-in-black.ogg | Bin 0 -> 191675 bytes tests/songs/subdir/no-name.mp3 | Bin 0 -> 40813 bytes tests/songs/subdir/sic.mp3 | Bin 0 -> 80937 bytes tile-wide.png | Bin 0 -> 4005 bytes tile.png | Bin 0 -> 8106 bytes 206 files changed, 15082 insertions(+) create mode 100644 .babelrc create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 .jshintrc create mode 100644 .travis.yml create mode 100644 app/Application.php create mode 100644 app/Console/Commands/SyncMedia.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Events/Event.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Facades/Media.php create mode 100644 app/Http/Controllers/API/Controller.php create mode 100644 app/Http/Controllers/API/DataController.php create mode 100644 app/Http/Controllers/API/InteractionController.php create mode 100644 app/Http/Controllers/API/PlaylistController.php create mode 100644 app/Http/Controllers/API/SettingController.php create mode 100644 app/Http/Controllers/API/SongController.php create mode 100644 app/Http/Controllers/API/UserController.php create mode 100644 app/Http/Controllers/Auth/AuthController.php create mode 100644 app/Http/Controllers/Auth/PasswordController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Http/Requests/API/BatchInteractionRequest.php create mode 100644 app/Http/Requests/API/PlaylistStoreRequest.php create mode 100644 app/Http/Requests/API/ProfileUpdateRequest.php create mode 100644 app/Http/Requests/API/Request.php create mode 100644 app/Http/Requests/API/SettingRequest.php create mode 100644 app/Http/Requests/API/UserStoreRequest.php create mode 100644 app/Http/Requests/API/UserUpdateRequest.php create mode 100644 app/Http/Requests/Request.php create mode 100644 app/Http/Streamers/BaseStreamer.php create mode 100644 app/Http/Streamers/PHPStreamer.php create mode 100644 app/Http/Streamers/StreamerInterface.php create mode 100644 app/Http/Streamers/XSendFileStreamer.php create mode 100644 app/Http/routes.php create mode 100644 app/Jobs/Job.php create mode 100644 app/Listeners/.gitkeep create mode 100644 app/Models/Album.php create mode 100644 app/Models/Artist.php create mode 100644 app/Models/Interaction.php create mode 100644 app/Models/Playlist.php create mode 100644 app/Models/Setting.php create mode 100644 app/Models/Song.php create mode 100644 app/Models/User.php create mode 100644 app/Policies/.gitkeep create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/MediaServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/Services/Media.php create mode 100644 app/Traits/CanFilterByUser.php create mode 100644 apple-touch-icon-precomposed.png create mode 100755 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/autoload.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bower.json create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/compile.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/view.php create mode 100644 database/.gitignore create mode 100644 database/factories/ModelFactory.php create mode 100644 database/migrations/.gitkeep create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 database/migrations/2015_11_23_074600_create_artists_table.php create mode 100644 database/migrations/2015_11_23_074709_create_albums_table.php create mode 100644 database/migrations/2015_11_23_074713_create_songs_table.php create mode 100644 database/migrations/2015_11_23_074723_create_playlists_table.php create mode 100644 database/migrations/2015_11_23_074733_create_interactions_table.php create mode 100644 database/migrations/2015_11_23_082854_create_playlist_song_table.php create mode 100644 database/migrations/2015_11_25_033351_create_settings_table.php create mode 100644 database/seeds/.gitkeep create mode 100644 database/seeds/AlbumTableSeeder.php create mode 100644 database/seeds/ArtistTableSeeder.php create mode 100644 database/seeds/DatabaseSeeder.php create mode 100644 database/seeds/SettingTableSeeder.php create mode 100644 database/seeds/UserTableSeeder.php create mode 100644 favicon.ico create mode 100644 gulpfile.js create mode 100644 index.php create mode 100644 package.json create mode 100644 phpspec.yml create mode 100644 phpunit.xml create mode 100644 resources/assets/css/meyer-reset.min.css create mode 100644 resources/assets/db/db.mwb create mode 100644 resources/assets/img/covers/unknown-album.png create mode 100644 resources/assets/img/drag-icon.png create mode 100644 resources/assets/img/logo.png create mode 100644 resources/assets/img/logo.svg create mode 100644 resources/assets/js/app.vue create mode 100644 resources/assets/js/components/main-wrapper/extra/index.vue create mode 100644 resources/assets/js/components/main-wrapper/extra/lyrics.vue create mode 100644 resources/assets/js/components/main-wrapper/index.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/albums.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/artists.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/favorites.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/index.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/playlist.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/profile.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/queue.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/settings.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/songs.vue create mode 100644 resources/assets/js/components/main-wrapper/main-content/users.vue create mode 100644 resources/assets/js/components/main-wrapper/sidebar/index.vue create mode 100644 resources/assets/js/components/main-wrapper/sidebar/playlists.vue create mode 100644 resources/assets/js/components/shared/album-item.vue create mode 100644 resources/assets/js/components/shared/artist-item.vue create mode 100644 resources/assets/js/components/shared/overlay.vue create mode 100644 resources/assets/js/components/shared/song-item.vue create mode 100644 resources/assets/js/components/shared/song-list.vue create mode 100644 resources/assets/js/components/shared/sound-bar.vue create mode 100644 resources/assets/js/components/site-footer/index.vue create mode 100644 resources/assets/js/components/site-header/index.vue create mode 100644 resources/assets/js/components/site-header/search-form.vue create mode 100644 resources/assets/js/components/site-header/user-badge.vue create mode 100644 resources/assets/js/config/index.js create mode 100644 resources/assets/js/directives/focus.js create mode 100644 resources/assets/js/main.js create mode 100644 resources/assets/js/mixins/infinite-scroll.js create mode 100644 resources/assets/js/services/http.js create mode 100644 resources/assets/js/services/ls.js create mode 100644 resources/assets/js/services/playback.js create mode 100644 resources/assets/js/services/utils.js create mode 100644 resources/assets/js/stores/album.js create mode 100644 resources/assets/js/stores/artist.js create mode 100644 resources/assets/js/stores/favorite.js create mode 100644 resources/assets/js/stores/playlist.js create mode 100644 resources/assets/js/stores/preference.js create mode 100644 resources/assets/js/stores/queue.js create mode 100644 resources/assets/js/stores/setting.js create mode 100644 resources/assets/js/stores/shared.js create mode 100644 resources/assets/js/stores/song.js create mode 100644 resources/assets/js/stores/user.js create mode 100644 resources/assets/js/stubs/album.js create mode 100644 resources/assets/js/stubs/artist.js create mode 100644 resources/assets/js/stubs/playlist.js create mode 100644 resources/assets/js/stubs/settings.js create mode 100644 resources/assets/js/stubs/song.js create mode 100644 resources/assets/js/stubs/user.js create mode 100644 resources/assets/js/tests/blobs/interactions.js create mode 100644 resources/assets/js/tests/blobs/media.js create mode 100644 resources/assets/js/tests/blobs/users.js create mode 100644 resources/assets/js/tests/services/lsTest.js create mode 100644 resources/assets/js/tests/services/utilsTest.js create mode 100644 resources/assets/js/tests/stores/albumTest.js create mode 100644 resources/assets/js/tests/stores/artistTest.js create mode 100644 resources/assets/js/tests/stores/preferenceTest.js create mode 100644 resources/assets/js/tests/stores/queueTest.js create mode 100644 resources/assets/js/tests/stores/songTest.js create mode 100644 resources/assets/js/tests/stores/userTest.js create mode 100644 resources/assets/psd/logo.psd create mode 100644 resources/assets/sass/app.scss create mode 100644 resources/assets/sass/partials/_mixins.scss create mode 100644 resources/assets/sass/partials/_shared.scss create mode 100644 resources/assets/sass/partials/_vars.scss create mode 100644 resources/assets/sass/vendors/_plyr.scss create mode 100644 resources/lang/en/auth.php create mode 100644 resources/lang/en/pagination.php create mode 100644 resources/lang/en/passwords.php create mode 100644 resources/lang/en/validation.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/index.blade.php create mode 100644 resources/views/vendor/.gitkeep create mode 100644 robots.txt create mode 100644 server.php create mode 100644 storage/app/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 tests/InteractionTest.php create mode 100644 tests/MediaTest.php create mode 100644 tests/PlaylistTest.php create mode 100644 tests/SettingTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/UserTest.php create mode 100644 tests/songs/blank.mp3 create mode 100644 tests/songs/fake.mp3 create mode 100644 tests/songs/full.mp3 create mode 100644 tests/songs/lorem.mp3 create mode 100644 tests/songs/subdir/back-in-black.ogg create mode 100644 tests/songs/subdir/no-name.mp3 create mode 100644 tests/songs/subdir/sic.mp3 create mode 100755 tile-wide.png create mode 100755 tile.png diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..c13c5f62 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..5839a676 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,3 @@ +[*.{js,sass,scss,json,coffee,vue}] +indent_style = space +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..c19a31ad --- /dev/null +++ b/.env.example @@ -0,0 +1,29 @@ +APP_ENV=local +APP_DEBUG=true +APP_KEY=SomeRandomString + +# Username and passsword for the initial admin account +# This info will be populated into the database during `php artisan db:seed` +# After that, it can (and should) be removed from this .env file +ADMIN_EMAIL= +ADMIN_NAME= +ADMIN_PASSWORD= + +# The maximum scan time, in seconds. Increase this if you have a huge library. +APP_MAX_SCAN_TIME=600 + +DB_HOST=localhost +DB_DATABASE=homestead +DB_USERNAME=homestead +DB_PASSWORD=secret + +CACHE_DRIVER=file +SESSION_DRIVER=file +QUEUE_DRIVER=sync + +MAIL_DRIVER=smtp +MAIL_HOST=mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..95883dea --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto +*.css linguist-vendored +*.less linguist-vendored diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..99551eac --- /dev/null +++ b/.gitignore @@ -0,0 +1,75 @@ +/vendor +/node_modules +Homestead.yaml +Homestead.json +.env +/public +/.idea +/_ide_helper.php +/config.testing +/config.local +db.mwb.bak +bower_components + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git +node_modules + + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### Sass ### +.sass-cache/ +*.css.map diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..e1a3feb6 --- /dev/null +++ b/.htaccess @@ -0,0 +1,41 @@ + + + Header set Access-Control-Allow-Origin "*" + + + + + + Options -MultiViews + + + RewriteEngine On + RewriteBase / + + # Deny access to framework directories + RewriteRule ^(app/|bootstrap/|config/|database/|resources/|storage/tests|vendor/) - [R=404,L,NC] + + # And dot files/folders (for example .env) + RedirectMatch 404 /\..*$ + + # Redirect Trailing Slashes... + RewriteRule ^(.*)/$ /$1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + + + + # Disable deflation for media files. + SetEnvIfNoCase Request_URI "^/api/play/" no-gzip dont-vary + + + + # Set a MOD_X_SENDFILE_ENABLED env variable for PHP to use later. + + XSendFile On + SetEnv MOD_X_SENDFILE_ENABLED 1 + + diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 00000000..97f496b1 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,6 @@ +{ + "globals": { "$": false }, + "globalstrict": false, + "devel": true, + "esnext": true +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..64a4351b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +language: php + +php: + - 5.6 + - 7.0 + +branches: + only: + - master + +before_script: + - curl -s http://getcomposer.org/installer | php + - php composer.phar install + +script: phpunit diff --git a/app/Application.php b/app/Application.php new file mode 100644 index 00000000..1ee5a4b0 --- /dev/null +++ b/app/Application.php @@ -0,0 +1,35 @@ +publicPath().'/build/rev-manifest.json'), true); + } + + if (isset($manifest[$file])) { + return "/public/build/{$manifest[$file]}"; + } + + throw new InvalidArgumentException("File {$file} not defined in asset manifest."); + } +} diff --git a/app/Console/Commands/SyncMedia.php b/app/Console/Commands/SyncMedia.php new file mode 100644 index 00000000..37754663 --- /dev/null +++ b/app/Console/Commands/SyncMedia.php @@ -0,0 +1,86 @@ +error("Media path hasn't been configured. Exiting."); + + return; + } + + $this->info('Koel syncing started. All we need now is just a little patience…'); + + Media::sync(null, $this); + + $this->output->writeln("Completed! {$this->synced} new or updated songs(s), " + ."{$this->ignored} unchanged song(s), " + ."and {$this->invalid} invalid file(s)."); + } + + /** + * Log a song's sync status to console. + */ + public function logToConsole($path, $result) + { + $name = basename($path); + + if ($result === true) { + if ($this->option('verbose')) { + $this->line("$name has no changes – ignoring"); + } + + ++$this->ignored; + } elseif ($result === false) { + if ($this->option('verbose')) { + $this->error("$name is not a valid media file"); + } + + ++$this->invalid; + } else { + if ($this->option('verbose')) { + $this->info("$name synced"); + } + + ++$this->synced; + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 00000000..e385eb44 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,28 @@ +getMessage(), $e); + } + + return parent::render($request, $e); + } +} diff --git a/app/Facades/Media.php b/app/Facades/Media.php new file mode 100644 index 00000000..33643428 --- /dev/null +++ b/app/Facades/Media.php @@ -0,0 +1,13 @@ +orderBy('name')->with('songs')->get()->toArray(); + + // We don't need full song data, just ID's + foreach ($playlists as &$playlist) { + $playlist['songs'] = array_pluck($playlist['songs'], 'id'); + } + + return response()->json([ + 'artists' => Artist::orderBy('name')->with('albums', with('albums.songs'))->get(), + 'settings' => Setting::all()->lists('value', 'key'), + 'playlists' => $playlists, + 'interactions' => Interaction::byCurrentUser()->get(), + 'users' => auth()->user()->is_admin ? User::all() : [], + 'user' => auth()->user(), + ]); + } +} diff --git a/app/Http/Controllers/API/InteractionController.php b/app/Http/Controllers/API/InteractionController.php new file mode 100644 index 00000000..a1dcf921 --- /dev/null +++ b/app/Http/Controllers/API/InteractionController.php @@ -0,0 +1,58 @@ +json(Interaction::increasePlayCount($request->input('id'))); + } + + /** + * Like or unlike a song as the currently authenticated user. + * + * @param Request $request + * + * @return \Illuminate\Http\JsonResponse + */ + public function like(Request $request) + { + return response()->json(Interaction::toggleLike($request->input('id'))); + } + + /** + * Like several songs at once as the currently authenticated user. + * + * @param BatchInteractionRequest $request + * + * @return \Illuminate\Http\JsonResponse + */ + public function batchLike(BatchInteractionRequest $request) + { + return response()->json(Interaction::batchLike((array) $request->input('ids'))); + } + + /** + * Unlike several songs at once as the currently authenticated user. + * + * @param BatchInteractionRequest $request + * + * @return \Illuminate\Http\JsonResponse + */ + public function batchUnlike(BatchInteractionRequest $request) + { + return response()->json(Interaction::batchUnlike((array) $request->input('ids'))); + } +} diff --git a/app/Http/Controllers/API/PlaylistController.php b/app/Http/Controllers/API/PlaylistController.php new file mode 100644 index 00000000..1235eb33 --- /dev/null +++ b/app/Http/Controllers/API/PlaylistController.php @@ -0,0 +1,90 @@ +user()->playlists()->create($request->only('name')); + $playlist->songs()->sync($request->input('songs')); + + $playlist->songs = $playlist->songs->fetch('id'); + + return response()->json($playlist); + } + + /** + * Rename a playlist. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function update(Request $request, $id) + { + $playlist = Playlist::findOrFail($id); + + if ($playlist->user_id !== auth()->user()->id) { + abort(403); + } + + $playlist->name = $request->input('name'); + $playlist->save(); + + return response()->json($playlist); + } + + /** + * Sync a playlist with songs. + * Any songs that are not populated here will be removed from the playlist. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function sync(Request $request, $id) + { + $playlist = Playlist::findOrFail($id); + + if ($playlist->user_id !== auth()->user()->id) { + abort(403); + } + + $playlist->songs()->sync($request->input('songs')); + + return response()->json(); + } + + /** + * Delete a playlist. + * + * @param int $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function destroy($id) + { + // This can't be put into a Request authorize(), due to Laravel(?)'s limitation. + if (Playlist::findOrFail($id)->user_id !== auth()->user()->id) { + abort(403); + } + + Playlist::destroy($id); + + return response()->json(); + } +} diff --git a/app/Http/Controllers/API/SettingController.php b/app/Http/Controllers/API/SettingController.php new file mode 100644 index 00000000..1a9f98de --- /dev/null +++ b/app/Http/Controllers/API/SettingController.php @@ -0,0 +1,29 @@ +input('media_path')), '/')); + + // In a next version we should opt for a "MediaPathChanged" event, + // but let's just do this async now. + Media::sync(); + + return response()->json(); + } +} diff --git a/app/Http/Controllers/API/SongController.php b/app/Http/Controllers/API/SongController.php new file mode 100644 index 00000000..72ea1ecc --- /dev/null +++ b/app/Http/Controllers/API/SongController.php @@ -0,0 +1,43 @@ +stream(); + + return; + } + + (new PHPStreamer($id))->stream(); + + // Exit here to avoid accidentally sending extra content at the end of the file. + exit; + } + + /** + * Get the lyrics of a song. + * + * @param $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function getLyrics($id) + { + return response()->json(Song::findOrFail($id)->lyrics); + } +} diff --git a/app/Http/Controllers/API/UserController.php b/app/Http/Controllers/API/UserController.php new file mode 100644 index 00000000..f8c91656 --- /dev/null +++ b/app/Http/Controllers/API/UserController.php @@ -0,0 +1,81 @@ +json(User::create([ + 'name' => $request->input('name'), + 'email' => $request->input('email'), + 'password' => Hash::make($request->input('password')), + ])); + } + + /** + * Update a user. + * + * @param UserUpdateRequest $request + * @param int $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function update(UserUpdateRequest $request, $id) + { + $data = $request->only('name', 'email'); + + if ($password = $request->input('password')) { + $data['password'] = Hash::make($password); + } + + return response()->json(User::findOrFail($id)->update($data)); + } + + /** + * Delete a user. + * + * @param int $id + * + * @return \Illuminate\Http\JsonResponse + */ + public function destroy($id) + { + if (!auth()->user()->is_admin || auth()->user()->id === $id) { + abort(403); + } + + return response()->json(User::destroy($id)); + } + + /** + * Update the current user's profile. + * + * @param ProfileUpdateRequest $request + * + * @return \Illuminate\Http\JsonResponse + */ + public function updateProfile(ProfileUpdateRequest $request) + { + $data = $request->only('name', 'email'); + + if ($password = $request->input('password')) { + $data['password'] = Hash::make($password); + } + + return response()->json(auth()->user()->update($data)); + } +} diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php new file mode 100644 index 00000000..cc22dac3 --- /dev/null +++ b/app/Http/Controllers/Auth/AuthController.php @@ -0,0 +1,68 @@ +middleware('guest', ['except' => 'getLogout']); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => 'required|max:255', + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|confirmed', + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * + * @return User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 00000000..9c97bbaa --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,30 @@ +middleware('guest'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 00000000..4eb37d58 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + Authenticate::class, + 'auth.basic' => AuthenticateWithBasicAuth::class, + 'guest' => RedirectIfAuthenticated::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 00000000..b424aa9a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,47 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * + * @return mixed + */ + public function handle($request, Closure $next) + { + if ($this->auth->guest()) { + if ($request->ajax() || $request->route()->getName() == 'play') { + return response('Unauthorized.', 401); + } else { + return redirect()->guest('login'); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 00000000..3aa15f8d --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * + * @return mixed + */ + public function handle($request, Closure $next) + { + if ($this->auth->check()) { + return redirect('/♫'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 00000000..a2c35414 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + 'required|array', + ]; + } +} diff --git a/app/Http/Requests/API/PlaylistStoreRequest.php b/app/Http/Requests/API/PlaylistStoreRequest.php new file mode 100644 index 00000000..72a2beb0 --- /dev/null +++ b/app/Http/Requests/API/PlaylistStoreRequest.php @@ -0,0 +1,29 @@ + 'required', + 'songs' => 'array', + ]; + } +} diff --git a/app/Http/Requests/API/ProfileUpdateRequest.php b/app/Http/Requests/API/ProfileUpdateRequest.php new file mode 100644 index 00000000..2eda07fa --- /dev/null +++ b/app/Http/Requests/API/ProfileUpdateRequest.php @@ -0,0 +1,29 @@ + 'required', + 'email' => 'required|email|unique:users,email,'.auth()->user()->id, + ]; + } +} diff --git a/app/Http/Requests/API/Request.php b/app/Http/Requests/API/Request.php new file mode 100644 index 00000000..66a0b992 --- /dev/null +++ b/app/Http/Requests/API/Request.php @@ -0,0 +1,10 @@ +user()->is_admin; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'media_path' => 'string|required|valid_path', + ]; + } +} diff --git a/app/Http/Requests/API/UserStoreRequest.php b/app/Http/Requests/API/UserStoreRequest.php new file mode 100644 index 00000000..e35fcb95 --- /dev/null +++ b/app/Http/Requests/API/UserStoreRequest.php @@ -0,0 +1,30 @@ +user()->is_admin; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required', + 'email' => 'required|email|unique:users', + 'password' => 'required' + ]; + } +} diff --git a/app/Http/Requests/API/UserUpdateRequest.php b/app/Http/Requests/API/UserUpdateRequest.php new file mode 100644 index 00000000..12460d76 --- /dev/null +++ b/app/Http/Requests/API/UserUpdateRequest.php @@ -0,0 +1,29 @@ +user()->is_admin; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required', + 'email' => 'required|email|unique:users,email,'.$this->route('user'), + ]; + } +} diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php new file mode 100644 index 00000000..76b2ffd4 --- /dev/null +++ b/app/Http/Requests/Request.php @@ -0,0 +1,10 @@ +song = $song instanceof Song ? $song : Song::findOrFail($song); + + if (!file_exists($this->song->path)) { + abort(404); + } + + // Hard code the content type instead of relying on PHP's fileinfo() + // or even Symfony's MIMETypeGuesser, since they appear to be wrong sometimes. + $this->contentType = 'audio/'.pathinfo($this->song->path, PATHINFO_EXTENSION); + + // Turn off error reporting to make sure our stream isn't interfered. + @error_reporting(0); + } +} diff --git a/app/Http/Streamers/PHPStreamer.php b/app/Http/Streamers/PHPStreamer.php new file mode 100644 index 00000000..f907d1c7 --- /dev/null +++ b/app/Http/Streamers/PHPStreamer.php @@ -0,0 +1,116 @@ + $val) { + $headers[strtolower($header)] = $val; + } + + $range = isset($headers['range']) ? $headers['range'] : false; + } else { + // We can't get the header/there isn't one set + $range = false; + } + + // Get the data range requested (if any) + $fileSize = filesize($this->song->path); + + if ($range) { + $partial = true; + list($param, $range) = explode('=', $range); + + if (strtolower(trim($param)) != 'bytes') { + // Bad request - range unit is not 'bytes' + abort(400); + } + + $range = explode(',', $range); + $range = explode('-', $range[0]); // We only deal with the first requested range + + if (count($range) != 2) { + // Bad request - 'bytes' parameter is not valid + abort(400); + } + + if ($range[0] === '') { + // First number missing, return last $range[1] bytes + $end = $fileSize - 1; + $start = $end - intval($range[0]); + } elseif ($range[1] === '') { + // Second number missing, return from byte $range[0] to end + $start = intval($range[0]); + $end = $fileSize - 1; + } else { + // Both numbers present, return specific range + $start = intval($range[0]); + $end = intval($range[1]); + + if ($end >= $fileSize || (!$start && (!$end || $end == ($fileSize - 1)))) { + // Invalid range/whole file specified, return whole file + $partial = false; + } + } + + $length = $end - $start + 1; + } else { + // No range requested + $partial = false; + } + + // Send standard headers + header("Content-Type: {$this->contentType}"); + header("Content-Length: $fileSize"); + header('Content-Disposition: attachment; filename="'.basename($this->song->path).'"'); + header('Accept-Ranges: bytes'); + + // if requested, send extra headers and part of file... + if ($partial) { + header('HTTP/1.1 206 Partial Content'); + header("Content-Range: bytes $start-$end/$fileSize"); + + if (!$fp = fopen($this->song->path, 'r')) { + // Error out if we can't read the file + abort(500); + } + + if ($start) { + fseek($fp, $start); + } + + while ($length) { + // Read in blocks of 8KB so we don't chew up memory on the server + $read = ($length > 8192) ? 8192 : $length; + $length -= $read; + print(fread($fp, $read)); + } + + fclose($fp); + } else { + // ...otherwise just send the whole file + readfile($this->song->path); + } + + exit; + } +} diff --git a/app/Http/Streamers/StreamerInterface.php b/app/Http/Streamers/StreamerInterface.php new file mode 100644 index 00000000..114ee9be --- /dev/null +++ b/app/Http/Streamers/StreamerInterface.php @@ -0,0 +1,11 @@ +song->path}"); + header("Content-Type: {$this->contentType}"); + header('Content-Disposition: inline; filename="'.basename($this->song->path).'"'); + + exit; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php new file mode 100644 index 00000000..e407c04d --- /dev/null +++ b/app/Http/routes.php @@ -0,0 +1,38 @@ + 'auth', function () { + return view('index'); +}]); + +Route::group(['prefix' => 'api', 'middleware' => 'auth', 'namespace' => 'API'], function () { + get('/', function () { + // Just acting as a ping service. + }); + + get('data', 'DataController@index'); + + post('settings', 'SettingController@save'); + + get('{id}/play', 'SongController@play')->where('id', '[a-f0-9]{32}'); + + get('{id}/lyrics', 'SongController@getLyrics')->where('id', '[a-f0-9]{32}'); + + post('interaction/play', 'InteractionController@play'); + post('interaction/like', 'InteractionController@like'); + post('interaction/batch/like', 'InteractionController@batchLike'); + post('interaction/batch/unlike', 'InteractionController@batchUnlike'); + + resource('playlist', 'PlaylistController'); + put('playlist/{id}/sync', 'PlaylistController@sync')->where(['id' => '\d+']); + + resource('user', 'UserController'); + put('me', 'UserController@updateProfile'); +}); diff --git a/app/Jobs/Job.php b/app/Jobs/Job.php new file mode 100644 index 00000000..55ece29a --- /dev/null +++ b/app/Jobs/Job.php @@ -0,0 +1,21 @@ +belongsTo(Artist::class); + } + + public function songs() + { + return $this->hasMany(Song::class); + } + + /** + * Get an album using some provided information. + * + * @param Artist $artist + * @param $name + * + * @return self + */ + public static function get(Artist $artist, $name) + { + // If an empty name is provided, turn it into our "Unknown Album" + $name = $name ?: self::UNKNOWN_NAME; + + $album = self::firstOrCreate([ + 'artist_id' => $artist->id, + 'name' => $name, + ]); + + return $album; + } + + /** + * Generate a cover from provided data. + * + * @param array $cover The cover data in array format, extracted by getID3. + * For example: + * [ + * 'data' => '', + * 'image_mime' => 'image/png', + * 'image_width' => 512, + * 'image_height' => 512, + * 'imagetype' => 'PNG', // not always present + * 'picturetype' => 'Other', + * 'description' => '', + * 'datalength' => 7627, + * ] + */ + public function generateCover(array $cover) + { + $extension = explode('/', $cover['image_mime']); + $fileName = uniqid().'.'.strtolower($extension[1]); + $coverPath = app()->publicPath().'/img/covers/'.$fileName; + + file_put_contents($coverPath, $cover['data']); + + $this->update(['cover' => $fileName]); + } + + public function setCoverAttribute($value) + { + $this->attributes['cover'] = $value ?: self::UNKNOWN_COVER; + } + + public function getCoverAttribute($value) + { + return '/public/img/covers/'.($value ?: self::UNKNOWN_COVER); + } + + /** + * Determine if the current album has a cover. + * + * @return bool + */ + public function getHasCoverAttribute() + { + return $this->cover !== $this->getCoverAttribute(null); + } + + /** + * Sometimes the tags extracted from getID3 are HTML entity encoded. + * This makes sure they are always sane. + * + * @param $value + */ + public function setNameAttribute($value) + { + $this->attributes['name'] = html_entity_decode($value); + } +} diff --git a/app/Models/Artist.php b/app/Models/Artist.php new file mode 100644 index 00000000..6387d05f --- /dev/null +++ b/app/Models/Artist.php @@ -0,0 +1,54 @@ +hasMany(Album::class); + } + + public function getNameAttribute($value) + { + return $value ?: self::UNKNOWN_NAME; + } + + /** + * Get an Artist object from their name. + * If such is not found, a new artist will be created. + * + * @param string $name + * + * @return Artist + */ + public static function get($name) + { + $name = trim($name) ?: self::UNKNOWN_NAME; + + return self::firstOrCreate(compact('name'), compact('name')); + } + + /** + * Sometimes the tags extracted from getID3 are HTML entity encoded. + * This makes sure they are always sane. + * + * @param $value + */ + public function setNameAttribute($value) + { + $this->attributes['name'] = html_entity_decode($value); + } +} diff --git a/app/Models/Interaction.php b/app/Models/Interaction.php new file mode 100644 index 00000000..adb80ab8 --- /dev/null +++ b/app/Models/Interaction.php @@ -0,0 +1,132 @@ + 'boolean', + 'play_count' => 'integer', + ]; + + protected $guarded = ['id']; + + protected $hidden = ['user_id', 'created_at', 'updated_at']; + + public function user() + { + return $this->belongsTo(User::class); + } + + public function song() + { + return $this->belongsTo(Song::class); + } + + /** + * Increase the number of times a song is played by a user. + * + * @param string $songId + * @param int|null $userId + * + * @return Interaction + */ + public static function increasePlayCount($songId, $userId = null) + { + $interaction = self::firstOrCreate([ + 'song_id' => $songId, + 'user_id' => $userId ?: auth()->user()->id, + ]); + + if (!$interaction->exists) { + $interaction->liked = false; + } + + ++$interaction->play_count; + $interaction->save(); + + return $interaction; + } + + /** + * Like or unlike a song on behalf of a user. + * + * @param string $songId + * @param int|null $userId + * + * @return Interaction + */ + public static function toggleLike($songId, $userId = null) + { + $interaction = self::firstOrCreate([ + 'song_id' => $songId, + 'user_id' => $userId ?: auth()->user()->id, + ]); + + if (!$interaction->exists) { + $interaction->play_count = 0; + } + + $interaction->liked = !$interaction->liked; + $interaction->save(); + + return $interaction; + } + + /** + * Like several songs at once. + * + * @param array $songIds + * @param int|null $userId + * + * @return array + */ + public static function batchLike(array $songIds, $userId = null) + { + $result = []; + + foreach ($songIds as $songId) { + $interaction = self::firstOrCreate([ + 'song_id' => $songId, + 'user_id' => $userId ?: auth()->user()->id, + ]); + + if (!$interaction->exists) { + $interaction->play_count = 0; + } + + $interaction->liked = true; + $interaction->save(); + + $result[] = $interaction; + } + + return $result; + } + + /** + * Unlike several songs at once. + * + * @param array $songIds + * @param int|null $userId + * + * @return int + */ + public static function batchUnlike(array $songIds, $userId = null) + { + return DB::table('interactions') + ->whereIn('song_id', $songIds) + ->where('user_id', $userId ?: auth()->user()->id) + ->update(['liked' => false]); + } +} diff --git a/app/Models/Playlist.php b/app/Models/Playlist.php new file mode 100644 index 00000000..a7f499d8 --- /dev/null +++ b/app/Models/Playlist.php @@ -0,0 +1,29 @@ + 'int', + ]; + + public function songs() + { + return $this->belongsToMany(Song::class); + } + + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php new file mode 100644 index 00000000..84917e7f --- /dev/null +++ b/app/Models/Setting.php @@ -0,0 +1,69 @@ +value; + } + + return ''; + } + + /** + * Set a setting (no pun) value. + * + * @param string|array $key The key of the setting, or an associative array of settings, + * in which case $value will be discarded. + * @param mixed $value + * + */ + public static function set($key, $value = null) + { + if (is_array($key)) { + foreach ($key as $k => $v) { + self::set($k, $v); + } + + return; + } + + self::updateOrCreate(compact('key'), compact('value')); + } + + /** + * Serialize the setting value before saving into the database. + * This makes settings more flexible. + * + * @param mixed $value + */ + public function setValueAttribute($value) + { + $this->attributes['value'] = serialize($value); + } + + public function getValueAttribute($value) + { + return unserialize($value); + } +} diff --git a/app/Models/Song.php b/app/Models/Song.php new file mode 100644 index 00000000..39f22c43 --- /dev/null +++ b/app/Models/Song.php @@ -0,0 +1,68 @@ +belongsTo(Album::class); + } + + public function playlists() + { + return $this->belongsToMany(Playlist::class); + } + + /** + * Sometimes the tags extracted from getID3 are HTML entity encoded. + * This makes sure they are always sane. + * + * @param $value + */ + public function setTitleAttribute($value) + { + $this->attributes['title'] = html_entity_decode($value); + } + + /** + * Some songs don't have a title. + * Fall back to the file name (without extension) for such. + * + * @param $value + * + * @return string + */ + public function getTitleAttribute($value) + { + return $value ?: pathinfo($this->path, PATHINFO_FILENAME); + } + + /** + * Prepare the lyrics for displaying. + * + * @param $value + * + * @return string + */ + public function getLyricsAttribute($value) + { + return nl2br($value); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 00000000..91849459 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,53 @@ + 'bool', + ]; + + /** + * The attributes excluded from the model's JSON form. + * + * @var array + */ + protected $hidden = ['password', 'remember_token', 'created_at', 'updated_at' ]; + + public function playlists() + { + return $this->hasMany(Playlist::class); + } + + public function interactions() + { + return $this->hasMany(Interaction::class); + } +} diff --git a/app/Policies/.gitkeep b/app/Policies/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 00000000..a3c006a5 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,32 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any application authentication / authorization services. + * + * @param \Illuminate\Contracts\Auth\Access\Gate $gate + * @return void + */ + public function boot(GateContract $gate) + { + $this->registerPolicies($gate); + + // + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100644 index 00000000..a94bd89b --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,45 @@ + [ + 'App\Listeners\EventListener', + ], + ]; + + /** + * Register any other events for your application. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + */ + public function boot(DispatcherContract $events) + { + parent::boot($events); + + // Generate a unique hash for a song from its path to be the ID + Song::creating(function ($song) { + $song->id = Media::getHash($song->path); + }); + + // Remove the cover file if the album is deleted + Album::deleted(function ($album) { + if ($album->hasCover) { + @unlink(app()->publicPath().'/img/covers/'.$album->cover); + } + }); + } +} diff --git a/app/Providers/MediaServiceProvider.php b/app/Providers/MediaServiceProvider.php new file mode 100644 index 00000000..12e699a8 --- /dev/null +++ b/app/Providers/MediaServiceProvider.php @@ -0,0 +1,31 @@ +singleton('Media', function() { + return new Media(); + }); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..d50b1c0f --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,44 @@ +group(['namespace' => $this->namespace], function ($router) { + require app_path('Http/routes.php'); + }); + } +} diff --git a/app/Services/Media.php b/app/Services/Media.php new file mode 100644 index 00000000..12a02cec --- /dev/null +++ b/app/Services/Media.php @@ -0,0 +1,231 @@ +setGetID3(); + } + + /** + * Sync the media. Oh sync the media. + * + * @param string|null $path + * @param SyncMedia $syncCommand The SyncMedia command object, to log to console if executed by artisan. + */ + public function sync($path = null, SyncMedia $syncCommand = null) + { + set_time_limit(env('APP_MAX_SCAN_TIME', 600)); + + $path = $path ?: Setting::get('media_path'); + + $results = [ + 'good' => [], // Updated or added files + 'bad' => [], // Bad files + 'ugly' => [], // Unmodified files + ]; + + // For now we only care about mp3 and ogg files. + // Support for other formats (AAC?) may be added in the future. + $files = Finder::create()->files()->name('/\.(mp3|ogg)$/')->in($path); + + foreach ($files as $file) { + $song = $this->syncFile($file); + + if ($song === true) { + $results['ugly'][] = $file; + } elseif ($song === false) { + $results['bad'][] = $file; + } else { + $results['good'][] = $file; + } + + if ($syncCommand) { + $syncCommand->logToConsole($file->getPathname(), $song); + } + } + + // Delete non-existing songs. + $hashes = array_map(function ($f) { + return $this->getHash($f->getPathname()); + }, array_merge($results['ugly'], $results['good'])); + + Song::whereNotIn('id', $hashes)->delete(); + + // Empty albums and artists should be gone as well. + $inUseAlbums = Song::select('album_id')->groupBy('album_id')->get()->lists('album_id'); + $inUseAlbums[] = Album::UNKNOWN_ID; + Album::whereNotIn('id', $inUseAlbums)->delete(); + + $inUseArtists = Album::select('artist_id')->groupBy('artist_id')->get()->lists('artist_id'); + $inUseArtists[] = Artist::UNKNOWN_ID; + Artist::whereNotIn('id', $inUseArtists)->delete(); + } + + /** + * Sync a song with all available media info against the database. + * + * @param SplFileInfo $file The SplFileInfo instance of the file. + * + * @return bool|Song A Song object on success, + * true if file existing but unmodified, + * or false on error. + */ + public function syncFile(SplFileInfo $file) + { + if (!$info = $this->getInfo($file)) { + return false; + } + + if (!$this->isNewOrChanged($file)) { + return true; + } + + $artist = Artist::get($info['artist']); + $album = Album::get($artist, $info['album']); + + if ($info['cover'] && !$album->has_cover) { + try { + $album->generateCover($info['cover']); + } catch (Exception $e) { + Log::error($e); + } + } + + $info['album_id'] = $album->id; + + unset($info['artist']); + unset($info['album']); + unset($info['cover']); + + $song = Song::updateOrCreate(['id' => $this->getHash($file->getPathname())], $info); + $song->save(); + + return $song; + } + + /** + * Check if a media file is new or changed. + * A file is considered existing and unchanged only when: + * - its hash (ID) can be found in the database, and + * - its last modified time is the same with that of the comparing file. + * + * @param SplFileInfo $file + * + * @return bool + */ + protected function isNewOrChanged(SplFileInfo $file) + { + return !Song::whereIdAndMtime($this->getHash($file->getPathname()), $file->getMTime())->count(); + } + + /** + * Get ID3 info from a file. + * + * @param SplFileInfo $file + * + * @return array|null + */ + public function getInfo(SplFileInfo $file) + { + $info = $this->getID3->analyze($file->getPathname()); + + if (isset($info['error'])) { + return; + } + + // Copy the available tags over to comment. + // This is a helper from getID3, though it doesn't really work well. + // We'll still prefer getting ID3v2 tags directly later. + // Read on. + getid3_lib::CopyTagsToComments($info); + + $props = [ + 'artist' => '', + 'album' => '', + 'title' => '', + 'length' => $info['playtime_seconds'], + 'lyrics' => '', + 'cover' => array_get($info, 'comments.picture', [null])[0], + 'path' => $file->getPathname(), + 'mtime' => $file->getMTime(), + ]; + + if (!$comments = array_get($info, 'comments_html')) { + return $props; + } + + // We prefer id3v2 tags over others. + if (!$artist = array_get($info, 'tags.id3v2.artist', [null])[0]) { + $artist = array_get($comments, 'artist', [''])[0]; + } + + if (!$album = array_get($info, 'tags.id3v2.album', [null])[0]) { + $album = array_get($comments, 'album', [''])[0]; + } + + if (!$title = array_get($info, 'tags.id3v2.title', [null])[0]) { + $title = array_get($comments, 'title', [''])[0]; + } + + if (!$lyrics = array_get($info, 'tags.id3v2.unsynchronised_lyric', [null])[0]) { + $lyrics = array_get($comments, 'unsynchronised_lyric', [''])[0]; + } + + $props['artist'] = trim($artist); + $props['album'] = trim($album); + $props['title'] = trim($title); + $props['lyrics'] = trim($lyrics); + + return $props; + } + + /** + * Generate a unique hash for a file path. + * + * @param $path + * + * @return string + */ + public function getHash($path) + { + return md5(config('app.key').$path); + } + + /** + * @return getID3 + */ + public function getGetID3() + { + return $this->getID3; + } + + /** + * @param getID3 $getID3 + */ + public function setGetID3($getID3 = null) + { + $this->getID3 = $getID3 ?: new getID3(); + } +} diff --git a/app/Traits/CanFilterByUser.php b/app/Traits/CanFilterByUser.php new file mode 100644 index 00000000..2bbba271 --- /dev/null +++ b/app/Traits/CanFilterByUser.php @@ -0,0 +1,16 @@ +whereUserId(auth()->user()->id); + } +} diff --git a/apple-touch-icon-precomposed.png b/apple-touch-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..815d35ecc1cabde54538cb1c2dc8f58b46688947 GIT binary patch literal 4342 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\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running. We will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 00000000..e973c456 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php new file mode 100644 index 00000000..38301379 --- /dev/null +++ b/bootstrap/autoload.php @@ -0,0 +1,34 @@ +" + ], + "moduleType": [ + "es6" + ], + "keywords": [ + "koel", + "audio", + "streaming", + "mp3" + ], + "license": "MIT", + "homepage": "http://koel.phanan.net", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "devDependencies": { + "plyr": "~1.3.6", + "fontawesome": "~4.5.0" + } +} diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..fa84a16f --- /dev/null +++ b/composer.json @@ -0,0 +1,54 @@ +{ + "name": "phanan/koel", + "description": "Personal audio streaming service that works.", + "keywords": ["audio", "stream", "mp3"], + "license": "MIT", + "type": "project", + "require": { + "php": ">=5.5.9", + "laravel/framework": "5.1.*", + "james-heinrich/getid3": "^1.9" + }, + "require-dev": { + "fzaninotto/faker": "~1.4", + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "~5.0", + "phpspec/phpspec": "~2.1", + "barryvdh/laravel-ide-helper": "^2.1", + "phanan/cascading-config": "~2.0" + }, + "autoload": { + "classmap": [ + "database" + ], + "psr-4": { + "App\\": "app/" + } + }, + "autoload-dev": { + "classmap": [ + "tests/TestCase.php" + ] + }, + "scripts": { + "post-install-cmd": [ + "php artisan clear-compiled", + "php artisan optimize" + ], + "pre-update-cmd": [ + "php artisan clear-compiled" + ], + "post-update-cmd": [ + "php artisan optimize" + ], + "post-root-package-install": [ + "php -r \"copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "php artisan key:generate" + ] + }, + "config": { + "preferred-install": "dist" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..cf3df89f --- /dev/null +++ b/composer.lock @@ -0,0 +1,3241 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "860169bf0630a0bdc331d0aa917c2054", + "content-hash": "440407e5bd2fab148c80ef9147a42b88", + "packages": [ + { + "name": "classpreloader/classpreloader", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/ClassPreloader/ClassPreloader.git", + "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", + "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.0|^2.0", + "php": ">=5.5.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "ClassPreloader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "keywords": [ + "autoload", + "class", + "preload" + ], + "time": "2015-11-09 22:51:51" + }, + { + "name": "danielstjules/stringy", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/danielstjules/Stringy.git", + "reference": "4749c205db47ee5b32e8d1adf6d9aff8db6caf3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/4749c205db47ee5b32e8d1adf6d9aff8db6caf3b", + "reference": "4749c205db47ee5b32e8d1adf6d9aff8db6caf3b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Stringy\\": "src/" + }, + "files": [ + "src/Create.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel St. Jules", + "email": "danielst.jules@gmail.com", + "homepage": "http://www.danielstjules.com" + } + ], + "description": "A string manipulation library with multibyte support", + "homepage": "https://github.com/danielstjules/Stringy", + "keywords": [ + "UTF", + "helpers", + "manipulation", + "methods", + "multibyte", + "string", + "utf-8", + "utility", + "utils" + ], + "time": "2015-07-23 00:54:12" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "@stable" + }, + "type": "project", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "time": "2014-10-24 07:27:01" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06 14:35:42" + }, + { + "name": "jakub-onderka/php-console-color", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", + "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "3.7.*", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "JakubOnderka\\PhpConsoleColor": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com", + "homepage": "http://www.acci.cz" + } + ], + "time": "2014-04-08 15:00:19" + }, + { + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "shasum": "" + }, + "require": { + "jakub-onderka/php-console-color": "~0.1", + "php": ">=5.3.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~0.5", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JakubOnderka\\PhpConsoleHighlighter": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" + } + ], + "time": "2015-04-20 18:58:01" + }, + { + "name": "james-heinrich/getid3", + "version": "v1.9.10", + "source": { + "type": "git", + "url": "https://github.com/JamesHeinrich/getID3.git", + "reference": "835a0db62993cb1d85925f9a8aefe13e4ebe2b67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/835a0db62993cb1d85925f9a8aefe13e4ebe2b67", + "reference": "835a0db62993cb1d85925f9a8aefe13e4ebe2b67", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "getid3/getid3.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL" + ], + "description": "PHP script that extracts useful information from popular multimedia file formats", + "homepage": "http://www.getid3.org/", + "keywords": [ + "codecs", + "php", + "tags" + ], + "time": "2015-09-14 05:42:21" + }, + { + "name": "jeremeamia/SuperClosure", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "b712f39c671e5ead60c7ebfe662545456aade833" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/b712f39c671e5ead60c7ebfe662545456aade833", + "reference": "b712f39c671e5ead60c7ebfe662545456aade833", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~1.0", + "php": ">=5.4" + }, + "require-dev": { + "codeclimate/php-test-reporter": "~0.1.2", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "description": "Serialize Closure objects, including their context and binding", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "lambda", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "time": "2015-03-11 20:06:43" + }, + { + "name": "laravel/framework", + "version": "v5.1.24", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "875baf2d1645ce23e2ec0bf94fa7bb3e7fbfd6ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/875baf2d1645ce23e2ec0bf94fa7bb3e7fbfd6ed", + "reference": "875baf2d1645ce23e2ec0bf94fa7bb3e7fbfd6ed", + "shasum": "" + }, + "require": { + "classpreloader/classpreloader": "~2.0|~3.0", + "danielstjules/stringy": "~1.8", + "doctrine/inflector": "~1.0", + "ext-mbstring": "*", + "ext-openssl": "*", + "jeremeamia/superclosure": "~2.0", + "league/flysystem": "~1.0", + "monolog/monolog": "~1.11", + "mtdowling/cron-expression": "~1.0", + "nesbot/carbon": "~1.19", + "paragonie/random_compat": "~1.1", + "php": ">=5.5.9", + "psy/psysh": "0.6.*", + "swiftmailer/swiftmailer": "~5.1", + "symfony/console": "2.7.*", + "symfony/css-selector": "2.7.*", + "symfony/debug": "2.7.*", + "symfony/dom-crawler": "2.7.*", + "symfony/finder": "2.7.*", + "symfony/http-foundation": "2.7.*", + "symfony/http-kernel": "2.7.*", + "symfony/process": "2.7.*", + "symfony/routing": "2.7.*", + "symfony/translation": "2.7.*", + "symfony/var-dumper": "2.7.*", + "vlucas/phpdotenv": "~1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/exception": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/foundation": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "~3.0", + "iron-io/iron_mq": "~2.0", + "mockery/mockery": "~0.9.1", + "pda/pheanstalk": "~3.0", + "phpunit/phpunit": "~4.0", + "predis/predis": "~1.0" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.3|~6.0).", + "iron-io/iron_mq": "Required to use the iron queue driver (~2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", + "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/Illuminate/Queue/IlluminateQueueClosure.php" + ], + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "http://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "time": "2015-11-11 22:45:42" + }, + { + "name": "league/flysystem", + "version": "1.0.15", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "31525caf9e8772683672fefd8a1ca0c0736020f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/31525caf9e8772683672fefd8a1ca0c0736020f4", + "reference": "31525caf9e8772683672fefd8a1ca0c0736020f4", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "ext-fileinfo": "*", + "mockery/mockery": "~0.9", + "phpspec/phpspec": "^2.2", + "phpspec/prophecy-phpunit": "~1.0", + "phpunit/phpunit": "~4.1" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-copy": "Allows you to use Copy.com storage", + "league/flysystem-dropbox": "Allows you to use Dropbox storage", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "time": "2015-09-30 22:26:59" + }, + { + "name": "monolog/monolog", + "version": "1.17.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bee7f0dc9c3e0b69a6039697533dca1e845c8c24", + "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "raven/raven": "^0.13", + "ruflin/elastica": ">=0.90 <3.0", + "swiftmailer/swiftmailer": "~5.3", + "videlalvaro/php-amqplib": "~2.4" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "raven/raven": "Allow sending log messages to a Sentry server", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2015-10-14 12:51:02" + }, + { + "name": "mtdowling/cron-expression", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/cron-expression.git", + "reference": "fd92e883195e5dfa77720b1868cf084b08be4412" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/fd92e883195e5dfa77720b1868cf084b08be4412", + "reference": "fd92e883195e5dfa77720b1868cf084b08be4412", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "Cron": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2015-01-11 23:07:46" + }, + { + "name": "nesbot/carbon", + "version": "1.21.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", + "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/translation": "~2.6|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2015-11-04 20:07:17" + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-09-19 14:15:08" + }, + { + "name": "paragonie/random_compat", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "19f765b66c6fbb56ee3b11bc16d52e38eebdc295" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/19f765b66c6fbb56ee3b11bc16d52e38eebdc295", + "reference": "19f765b66c6fbb56ee3b11bc16d52e38eebdc295", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2015-11-10 00:45:41" + }, + { + "name": "psr/log", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2012-12-21 11:40:51" + }, + { + "name": "psy/psysh", + "version": "v0.6.1", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "0f04df0b23663799a8941fae13cd8e6299bde3ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/0f04df0b23663799a8941fae13cd8e6299bde3ed", + "reference": "0f04df0b23663799a8941fae13cd8e6299bde3ed", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1", + "jakub-onderka/php-console-highlighter": "0.3.*", + "nikic/php-parser": "^1.2.1|~2.0", + "php": ">=5.3.9", + "symfony/console": "~2.3.10|^2.4.2|~3.0", + "symfony/var-dumper": "~2.7|~3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.5", + "phpunit/phpunit": "~3.7|~4.0|~5.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/finder": "~2.1|~3.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7.x-dev" + } + }, + "autoload": { + "files": [ + "src/Psy/functions.php" + ], + "psr-4": { + "Psy\\": "src/Psy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2015-11-12 16:18:56" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421", + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "mockery/mockery": "~0.9.1,<0.9.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "http://swiftmailer.org", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2015-06-06 14:19:39" + }, + { + "name": "symfony/console", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5efd632294c8320ea52492db22292ff853a43766" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5efd632294c8320ea52492db22292ff853a43766", + "reference": "5efd632294c8320ea52492db22292ff853a43766", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1", + "symfony/process": "~2.1" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2015-10-20 14:38:46" + }, + { + "name": "symfony/css-selector", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e1b865b26be4a56d22a8dee398375044a80c865b", + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + }, + { + "name": "symfony/debug", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb9e6887db716939f41af0ba8ef38a1582eb501b", + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2", + "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + }, + { + "name": "symfony/dom-crawler", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5fef7d8b80d8f9992df99d8ee283f420484c9612", + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/css-selector": "~2.3" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87a5db5ea887763fa3a31a5471b512ff1596d9b8", + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.6", + "symfony/expression-language": "~2.6", + "symfony/stopwatch": "~2.3" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + }, + { + "name": "symfony/finder", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d", + "reference": "2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + }, + { + "name": "symfony/http-foundation", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "7598eea151ae3d4134df1f9957364b17809eea75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7598eea151ae3d4134df1f9957364b17809eea75", + "reference": "7598eea151ae3d4134df1f9957364b17809eea75", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/expression-language": "~2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2015-10-23 14:47:27" + }, + { + "name": "symfony/http-kernel", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "4260f2273a446a6715063dc9ca89fd0c475c2f77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4260f2273a446a6715063dc9ca89fd0c475c2f77", + "reference": "4260f2273a446a6715063dc9ca89fd0c475c2f77", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0", + "symfony/debug": "~2.6,>=2.6.2", + "symfony/event-dispatcher": "~2.6,>=2.6.7", + "symfony/http-foundation": "~2.5,>=2.5.4" + }, + "conflict": { + "symfony/config": "<2.7" + }, + "require-dev": { + "symfony/browser-kit": "~2.3", + "symfony/class-loader": "~2.1", + "symfony/config": "~2.7", + "symfony/console": "~2.3", + "symfony/css-selector": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.2", + "symfony/dom-crawler": "~2.0,>=2.0.5", + "symfony/expression-language": "~2.4", + "symfony/finder": "~2.0,>=2.0.5", + "symfony/process": "~2.0,>=2.0.5", + "symfony/routing": "~2.2", + "symfony/stopwatch": "~2.3", + "symfony/templating": "~2.2", + "symfony/translation": "~2.0,>=2.0.5", + "symfony/var-dumper": "~2.6" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2015-10-27 19:07:21" + }, + { + "name": "symfony/process", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "4a959dd4e19c2c5d7512689413921e0a74386ec7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/4a959dd4e19c2c5d7512689413921e0a74386ec7", + "reference": "4a959dd4e19c2c5d7512689413921e0a74386ec7", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2015-10-23 14:47:27" + }, + { + "name": "symfony/routing", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "f353e1f588679c3ec987624e6c617646bd01ba38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/f353e1f588679c3ec987624e6c617646bd01ba38", + "reference": "f353e1f588679c3ec987624e6c617646bd01ba38", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "conflict": { + "symfony/config": "<2.7" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/common": "~2.2", + "psr/log": "~1.0", + "symfony/config": "~2.7", + "symfony/expression-language": "~2.4", + "symfony/http-foundation": "~2.3", + "symfony/yaml": "~2.0,>=2.0.5" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2015-10-27 15:38:06" + }, + { + "name": "symfony/translation", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "6ccd9289ec1c71d01a49d83480de3b5293ce30c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/6ccd9289ec1c71d01a49d83480de3b5293ce30c8", + "reference": "6ccd9289ec1c71d01a49d83480de3b5293ce30c8", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "conflict": { + "symfony/config": "<2.7" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.7", + "symfony/intl": "~2.4", + "symfony/yaml": "~2.2" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2015-10-27 15:38:06" + }, + { + "name": "symfony/var-dumper", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "eb033050050916b6bfa51be71009ef67b16046c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb033050050916b6bfa51be71009ef67b16046c9", + "reference": "eb033050050916b6bfa51be71009ef67b16046c9", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "suggest": { + "ext-symfony_debug": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2015-10-25 17:17:38" + }, + { + "name": "vlucas/phpdotenv", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Dotenv": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "authors": [ + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "homepage": "http://github.com/vlucas/phpdotenv", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2015-05-30 15:59:26" + } + ], + "packages-dev": [ + { + "name": "barryvdh/laravel-ide-helper", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-ide-helper.git", + "reference": "83999f8467374adcb8893f566c9171c9d9691f50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/83999f8467374adcb8893f566c9171c9d9691f50", + "reference": "83999f8467374adcb8893f566c9171c9d9691f50", + "shasum": "" + }, + "require": { + "illuminate/console": "5.0.x|5.1.x", + "illuminate/filesystem": "5.0.x|5.1.x", + "illuminate/support": "5.0.x|5.1.x", + "php": ">=5.4.0", + "phpdocumentor/reflection-docblock": "2.0.4", + "symfony/class-loader": "~2.3" + }, + "require-dev": { + "doctrine/dbal": "~2.3" + }, + "suggest": { + "doctrine/dbal": "Load information from the database about models for phpdocs (~2.3)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\LaravelIdeHelper\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", + "keywords": [ + "autocomplete", + "codeintel", + "helper", + "ide", + "laravel", + "netbeans", + "phpdoc", + "phpstorm", + "sublime" + ], + "time": "2015-08-13 11:40:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "fzaninotto/faker", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d", + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "suggest": { + "ext-intl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2015-05-29 06:29:14" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", + "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "1.3.3", + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "hamcrest" + ], + "files": [ + "hamcrest/Hamcrest.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "time": "2015-05-11 14:41:42" + }, + { + "name": "mockery/mockery", + "version": "0.9.4", + "source": { + "type": "git", + "url": "https://github.com/padraic/mockery.git", + "reference": "70bba85e4aabc9449626651f48b9018ede04f86b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b", + "reference": "70bba85e4aabc9449626651f48b9018ede04f86b", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "~1.1", + "lib-pcre": ">=7.0", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", + "homepage": "http://github.com/padraic/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "time": "2015-04-02 19:54:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "e3abefcd7f106677fd352cd7c187d6c969aa9ddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e3abefcd7f106677fd352cd7c187d6c969aa9ddc", + "reference": "e3abefcd7f106677fd352cd7c187d6c969aa9ddc", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2015-11-07 22:20:37" + }, + { + "name": "phanan/cascading-config", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phanan/cascading-config.git", + "reference": "02efc75ae964f63f0c2a40a22654111fecea895c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phanan/cascading-config/zipball/02efc75ae964f63f0c2a40a22654111fecea895c", + "reference": "02efc75ae964f63f0c2a40a22654111fecea895c", + "shasum": "" + }, + "require-dev": { + "laravel/framework": "~5.1", + "laravel/lumen-framework": "~5.1.6", + "phpunit/phpunit": "~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhanAn\\CascadingConfig\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phan An", + "email": "me@phanan.net", + "homepage": "http://phanan.net" + } + ], + "description": "Bringing the cascading configuration system back to Laravel 5.", + "homepage": "https://github.com/phanan/cascading-config", + "keywords": [ + "cascade", + "cascading", + "config", + "configuration", + "laravel", + "laravel 5" + ], + "time": "2015-11-16 17:01:33" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03 12:10:50" + }, + { + "name": "phpspec/php-diff", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton", + "role": "Original developer" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "time": "2013-11-01 13:02:21" + }, + { + "name": "phpspec/phpspec", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/phpspec.git", + "reference": "36635a903bdeb54899d7407bc95610501fd98559" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/phpspec/zipball/36635a903bdeb54899d7407bc95610501fd98559", + "reference": "36635a903bdeb54899d7407bc95610501fd98559", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.1", + "php": ">=5.3.3", + "phpspec/php-diff": "~1.0.0", + "phpspec/prophecy": "~1.4", + "sebastian/exporter": "~1.0", + "symfony/console": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/finder": "~2.1", + "symfony/process": "^2.6", + "symfony/yaml": "~2.1" + }, + "require-dev": { + "behat/behat": "^3.0.11", + "bossa/phpspec2-expect": "~1.0", + "phpunit/phpunit": "~4.4", + "symfony/filesystem": "~2.1" + }, + "suggest": { + "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters" + }, + "bin": [ + "bin/phpspec" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "PhpSpec": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "homepage": "http://marcelloduarte.net/" + } + ], + "description": "Specification-oriented BDD framework for PHP 5.3+", + "homepage": "http://phpspec.net/", + "keywords": [ + "BDD", + "SpecBDD", + "TDD", + "spec", + "specification", + "testing", + "tests" + ], + "time": "2015-09-07 07:07:37" + }, + { + "name": "phpspec/prophecy", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2015-08-13 10:07:40" + }, + { + "name": "phpunit/php-code-coverage", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f7bb5cddf4ffe113eeb737b05241adb947b43f9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7bb5cddf4ffe113eeb737b05241adb947b43f9d", + "reference": "f7bb5cddf4ffe113eeb737b05241adb947b43f9d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~5" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-11-12 21:08:20" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21 13:08:43" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2015-06-21 08:01:12" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2015-09-15 10:49:45" + }, + { + "name": "phpunit/phpunit", + "version": "5.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ed084be6b5b912f11c3559e17110f8d8a1e3a8a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ed084be6b5b912f11c3559e17110f8d8a1e3a8a1", + "reference": "ed084be6b5b912f11c3559e17110f8d8a1e3a8a1", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "myclabs/deep-copy": "~1.3", + "php": ">=5.6", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~3.0", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": ">=1.0.6", + "phpunit/phpunit-mock-objects": ">=3.0", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2015-11-10 21:47:43" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "b28b029356e65091dfbf8c2bc4ef106ffece509e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/b28b029356e65091dfbf8c2bc4ef106ffece509e", + "reference": "b28b029356e65091dfbf8c2bc4ef106ffece509e", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.6", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-11-09 15:37:17" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26 15:48:44" + }, + { + "name": "sebastian/diff", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "http://www.github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-02-22 15:13:53" + }, + { + "name": "sebastian/environment", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2015-08-03 06:14:51" + }, + { + "name": "sebastian/exporter", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2015-06-21 07:55:53" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-06-21 08:04:50" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28 20:34:47" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "symfony/class-loader", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/class-loader.git", + "reference": "320f8d2a9cdbcbeb24be602c124aae9d998474a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/320f8d2a9cdbcbeb24be602c124aae9d998474a4", + "reference": "320f8d2a9cdbcbeb24be602c124aae9d998474a4", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/finder": "~2.0,>=2.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ClassLoader\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ClassLoader Component", + "homepage": "https://symfony.com", + "time": "2015-10-23 14:47:27" + }, + { + "name": "symfony/yaml", + "version": "v2.7.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/eca9019c88fbe250164affd107bc8057771f3f4d", + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2015-10-11 09:39:48" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.9" + }, + "platform-dev": [] +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 00000000..77740211 --- /dev/null +++ b/config/app.php @@ -0,0 +1,206 @@ + 'Personal audio streaming service that works.', + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => 'http://localhost', + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY', 'SomeRandomString'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Logging Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure the log settings for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Settings: "single", "daily", "syslog", "errorlog" + | + */ + + 'log' => env('APP_LOG', 'single'), + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Foundation\Providers\ArtisanServiceProvider::class, + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Routing\ControllerServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + PhanAn\CascadingConfig\CascadingConfigServiceProvider::class, + Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + App\Providers\MediaServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Input' => Illuminate\Support\Facades\Input::class, + 'Inspiring' => Illuminate\Foundation\Inspiring::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + 'Media' => App\Facades\Media::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 00000000..e8952c85 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,67 @@ + 'eloquent', + + /* + |-------------------------------------------------------------------------- + | Authentication Model + |-------------------------------------------------------------------------- + | + | When using the "Eloquent" authentication driver, we need to know which + | Eloquent model should be used to retrieve your users. Of course, it + | is often just the "User" model but you may use whatever you like. + | + */ + + 'model' => App\Models\User::class, + + /* + |-------------------------------------------------------------------------- + | Authentication Table + |-------------------------------------------------------------------------- + | + | When using the "Database" authentication driver, we need to know which + | table should be used to retrieve your users. We have chosen a basic + | default value but you may easily change it to any table you like. + | + */ + + 'table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Password Reset Settings + |-------------------------------------------------------------------------- + | + | Here you may set the options for resetting passwords including the view + | that is your password reset e-mail. You can also set the name of the + | table that maintains all of the reset tokens for your application. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'password' => [ + 'email' => 'emails.password', + 'table' => 'password_resets', + 'expire' => 60, + ], + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 00000000..abaaac32 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,52 @@ + env('BROADCAST_DRIVER', 'pusher'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_KEY'), + 'secret' => env('PUSHER_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + // + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 00000000..379135b0 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,79 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'servers' => [ + [ + 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +]; diff --git a/config/compile.php b/config/compile.php new file mode 100644 index 00000000..04807eac --- /dev/null +++ b/config/compile.php @@ -0,0 +1,35 @@ + [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Compiled File Providers + |-------------------------------------------------------------------------- + | + | Here you may list service providers which define a "compiles" function + | that returns additional files that should be compiled, providing an + | easy way to get common files from any packages you are utilizing. + | + */ + + 'providers' => [ + // + ], + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 00000000..5987be69 --- /dev/null +++ b/config/database.php @@ -0,0 +1,126 @@ + PDO::FETCH_CLASS, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'database' => database_path('database.sqlite'), + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + 'strict' => false, + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'cluster' => false, + + 'default' => [ + 'host' => '127.0.0.1', + 'port' => 6379, + 'database' => 0, + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 00000000..3fffcf0a --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,85 @@ + 'local', + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => 's3', + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'ftp' => [ + 'driver' => 'ftp', + 'host' => 'ftp.example.com', + 'username' => 'your-username', + 'password' => 'your-password', + + // Optional FTP Settings... + // 'port' => 21, + // 'root' => '', + // 'passive' => true, + // 'ssl' => true, + // 'timeout' => 30, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => 'your-key', + 'secret' => 'your-secret', + 'region' => 'your-region', + 'bucket' => 'your-bucket', + ], + + 'rackspace' => [ + 'driver' => 'rackspace', + 'username' => 'your-username', + 'key' => 'your-key', + 'container' => 'your-container', + 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', + 'region' => 'IAD', + 'url_type' => 'publicURL', + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 00000000..fd5123c0 --- /dev/null +++ b/config/mail.php @@ -0,0 +1,124 @@ + env('MAIL_DRIVER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => env('MAIL_PORT', 587), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => ['address' => null, 'name' => null], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Password + |-------------------------------------------------------------------------- + | + | Here you may set the password required by your SMTP server to send out + | messages from your application. This will be given to the server on + | connection so that the application will be able to send messages. + | + */ + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Mail "Pretend" + |-------------------------------------------------------------------------- + | + | When this option is enabled, e-mail will not actually be sent over the + | web and will instead be written to your application's logs files so + | you may inspect the message. This is great for local development. + | + */ + + 'pretend' => env('MAIL_PRETEND', false), + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 00000000..9d30238e --- /dev/null +++ b/config/queue.php @@ -0,0 +1,94 @@ + env('QUEUE_DRIVER', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'expire' => 60, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'ttr' => 60, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'queue' => 'your-queue-url', + 'region' => 'us-east-1', + ], + + 'iron' => [ + 'driver' => 'iron', + 'host' => 'mq-aws-us-east-1.iron.io', + 'token' => 'your-token', + 'project' => 'your-project-id', + 'queue' => 'your-queue-name', + 'encrypt' => true, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => 'default', + 'expire' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 00000000..93eec863 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + ], + + 'mandrill' => [ + 'secret' => env('MANDRILL_SECRET'), + ], + + 'ses' => [ + 'key' => env('SES_KEY'), + 'secret' => env('SES_SECRET'), + 'region' => 'us-east-1', + ], + + 'stripe' => [ + 'model' => App\User::class, + 'key' => env('STRIPE_KEY'), + 'secret' => env('STRIPE_SECRET'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 00000000..96a2fe02 --- /dev/null +++ b/config/session.php @@ -0,0 +1,153 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => 30*24*60, + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => true, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => 'remember_me_before_the_war', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => false, + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 00000000..e193ab61 --- /dev/null +++ b/config/view.php @@ -0,0 +1,33 @@ + [ + realpath(base_path('resources/views')), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => realpath(storage_path('framework/views')), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 00000000..9b1dffd9 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php new file mode 100644 index 00000000..8e4b9a21 --- /dev/null +++ b/database/factories/ModelFactory.php @@ -0,0 +1,46 @@ +define(App\Models\User::class, function ($faker) { + return [ + 'name' => $faker->name, + 'email' => $faker->email, + 'password' => bcrypt(str_random(10)), + 'is_admin' => false, + 'remember_token' => str_random(10), + ]; +}); + +$factory->defineAs(App\Models\User::class, 'admin', function ($faker) use ($factory) { + $user = $factory->raw(App\Models\User::class); + + return array_merge($user, ['is_admin' => true]); +}); + +$factory->define(App\Models\Artist::class, function ($faker) { + return [ + 'name' => $faker->name, + ]; +}); + +$factory->define(App\Models\Album::class, function ($faker) { + return [ + 'name' => $faker->sentence, + 'cover' => md5(uniqid()).'.jpg', + ]; +}); + +$factory->define(App\Models\Song::class, function ($faker) { + return [ + 'title' => $faker->sentence, + 'length' => $faker->randomFloat(2, 10, 500), + 'lyrics' => $faker->paragraph(), + 'path' => '/tmp/'.uniqid().'.mp3', + 'mtime' => time(), + ]; +}); + +$factory->define(App\Models\Playlist::class, function ($faker) { + return [ + 'name' => $faker->name, + ]; +}); diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 00000000..f8fb02b4 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password', 60); + $table->boolean('is_admin')->default(false); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 00000000..00057f9c --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,31 @@ +string('email')->index(); + $table->string('token')->index(); + $table->timestamp('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('password_resets'); + } +} diff --git a/database/migrations/2015_11_23_074600_create_artists_table.php b/database/migrations/2015_11_23_074600_create_artists_table.php new file mode 100644 index 00000000..3f5f523f --- /dev/null +++ b/database/migrations/2015_11_23_074600_create_artists_table.php @@ -0,0 +1,31 @@ +increments('id'); + $table->string('name')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('artists'); + } +} diff --git a/database/migrations/2015_11_23_074709_create_albums_table.php b/database/migrations/2015_11_23_074709_create_albums_table.php new file mode 100644 index 00000000..1cf31331 --- /dev/null +++ b/database/migrations/2015_11_23_074709_create_albums_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->integer('artist_id')->unsigned(); + $table->string('name'); + $table->string('cover')->default(''); + $table->timestamps(); + + $table->foreign('artist_id')->references('id')->on('artists')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('albums'); + } +} diff --git a/database/migrations/2015_11_23_074713_create_songs_table.php b/database/migrations/2015_11_23_074713_create_songs_table.php new file mode 100644 index 00000000..bae3863b --- /dev/null +++ b/database/migrations/2015_11_23_074713_create_songs_table.php @@ -0,0 +1,39 @@ +string('id', 32); + $table->integer('album_id')->unsigned(); + $table->string('title'); + $table->float('length'); + $table->text('lyrics'); + $table->text('path'); + $table->integer('mtime'); + $table->timestamps(); + + $table->primary('id'); + $table->foreign('album_id')->references('id')->on('albums'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('songs'); + } +} diff --git a/database/migrations/2015_11_23_074723_create_playlists_table.php b/database/migrations/2015_11_23_074723_create_playlists_table.php new file mode 100644 index 00000000..2274a134 --- /dev/null +++ b/database/migrations/2015_11_23_074723_create_playlists_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->integer('user_id')->unsigned(); + $table->string('name'); + $table->timestamps(); + + $table->foreign('user_id')->references('id')->on('users'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('playlists'); + } +} diff --git a/database/migrations/2015_11_23_074733_create_interactions_table.php b/database/migrations/2015_11_23_074733_create_interactions_table.php new file mode 100644 index 00000000..5dd6b525 --- /dev/null +++ b/database/migrations/2015_11_23_074733_create_interactions_table.php @@ -0,0 +1,37 @@ +bigIncrements('id'); + $table->integer('user_id')->unsigned(); + $table->string('song_id', 32); + $table->boolean('liked')->default(false); + $table->integer('play_count')->default(0); + $table->timestamps(); + + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('song_id')->references('id')->on('songs')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('interactions'); + } +} diff --git a/database/migrations/2015_11_23_082854_create_playlist_song_table.php b/database/migrations/2015_11_23_082854_create_playlist_song_table.php new file mode 100644 index 00000000..530b0bbb --- /dev/null +++ b/database/migrations/2015_11_23_082854_create_playlist_song_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->integer('playlist_id')->unsigned(); + $table->string('song_id', 32); + + $table->foreign('playlist_id')->references('id')->on('playlists')->onDelete('cascade'); + $table->foreign('song_id')->references('id')->on('songs')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('playlist_song'); + } +} diff --git a/database/migrations/2015_11_25_033351_create_settings_table.php b/database/migrations/2015_11_25_033351_create_settings_table.php new file mode 100644 index 00000000..137bc3d0 --- /dev/null +++ b/database/migrations/2015_11_25_033351_create_settings_table.php @@ -0,0 +1,32 @@ +string('key'); + $table->text('value'); + + $table->primary('key'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('settings'); + } +} diff --git a/database/seeds/.gitkeep b/database/seeds/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/database/seeds/AlbumTableSeeder.php b/database/seeds/AlbumTableSeeder.php new file mode 100644 index 00000000..10c745c1 --- /dev/null +++ b/database/seeds/AlbumTableSeeder.php @@ -0,0 +1,21 @@ + Album::UNKNOWN_ID, + 'artist_id' => Artist::UNKNOWN_ID, + 'name' => Album::UNKNOWN_NAME, + 'cover' => Album::UNKNOWN_COVER, + ]); + } +} diff --git a/database/seeds/ArtistTableSeeder.php b/database/seeds/ArtistTableSeeder.php new file mode 100644 index 00000000..735d6855 --- /dev/null +++ b/database/seeds/ArtistTableSeeder.php @@ -0,0 +1,18 @@ + Artist::UNKNOWN_ID, + 'name' => Artist::UNKNOWN_NAME, + ]); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 00000000..03c1e005 --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,24 @@ +call(UserTableSeeder::class); + + $this->call(ArtistTableSeeder::class); + $this->call(AlbumTableSeeder::class); + $this->call(SettingTableSeeder::class); + + Model::reguard(); + } +} diff --git a/database/seeds/SettingTableSeeder.php b/database/seeds/SettingTableSeeder.php new file mode 100644 index 00000000..6a1afbc3 --- /dev/null +++ b/database/seeds/SettingTableSeeder.php @@ -0,0 +1,17 @@ +command->error('Please fill in initial admin details in .env file first.'); + abort(422); + } + + User::create([ + 'name' => env('ADMIN_NAME'), + 'email' => env('ADMIN_EMAIL'), + 'password' => Hash::make(env('ADMIN_PASSWORD')), + 'is_admin' => true, + ]); + + if (app()->environment() !== 'testing') { + $this->command->info('Admin user created. You can (and should) remove the auth details from .env now.'); + } + } +} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b06c15cc94c82d1cabcb7b70115934d9f95ab0bf GIT binary patch literal 4286 zcmchZOK4L;6ow~lQLu{}LN!*@L>f>jYJGzBl|?~xtAdNJ1Q81bL2#+9h@c?2DCk0Q zAy_SL3Sx2B+Kn$nT`0IQDlUBDlUl`&-=AjS8cfNZJWly?=5@|LGxv7p8WZC$oiA&kCW{!aeLoA*7VDs%)`OT^yY$!BQ9Op$18{4X-(E-kHne^f>G#%A ze@~IN)_<)|`Z{9<{-ghvwjeZzm6Y}WQEh7>;WG$7dsp695Zj8^`w^Z`p{pwHE?Jyr z*gv5?1=@=dsFmF#aacE8eqQLiQY&%tUY|kV%|*|sp+<8!ScbmlvA;(88_U$6U|e_6 z9Ga-7APqXld~5?jZlBBXx|{dHInZ;_`?C~$?IeNa=$0CDg82E+0h@y$Sc8wU7Z(^` zDt9^UUx{~j*ZV{w5%umkUZK95qt1y{5XD*&?P46pV0zto zotRy)sN1gS=(naZi&j&y{s7~BY!gB5zI{abMlzXv$(dE0zf@gk&7mm5LqkK2oJsn| z(|+ljLf9|cD)zp!Rwrl$K(2jx(^>gXNAiv{|a*O0d9fr7p?OR z48k#33zga&66^xq7iU24zz%4E4D^7Wk8C;Ygho|-&C343B>aYN@VdY_UW`G%cwued pB}h#(iXRQ2VVmtUVm1VJ)THutLmPVoR!nhD{A5UuAvu~Q`4<%arq=)f literal 0 HcmV?d00001 diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000..98a2a9f6 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,23 @@ +require('events').EventEmitter.defaultMaxListeners = 30; + +var elixir = require('laravel-elixir'); +require('laravel-elixir-vueify'); + +elixir(function (mix) { + mix.browserify('main.js'); + mix.sass('app.scss'); + + mix.copy('resources/assets/img', 'public/img') + .copy('bower_components/fontawesome/fonts', 'public/build/fonts'); + + mix.scripts([ + 'bower_components/plyr/dist/plyr.js' + ], 'public/js/vendors.js', './') + .styles([ + 'resources/assets/css/**/*.css', + 'bower_components/fontawesome/css/font-awesome.min.css', + 'bower_components/plyr/dist/plyr.css' + ], 'public/css/vendors.css', './'); + + mix.version(['css/vendors.css', 'css/app.css', 'js/vendors.js', 'js/main.js']); +}); diff --git a/index.php b/index.php new file mode 100644 index 00000000..339842fd --- /dev/null +++ b/index.php @@ -0,0 +1,58 @@ + + */ + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader for +| our application. We just need to utilize it! We'll simply require it +| into the script here so that we don't have to worry about manual +| loading any of our classes later on. It feels nice to relax. +| +*/ + +require __DIR__.'/bootstrap/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let us turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight our users. +| +*/ + +$app = require_once __DIR__.'/bootstrap/app.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can handle the incoming request +| through the kernel, and send the associated response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have prepared for them. +| +*/ + +$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); + +$response = $kernel->handle( + $request = Illuminate\Http\Request::capture() +); + +$response->send(); + +$kernel->terminate($request, $response); diff --git a/package.json b/package.json new file mode 100644 index 00000000..1ec79495 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "koel", + "version": "0.1.0", + "author": "Phan An ", + "homepage": "http://koel.phanan.net", + "license": "MIT", + "description": "A personal music streaming server that works", + "keywords": [ + "music", + "audio", + "stream" + ], + "repository": { + "type": "git", + "url": "https://github.com/phanan/koel" + }, + "devDependencies": { + "babel-plugin-transform-runtime": "^6.3.13", + "babel-preset-es2015": "^6.3.13", + "babel-preset-react": "^6.3.13", + "babel-register": "^6.3.13", + "babel-runtime": "^5.8.34", + "blueimp-md5": "^1.1.1", + "bower": "^1.7.0", + "chai": "^3.4.1", + "gulp": "^3.9.0", + "ismobilejs": "^0.3.9", + "jquery": "^2.1.4", + "laravel-elixir": "^4.1.0", + "laravel-elixir-vueify": "^1.0.1", + "local-storage": "^1.4.2", + "lodash": "^3.10.1", + "mocha": "^2.3.4", + "node-sass": "^3.4.2", + "sinon": "^1.17.2", + "vue": "^1.0.11", + "vue-hot-reload-api": "^1.2.2", + "vue-resource": "^0.1.17", + "vueify": "^7.0.2", + "vueify-insert-css": "^1.0.0" + }, + "scripts": { + "postinstall": "node node_modules/bower/bin/bower install && gulp --production", + "test": "mocha --compilers js:babel-register resources/assets/js/tests/**/*Test.js" + } +} diff --git a/phpspec.yml b/phpspec.yml new file mode 100644 index 00000000..eb57939e --- /dev/null +++ b/phpspec.yml @@ -0,0 +1,5 @@ +suites: + main: + namespace: App + psr4_prefix: App + src_path: app \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 00000000..cc0841c1 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,27 @@ + + + + + ./tests/ + + + + + app/ + + + + + + + + + diff --git a/resources/assets/css/meyer-reset.min.css b/resources/assets/css/meyer-reset.min.css new file mode 100644 index 00000000..3b2627d6 --- /dev/null +++ b/resources/assets/css/meyer-reset.min.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0} diff --git a/resources/assets/db/db.mwb b/resources/assets/db/db.mwb new file mode 100644 index 0000000000000000000000000000000000000000..9445d016316a6eda70384030e0f5a9dcee2ab90d GIT binary patch literal 13463 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 literal 0 HcmV?d00001 diff --git a/resources/assets/img/covers/unknown-album.png b/resources/assets/img/covers/unknown-album.png new file mode 100644 index 0000000000000000000000000000000000000000..6187bc9209bba9a5eb172264843729438a9ead02 GIT binary patch literal 25502 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 Ezq$ktQUCw| literal 0 HcmV?d00001 diff --git a/resources/assets/img/logo.svg b/resources/assets/img/logo.svg new file mode 100644 index 00000000..025237de --- /dev/null +++ b/resources/assets/img/logo.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/resources/assets/js/app.vue b/resources/assets/js/app.vue new file mode 100644 index 00000000..b2e31cca --- /dev/null +++ b/resources/assets/js/app.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/extra/index.vue b/resources/assets/js/components/main-wrapper/extra/index.vue new file mode 100644 index 00000000..9f67f473 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/extra/index.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/extra/lyrics.vue b/resources/assets/js/components/main-wrapper/extra/lyrics.vue new file mode 100644 index 00000000..4c7e148f --- /dev/null +++ b/resources/assets/js/components/main-wrapper/extra/lyrics.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/index.vue b/resources/assets/js/components/main-wrapper/index.vue new file mode 100644 index 00000000..f8d3aba7 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/albums.vue b/resources/assets/js/components/main-wrapper/main-content/albums.vue new file mode 100644 index 00000000..329f5972 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/albums.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/artists.vue b/resources/assets/js/components/main-wrapper/main-content/artists.vue new file mode 100644 index 00000000..515a010f --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/artists.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/favorites.vue b/resources/assets/js/components/main-wrapper/main-content/favorites.vue new file mode 100644 index 00000000..e4b44bfb --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/favorites.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/index.vue b/resources/assets/js/components/main-wrapper/main-content/index.vue new file mode 100644 index 00000000..7a148944 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/playlist.vue b/resources/assets/js/components/main-wrapper/main-content/playlist.vue new file mode 100644 index 00000000..af1b465d --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/playlist.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/profile.vue b/resources/assets/js/components/main-wrapper/main-content/profile.vue new file mode 100644 index 00000000..01226f99 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/profile.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/queue.vue b/resources/assets/js/components/main-wrapper/main-content/queue.vue new file mode 100644 index 00000000..0e28b25e --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/queue.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/settings.vue b/resources/assets/js/components/main-wrapper/main-content/settings.vue new file mode 100644 index 00000000..f326f4df --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/settings.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/songs.vue b/resources/assets/js/components/main-wrapper/main-content/songs.vue new file mode 100644 index 00000000..131309a8 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/songs.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/resources/assets/js/components/main-wrapper/main-content/users.vue b/resources/assets/js/components/main-wrapper/main-content/users.vue new file mode 100644 index 00000000..2ed5d267 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/main-content/users.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/resources/assets/js/components/main-wrapper/sidebar/index.vue b/resources/assets/js/components/main-wrapper/sidebar/index.vue new file mode 100644 index 00000000..8c162e68 --- /dev/null +++ b/resources/assets/js/components/main-wrapper/sidebar/index.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/resources/assets/js/components/main-wrapper/sidebar/playlists.vue b/resources/assets/js/components/main-wrapper/sidebar/playlists.vue new file mode 100644 index 00000000..0381d81b --- /dev/null +++ b/resources/assets/js/components/main-wrapper/sidebar/playlists.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/resources/assets/js/components/shared/album-item.vue b/resources/assets/js/components/shared/album-item.vue new file mode 100644 index 00000000..8d990e5b --- /dev/null +++ b/resources/assets/js/components/shared/album-item.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/resources/assets/js/components/shared/artist-item.vue b/resources/assets/js/components/shared/artist-item.vue new file mode 100644 index 00000000..115b3e46 --- /dev/null +++ b/resources/assets/js/components/shared/artist-item.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/resources/assets/js/components/shared/overlay.vue b/resources/assets/js/components/shared/overlay.vue new file mode 100644 index 00000000..c0040d8f --- /dev/null +++ b/resources/assets/js/components/shared/overlay.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/resources/assets/js/components/shared/song-item.vue b/resources/assets/js/components/shared/song-item.vue new file mode 100644 index 00000000..79c37675 --- /dev/null +++ b/resources/assets/js/components/shared/song-item.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/resources/assets/js/components/shared/song-list.vue b/resources/assets/js/components/shared/song-list.vue new file mode 100644 index 00000000..1cfeba28 --- /dev/null +++ b/resources/assets/js/components/shared/song-list.vue @@ -0,0 +1,471 @@ + + + + + diff --git a/resources/assets/js/components/shared/sound-bar.vue b/resources/assets/js/components/shared/sound-bar.vue new file mode 100644 index 00000000..663f29dd --- /dev/null +++ b/resources/assets/js/components/shared/sound-bar.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/resources/assets/js/components/site-footer/index.vue b/resources/assets/js/components/site-footer/index.vue new file mode 100644 index 00000000..cc36023f --- /dev/null +++ b/resources/assets/js/components/site-footer/index.vue @@ -0,0 +1,568 @@ + + + + + diff --git a/resources/assets/js/components/site-header/index.vue b/resources/assets/js/components/site-header/index.vue new file mode 100644 index 00000000..52380dcf --- /dev/null +++ b/resources/assets/js/components/site-header/index.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/resources/assets/js/components/site-header/search-form.vue b/resources/assets/js/components/site-header/search-form.vue new file mode 100644 index 00000000..dbd95d5a --- /dev/null +++ b/resources/assets/js/components/site-header/search-form.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/resources/assets/js/components/site-header/user-badge.vue b/resources/assets/js/components/site-header/user-badge.vue new file mode 100644 index 00000000..b3a2f171 --- /dev/null +++ b/resources/assets/js/components/site-header/user-badge.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/resources/assets/js/config/index.js b/resources/assets/js/config/index.js new file mode 100644 index 00000000..cfb5f3e2 --- /dev/null +++ b/resources/assets/js/config/index.js @@ -0,0 +1,4 @@ +export default { + unknownCover: '/public/img/covers/unknown-album.png', + appTitle: 'koel', +}; diff --git a/resources/assets/js/directives/focus.js b/resources/assets/js/directives/focus.js new file mode 100644 index 00000000..c8060e5c --- /dev/null +++ b/resources/assets/js/directives/focus.js @@ -0,0 +1,14 @@ +/** + * A simple directive to set focus into an input field when it's shown. + */ +export default function (value) { + if (!value) { + return; + } + + var el = this.el; + + Vue.nextTick(() => { + el.focus(); + }); +} diff --git a/resources/assets/js/main.js b/resources/assets/js/main.js new file mode 100644 index 00000000..be818f80 --- /dev/null +++ b/resources/assets/js/main.js @@ -0,0 +1,12 @@ +import $ from 'jquery'; +window.Vue = require('vue'); +Vue.use(require('vue-resource')); +Vue.http.options.root = '/api'; +Vue.http.headers.common['X-CSRF-TOKEN'] = $('meta[name="csrf-token"]').attr('content'); +Vue.config.debug = false; + +// Exit light, +// Enter night, +// Take my hand, +// We're off to never never land. +new Vue(require('./app.vue')).$mount('body'); diff --git a/resources/assets/js/mixins/infinite-scroll.js b/resources/assets/js/mixins/infinite-scroll.js new file mode 100644 index 00000000..44aa996d --- /dev/null +++ b/resources/assets/js/mixins/infinite-scroll.js @@ -0,0 +1,37 @@ +import $ from 'jquery'; + +/** + * Add a "infinite scroll" functionality to any component using this plugin. + * Such component should: + * - have the parent DOM element defined as "wrapper": v-el:wrapper + * - have a `scrolling` method bound to `scroll` event on such element: @scroll="scrolling" + * - have the array of all objects named as `items`, either as data, computed, or a prop + */ +export default { + data() { + return { + numOfItems: 30, // Number of currently loaded and displayed items + perPage: 30, // Number of items to be loaded per "page" + }; + }, + + methods: { + scrolling(e) { + var $wrapper = $(this.$els.wrapper); + + // Here we checks if the user has scrolled to the end of the wrapper (or 32px to the end). + // If that's true, load more items. + if ($wrapper.scrollTop() + $wrapper.innerHeight() >= $wrapper[0].scrollHeight - 32) { + this.displayMore(); + } + }, + + displayMore() { + this.numOfItems += this.perPage; + + if (this.numOfItems > this.items.length) { + this.numOfItems = this.items.length; + } + }, + }, +}; diff --git a/resources/assets/js/services/http.js b/resources/assets/js/services/http.js new file mode 100644 index 00000000..d8d0fd53 --- /dev/null +++ b/resources/assets/js/services/http.js @@ -0,0 +1,57 @@ +import { extend } from 'lodash'; + +/** + * Responsible for all HTTP requests. + * + * IMPORTANT: + * If the user has a good enough connection to stream music, he or she shouldn't + * encounter any HTTP errors. That's why Koel doesn't handle HTTP errors. + * After all, even if there were errors, how bad can it be? + */ +export default { + request(method, url, data, cb = null, options = {}) { + options = extend(options, { + error: (data, status, request) => { + if (status === 401) { + document.location.href = "/login"; + } + }, + }); + + switch (method) { + case 'get': + return Vue.http.get(url, data, cb, options); + case 'post': + return Vue.http.post(url, data, cb, options); + case 'put': + return Vue.http.put(url, data, cb, options); + case 'delete': + return Vue.http.delete(url, data, cb, options); + default: + break; + } + }, + + get(url, data = {}, cb = null, options = {}) { + return this.request('get', url, data, cb, options); + }, + + post(url, data, cb = null, options = {}) { + return this.request('post', url, data, cb, options); + }, + + put(url, data, cb = null, options = {}) { + return this.request('put', url, data, cb, options); + }, + + delete(url, data = {}, cb = null, options = {}) { + return this.request('delete', url, data, cb, options); + }, + + /** + * A shortcut method to ping and check if the user session is still valid. + */ + ping() { + return this.get('/'); + }, +}; diff --git a/resources/assets/js/services/ls.js b/resources/assets/js/services/ls.js new file mode 100644 index 00000000..800c82c2 --- /dev/null +++ b/resources/assets/js/services/ls.js @@ -0,0 +1,17 @@ +import ls from 'local-storage'; + +export default { + get(key, defaultVal = null) { + var val = ls(key); + + return val ? val : defaultVal; + }, + + set(key, val) { + return ls(key, val); + }, + + remove(key) { + return ls.remove(key); + }, +}; diff --git a/resources/assets/js/services/playback.js b/resources/assets/js/services/playback.js new file mode 100644 index 00000000..6a10a5d4 --- /dev/null +++ b/resources/assets/js/services/playback.js @@ -0,0 +1,291 @@ +import _ from 'lodash'; +import $ from 'jquery'; + +import queueStore from '../stores/queue'; +import songStore from '../stores/song'; +import preferenceStore from '../stores/preference'; +import config from '../config'; + +export default { + app: null, + player: null, + $volumeInput: null, + repeatModes: ['NO_REPEAT', 'REPEAT_ALL', 'REPEAT_ONE'], + + /** + * Initialize the playback service for this whole Koel app. + * + * @param object app The root Vue component. + */ + init(app) { + this.app = app; + + plyr.setup({ + controls: [], + }); + + this.player = $('.player')[0].plyr; + this.$volumeInput = $('#volumeRange'); + + /** + * Listen to 'error' event on the audio player and play the next song if any. + * We don't care about network error capturing here, since every play() call + * comes with a POST to api/interaction/play. If the user is not logged in anymore, + * this call will result in a 401, following by a redirection to our login page. + */ + this.player.media.addEventListener('error', e => { + this.playNext(); + }); + + /** + * Listen to 'input' event on the volume range control. + * When user drags the volume control, this event will be triggered, and we + * update the volume on the plyr object. + */ + this.$volumeInput.on('input', e => { + this.setVolume($(e.target).val()); + }); + + // Listen to 'ended' event on the audio player and play the next song in the queue. + this.player.media.addEventListener('ended', e => { + if (preferenceStore.get('repeatMode') === 'REPEAT_ONE') { + this.player.restart(); + this.player.play(); + + return; + } + + this.playNext(); + }); + + // On init, set the volume to the value found in the local storage. + this.setVolume(preferenceStore.get('volume')); + }, + + /** + * Play a song. Because + * + * So many adventures couldn't happen today, + * So many songs we forgot to play + * So many dreams swinging out of the blue + * We'll let them come true + * + * @param object song The song to play + */ + play(song) { + if (!song) { + return; + } + + // Set the song as the current song + queueStore.current(song); + + this.app.$broadcast('song:play', song); + + $('title').text(`${song.title} ♫ Koel`); + this.player.source(`/api/${song.id}/play`); + this.player.play(); + + // Register the play count to the server + songStore.registerPlay(song); + + // Show the notification if we're allowed to + if (!window.Notification || !preferenceStore.get('notify')) { + return; + } + + var notification = new Notification(`♫ ${song.title}`, { + icon: song.album.cover, + body: `${song.album.name} – ${song.album.artist.name}` + }); + + window.setTimeout(() => { + notification.close(); + }, 5000); + }, + + /** + * Get the next song in the queue. + * If we're in REPEAT_ALL mode and there's no next song, just get the first song. + */ + nextSong() { + var next = queueStore.getNextSong(); + + if (next) { + return next; + } + + if (preferenceStore.get('repeatMode') === 'REPEAT_ALL') { + return queueStore.first(); + } + }, + + /** + * Get the prev song in the queue. + * If we're in REPEAT_ALL mode and there's no prev song, get the last song. + */ + prevSong() { + var prev = queueStore.getPrevSong(); + + if (prev) { + return prev; + } + + if (preferenceStore.get('repeatMode') === 'REPEAT_ALL') { + return queueStore.last(); + } + }, + + /** + * Circle through the repeat mode. + * The selected mode will be stored into local storage as well. + */ + changeRepeatMode() { + var i = this.repeatModes.indexOf(preferenceStore.get('repeatMode')) + 1; + + if (i >= this.repeatModes.length) { + i = 0; + } + + preferenceStore.set('repeatMode', this.repeatModes[i]); + }, + + /** + * Play the prev song in the queue, if one is found. + * If the prev song is not found and the current mode is NO_REPEAT, we stop completely. + */ + playPrev() { + var prev = this.prevSong(); + + if (!prev && preferenceStore.get('repeatMode') === 'NO_REPEAT') { + this.stop(); + + return; + } + + this.play(prev); + }, + + /** + * Play the next song in the queue, if one is found. + * If the next song is not found and the current mode is NO_REPEAT, we stop completely. + */ + playNext() { + var next = this.nextSong(); + + if (!next && preferenceStore.get('repeatMode') === 'NO_REPEAT') { + // Nothing lasts forever, even cold November rain. + this.stop(); + + return; + } + + this.play(next); + }, + + /** + * Set the volume level. + * + * @param integer volume 0-10 + * @param boolean persist Whether the volume should be saved into local storage + */ + setVolume(volume, persist = true) { + this.player.setVolume(volume); + + if (persist) { + preferenceStore.set('volume', volume); + } + + this.$volumeInput.val(volume); + }, + + /** + * Mute playback. + */ + mute() { + this.setVolume(0, false); + }, + + /** + * Unmute playback. + */ + unmute() { + // If the saved volume is 0, we unmute to the default level (7). + if (preferenceStore.get('volume') === '0' || preferenceStore.get('volume') === 0) { + preferenceStore.set('volume', 7); + } + + this.setVolume(preferenceStore.get('volume')); + }, + + /** + * Completely stop playback. + */ + stop() { + $('title').text(config.appTitle); + this.player.pause(); + this.player.seek(0); + + this.app.$broadcast('song:stop'); + }, + + /** + * Pause playback. + */ + pause() { + this.player.pause(); + }, + + /** + * Resume playback. + */ + resume() { + this.player.play(); + }, + + /** + * Queue up songs (replace them into the queue) and start playing right away. + * + * @param array|null songs An array of song objects. Defaults to all songs if null. + * @param bool shuffle Whether to shuffle the songs before playing. + */ + queueAndPlay(songs = null, shuffle = false) { + if (!songs) { + songs = songStore.all(); + } + + if (!songs.length) { + return; + } + + if (shuffle) { + songs = _.shuffle(songs); + } + + queueStore.clear(); + + queueStore.queue(songs, true); + + this.app.loadMainView('queue'); + + // Wrap this inside a nextTick() to wait for the DOM to complete updating + // and then play the first song in the queue. + Vue.nextTick(() => { + this.play(queueStore.first()); + }); + }, + + /** + * Play the first song in the queue. + * If the current queue is empty, try creating it by shuffling all songs. + */ + playFirstInQueue() { + if (!queueStore.all().length) { + this.queueAndPlay(); + + return; + } + + this.play(queueStore.first()); + }, +}; diff --git a/resources/assets/js/services/utils.js b/resources/assets/js/services/utils.js new file mode 100644 index 00000000..98302d27 --- /dev/null +++ b/resources/assets/js/services/utils.js @@ -0,0 +1,29 @@ +export default { + /** + * Convert a duration in seconds into H:i:s format. + * If H is 0, it will be ommited. + */ + secondsToHis(d) { + d = parseInt(d); + + var s = d%60; + + if (s < 10) { + s = '0' + s; + } + + var i = Math.floor((d/60)%60); + + if (i < 10) { + i = '0' + i; + } + + var h = Math.floor(d/3600); + + if (h < 10) { + h = '0' + h; + } + + return (h === '00' ? '' : h + ':') + i + ':' + s; + }, +}; diff --git a/resources/assets/js/stores/album.js b/resources/assets/js/stores/album.js new file mode 100644 index 00000000..16c1fac3 --- /dev/null +++ b/resources/assets/js/stores/album.js @@ -0,0 +1,58 @@ +import _ from 'lodash'; + +import utils from '../services/utils'; +import stub from '../stubs/album'; +import songStore from './song'; + +export default { + stub, + artists: [], + + state: { + albums: [stub], + }, + + /** + * Init the store. + * + * @param array artists The array of artists to extract album data from. + */ + init(artists) { + this.artists = artists; + + // Traverse through the artists array and add their albums into our master album list. + this.state.albums = _.reduce(artists, (albums, artist) => { + // While we're doing so, for each album, we get its length + // and keep a back reference to the artist too. + _.each(artist.albums, album => { + album.artist = artist; + this.getLength(album); + }); + + return albums.concat(artist.albums); + }, []); + + // Then we init the song store. + songStore.init(this.state.albums); + }, + + all() { + return this.state.albums; + }, + + /** + * Get the total length of an album by summing up its songs' duration. + * The length will also be converted into a H:i:s format and stored as fmtLength. + * + * @param object album + * + * @return string The H:i:s format of the album. + */ + getLength(album) { + album.length = _.reduce(album.songs, (length, song) => { + return length + song.length; + }, 0); + + return (album.fmtLength = utils.secondsToHis(album.length)); + }, +}; diff --git a/resources/assets/js/stores/artist.js b/resources/assets/js/stores/artist.js new file mode 100644 index 00000000..0c7637e1 --- /dev/null +++ b/resources/assets/js/stores/artist.js @@ -0,0 +1,81 @@ +import _ from 'lodash'; + +import config from '../config'; +import albumStore from './album'; +import sharedStore from './shared'; + +export default { + state: { + artists: [], + }, + + /** + * Init the store. + * + * @param array artists The array of artists we got from the server. + */ + init(artists = null) { + if (artists) { + this.state.artists = artists; + } else { + this.state.artists = sharedStore.state.artists; + } + + // Init the album store. This must be called prior to the next logic, + // because we're using some data from the album store later. + albumStore.init(this.state.artists); + + // Traverse through artists array to get the cover and number of songs for each. + _.each(this.state.artists, artist => { + this.getCover(artist); + + artist.songCount = _.reduce(artist.albums, (count, album) => { + return count + album.songs.length; + }, 0); + }); + }, + + all() { + return this.state.artists; + }, + + /** + * Get all songs performed by an artist. + * + * @param object artist + * + * @return array + */ + getSongsByArtist(artist) { + if (!artist.songs) { + artist.songs = _.reduce(artist.albums, (songs, album) => { + return songs.concat(album.songs); + }, []); + } + + return artist.songs; + }, + + /** + * Get the artist's cover + * + * @param object artist + * + * @return string + */ + getCover(artist) { + artist.cover = config.unknownCover; + + artist.albums.every(album => { + // If there's a "real" cover, use it. + if (album.cover != config.unknownCover) { + artist.cover = album.cover; + + // I want to break free. + return false; + } + }); + + return artist.cover; + }, +}; diff --git a/resources/assets/js/stores/favorite.js b/resources/assets/js/stores/favorite.js new file mode 100644 index 00000000..0cd4a43a --- /dev/null +++ b/resources/assets/js/stores/favorite.js @@ -0,0 +1,93 @@ +import _ from 'lodash'; + +import http from '../services/http'; +import utils from '../services/utils'; + +export default { + state: { + songs: [], + }, + + all() { + return this.state.songs; + }, + + /** + * Toggle like/unlike a song. + * A request to the server will be made. + * + * @param object The song object + * @param closure|null The function to execute afterwards + */ + toggleOne(song, cb = null) { + http.post('interaction/like', { id: song.id }, data => { + song.liked = data.liked; + + if (data.liked) { + this.add(song); + } else { + this.remove(song); + } + + if (cb) { + cb(); + } + }); + }, + + /** + * Add a song into the store. + * + * @param object The song object + */ + add(song) { + this.state.songs.push(song); + }, + + /** + * Remove a song from the store. + * + * @param object The song object + */ + remove(song) { + this.state.songs = _.difference(this.state.songs, [song]); + }, + + /** + * Like a bunch of songs. + * + * @param array An array of songs to like + */ + like(songs, cb = null) { + this.state.songs = _.union(this.state.songs, songs); + + http.post('interaction/batch/like', { ids: _.pluck(songs, 'id') }, data => { + _.each(songs, song => { + song.liked = true; + }); + + if (cb) { + cb(); + } + }); + }, + + /** + * Unlike a bunch of songs. + * + * @param array An array of songs to unlike + */ + unlike(songs, cb = null) { + this.state.songs = _.difference(this.state.songs, songs); + + http.post('interaction/batch/unlike', { ids: _.pluck(songs, 'id') }, data => { + _.each(songs, song => { + song.liked = false; + }); + + if (cb) { + cb(); + } + }); + }, +}; diff --git a/resources/assets/js/stores/playlist.js b/resources/assets/js/stores/playlist.js new file mode 100644 index 00000000..beaf10a0 --- /dev/null +++ b/resources/assets/js/stores/playlist.js @@ -0,0 +1,84 @@ +import _ from 'lodash'; + +import http from '../services/http'; +import stub from '../stubs/playlist'; +import sharedStore from './shared'; +import songStore from './song'; + +export default { + stub, + + state: { + playlists: [], + }, + + init() { + this.state.playlists = sharedStore.state.playlists; + + _.each(this.state.playlists, this.getSongs); + }, + + all() { + return this.state.playlists; + }, + + /** + * Get all songs in a playlist. + * + * return array + */ + getSongs(playlist) { + playlist.songs = songStore.byIds(playlist.songs); + + return playlist.songs; + }, + + store(name, songs, cb = null) { + http.post('playlist', { name, songs }, playlist => { + this.getSongs(playlist); + this.state.playlists.push(playlist); + + if (cb) { + cb(); + } + }); + }, + + delete(playlist, cb = null) { + http.delete(`playlist/${playlist.id}`, {}, () => { + this.state.playlists = _.without(this.state.playlists, playlist); + + if (cb) { + cb(); + } + }); + }, + + addSongs(playlist, songs, cb = null) { + playlist.songs = _.union(playlist.songs, songs); + + http.put(`playlist/${playlist.id}/sync`, { songs: _.pluck(playlist.songs, 'id') }, () => { + if (cb) { + cb(); + } + }); + }, + + removeSongs(playlist, songs, cb = null) { + playlist.songs = _.difference(playlist.songs, songs); + + http.put(`playlist/${playlist.id}/sync`, { songs: _.pluck(playlist.songs, 'id') }, () => { + if (cb) { + cb(); + } + }); + }, + + update(playlist, cb = null) { + http.put(`playlist/${playlist.id}`, { name: playlist.name }, () => { + if (cb) { + cb(); + } + }); + }, +}; diff --git a/resources/assets/js/stores/preference.js b/resources/assets/js/stores/preference.js new file mode 100644 index 00000000..16d8d0fc --- /dev/null +++ b/resources/assets/js/stores/preference.js @@ -0,0 +1,43 @@ +import _ from 'lodash'; + +import userStore from './user'; +import ls from '../services/ls'; + +export default { + storeKey: '', + + state: { + volume: 7, + notify: true, + repeatMode: 'NO_REPEAT', + showExtraPanel: true, + }, + + /** + * Init the store + * @param object user The user whose preferences we are managing. + */ + init(user = null) { + if (!user) { + user = userStore.current(); + } + + this.storeKey = `preferences_${user.id}`; + _.extend(this.state, ls.get(this.storeKey, this.state)); + }, + + set(key, val) { + this.state[key] = val; + this.save(); + }, + + get(key) { + var val = _.has(this.state, key) ? this.state[key] : null; + + return val; + }, + + save() { + ls.set(this.storeKey, this.state); + }, +}; diff --git a/resources/assets/js/stores/queue.js b/resources/assets/js/stores/queue.js new file mode 100644 index 00000000..5ea7d1d0 --- /dev/null +++ b/resources/assets/js/stores/queue.js @@ -0,0 +1,137 @@ +import _ from 'lodash'; + +import songStub from '../stubs/song'; + +export default { + state: { + songs: [], + current: songStub, + }, + + init() { + // We don't have anything to do here yet. + // How about another song then? + // + // LITTLE WING + // -- by Jimmy Fucking Hendrick + // + // Well she's walking + // Trough the clouds + // With a circus mind + // That's running wild + // Butterflies and zebras and moonbeams and fairytales + // That's all she ever thinks about + // Riding with the wind + // + // When i'm sad + // She comes to me + // With a thousand smiles + // She gives to me free + // It's alright she said + // It's alright + // Take anything you want from me + // Anything... + // + // [CRAZY SOLO BITCH!] + }, + + all() { + return this.state.songs; + }, + + first() { + return _.first(this.state.songs); + }, + + last() { + return _.last(this.state.songs); + }, + + /** + * Add a list of songs to the end of the current queue, + * or replace the current queue as a whole if `replace` is true. + * + * @param object|array songs The song, or an array of songs + * @param bool replace Whether to replace the current queue + * @param bool toTop Whether to prepend of append to the queue + */ + queue(songs, replace = false, toTop = false) { + if (!Array.isArray(songs)) { + songs = [songs]; + } + + if (replace) { + this.state.songs = songs; + } else { + if (toTop) { + this.state.songs = _.union(songs, this.state.songs); + } else { + this.state.songs = _.union(this.state.songs, songs); + } + } + }, + + /** + * Unqueue a song, or several songs at once. + * + * @param object|string|array songs The song(s) to unqueue. + */ + unqueue(songs) { + if (!Array.isArray(songs)) { + songs = [songs]; + } + + this.state.songs = _.difference(this.state.songs, songs); + }, + + /** + * Clear the current queue. + */ + clear(cb = null) { + this.state.songs = []; + + if (cb) { + cb(); + } + }, + + /** + * Get the next song in queue. + * + * @return object|null + */ + getNextSong() { + var i = _.pluck(this.state.songs, 'id').indexOf(this.current().id) + 1; + + return i >= this.state.songs.length ? null : this.state.songs[i]; + }, + + /** + * Get the previous song in queue. + * + * @return object|null + */ + getPrevSong() { + var i = _.pluck(this.state.songs, 'id').indexOf(this.current().id) - 1; + + return i < 0 ? null : this.state.songs[i]; + }, + + /** + * Get or set the current song. + */ + current(song = null) { + if (song) { + this.state.current = song; + } + + return this.state.current; + }, + + /** + * Shuffle the queue. + */ + shuffle() { + return (this.state.songs = _.shuffle(this.state.songs)); + }, +}; diff --git a/resources/assets/js/stores/setting.js b/resources/assets/js/stores/setting.js new file mode 100644 index 00000000..bccc943a --- /dev/null +++ b/resources/assets/js/stores/setting.js @@ -0,0 +1,27 @@ +import http from '../services/http'; +import stub from '../stubs/settings'; +import sharedStore from './shared'; + +export default { + stub, + + state: { + settings: [], + }, + + init() { + this.state.settings = sharedStore.state.settings; + }, + + all() { + return this.state.settings; + }, + + update(cb = null) { + http.post('settings', this.all(), msg => { + if (cb) { + cb(); + } + }); + }, +}; diff --git a/resources/assets/js/stores/shared.js b/resources/assets/js/stores/shared.js new file mode 100644 index 00000000..79e28e69 --- /dev/null +++ b/resources/assets/js/stores/shared.js @@ -0,0 +1,34 @@ +import http from '../services/http'; + +export default { + state: { + songs: [], + albums: [], + artists: [], + favorites: [], + queued: [], + interactions: [], + users: [], + settings: [], + currentUser: null, + playlists: [], + }, + + init(cb = null) { + http.get('data', {}, data => { + this.state.songs = data.songs; + this.state.artists = data.artists; + this.state.albums = data.albums; + this.state.settings = data.settings; + this.state.playlists = data.playlists; + this.state.interactions = data.interactions; + this.state.users = data.users; + this.state.currentUser = data.user; + this.state.settings = data.settings; + + if (cb) { + cb(); + } + }); + }, +}; diff --git a/resources/assets/js/stores/song.js b/resources/assets/js/stores/song.js new file mode 100644 index 00000000..05e59b46 --- /dev/null +++ b/resources/assets/js/stores/song.js @@ -0,0 +1,141 @@ +import _ from 'lodash'; + +import http from '../services/http'; +import utils from '../services/utils'; +import stub from '../stubs/song'; +import albumStore from './album'; +import favoriteStore from './favorite'; +import sharedStore from './shared'; + +export default { + stub, + sharedStore: null, + albums: [], + + state: { + songs: [stub], + interactions: [], + }, + + /** + * Init the store. + * + * @param array albums The array of albums to extract our songs from + * @param array interactions The array of interactions (like/play count) of the current user + */ + init(albums, interactions = null) { + this.albums = albums; + + if (interactions) { + this.state.interactions = interactions; + } else { + this.state.interactions = sharedStore.state.interactions; + } + + // Iterate through the albums. With each, add its songs into our master song list. + this.state.songs = _.reduce(albums, (songs, album) => { + // While doing so, we populate some other information into the songs as well. + _.each(album.songs, song => { + song.fmtLength = utils.secondsToHis(song.length); + + // Keep a back reference to the album + song.album = album; + + this.setInteractionStats(song); + + if (song.liked) { + favoriteStore.add(song); + } + }); + + return songs.concat(album.songs); + }, []); + }, + + /** + * Get all songs. + */ + all() { + return this.state.songs; + }, + + /** + * Get a song by its ID + * + * @param string id + * + * @return object + */ + byId(id) { + return _.find(this.state.songs, {id}); + }, + + /** + * Get songs by their ID's + * + * @param array ids + * + * @return array + */ + byIds(ids) { + return _.filter(this.state.songs, song => { + return _.contains(ids, song.id); + }); + }, + + /** + * Set the interaction stats (like status and playcount) for a song. + * + * @param object song + */ + setInteractionStats(song) { + var interaction = _.find(this.state.interactions, { song_id: song.id }); + + if (!interaction) { + song.liked = false; + song.playCount = 0; + + return; + } + + song.liked = interaction.liked; + song.playCount = interaction.play_count; + }, + + /** + * Increase a play count for a song. + * + * @param object song + */ + registerPlay(song) { + // Increase playcount + http.post('interaction/play', { id: song.id }, data => { + song.playCount = data.play_count; + }); + }, + + /** + * Get a song's lyrics. + * A HTTP request will be made if the song has no lyrics attribute yet. + * + * @param object song + * @param function cb + */ + getLyrics(song, cb = null) { + if (!_.isUndefined(song.lyrics)) { + if (cb) { + cb(); + } + + return; + } + + http.get(`${song.id}/lyrics`, lyrics => { + song.lyrics = lyrics; + + if (cb) { + cb(); + } + }); + } +}; diff --git a/resources/assets/js/stores/user.js b/resources/assets/js/stores/user.js new file mode 100644 index 00000000..779560f2 --- /dev/null +++ b/resources/assets/js/stores/user.js @@ -0,0 +1,159 @@ +import _ from 'lodash'; +import { md5 } from 'blueimp-md5'; + +import http from '../services/http'; +import stub from '../stubs/user'; +import sharedStore from './shared'; + +export default { + stub, + + state: { + users: [], + current: stub, + }, + + /** + * Init the store. + * + * @param object data The data object that contain the users array. + * Mostly for DI and testing purpose. + * For production, this data is retrieved from the shared store. + * + */ + init(data = null) { + if (!data) { + data = sharedStore.state; + } + + this.state.users = data.users; + this.state.current = data.currentUser; + + // Set the avatar for each of the users… + _.each(this.state.users, this.setAvatar); + + // …and the current user as well. + this.setAvatar(); + }, + + all() { + return this.state.users; + }, + + /** + * Get a user by his ID + * + * @param integer id + * + * @return object + */ + byId(id) { + return _.find(this.state.users, {id}); + }, + + /** + * Get or set the current user. + */ + current(user = null) { + if (user) { + this.state.current = user; + } + + return this.state.current; + }, + + /** + * Set a user's avatar using Gravatar's service. + * + * @param object user The user. If null, the current user. + */ + setAvatar(user = null) { + if (!user) { + user = this.current(); + } + + user.avatar = `https://www.gravatar.com/avatar/${md5(user.email)}?s=256`; + }, + + /** + * Update the current user's profile. + * + * @param string password Can be an empty string if the user is not changing his password. + */ + updateProfile(password = null, cb = null) { + http.put('me', { + password, + name: this.current().name, + email: this.current().email + }, data => { + this.setAvatar(); + + if (cb) { + cb(); + } + } + ); + }, + + /** + * Stores a new user into the database. + * + * @param string name + * @param string email + * @param string password + * @param function cb + */ + store(name, email, password, cb = null) { + http.post('user', { name, email, password }, user => { + this.setAvatar(user); + this.state.users.push(user); + + if (cb) { + cb(); + } + }); + }, + + update(user, name, email, password, cb = null) { + http.put(`user/${user.id}`, { name, email, password }, () => { + this.setAvatar(user); + user.password = ''; + + if (cb) { + cb(); + } + }); + }, + + destroy(user, cb = null) { + http.delete(`user/${user.id}`, {}, () => { + this.state.users = _.without(this.state.users, user); + + // Mama, just killed a man + // Put a gun against his head + // Pulled my trigger, now he's dead + // Mama, life had just begun + // But now I've gone and thrown it all away + // Mama, oooh + // Didn't mean to make you cry + // If I'm not back again this time tomorrow + // Carry on, carry on, as if nothing really matters + // + // Too late, my time has come + // Sends shivers down my spine + // Body's aching all the time + // Goodbye everybody - I've got to go + // Gotta leave you all behind and face the truth + // Mama, oooh + // I don't want to die + // I sometimes wish I'd never been born at all + + /** + * Brian May enters the stage. + */ + if (cb) { + cb(); + } + }); + }, +}; diff --git a/resources/assets/js/stubs/album.js b/resources/assets/js/stubs/album.js new file mode 100644 index 00000000..dfb0bd02 --- /dev/null +++ b/resources/assets/js/stubs/album.js @@ -0,0 +1,11 @@ +import config from '../config'; +import artist from './artist'; + +export default { + artist, + id: 0, + artist_id: 0, + name: '', + cover: config.unknownCover, + songs: [] +}; diff --git a/resources/assets/js/stubs/artist.js b/resources/assets/js/stubs/artist.js new file mode 100644 index 00000000..2d57e74f --- /dev/null +++ b/resources/assets/js/stubs/artist.js @@ -0,0 +1,5 @@ +export default { + id: 0, + name: '', + albums: [], +}; diff --git a/resources/assets/js/stubs/playlist.js b/resources/assets/js/stubs/playlist.js new file mode 100644 index 00000000..36387972 --- /dev/null +++ b/resources/assets/js/stubs/playlist.js @@ -0,0 +1,4 @@ +export default { + name: '', + songs: [], +}; diff --git a/resources/assets/js/stubs/settings.js b/resources/assets/js/stubs/settings.js new file mode 100644 index 00000000..735bc9ce --- /dev/null +++ b/resources/assets/js/stubs/settings.js @@ -0,0 +1,3 @@ +export default { + media_path: '', +}; diff --git a/resources/assets/js/stubs/song.js b/resources/assets/js/stubs/song.js new file mode 100644 index 00000000..0c873de4 --- /dev/null +++ b/resources/assets/js/stubs/song.js @@ -0,0 +1,13 @@ +import album from './album'; + +export default { + album, + id: null, + album_id: 0, + title: '', + length: 0, + fmtLength: '00:00', + lyrics: '', + playing: false, + liked: false, +}; diff --git a/resources/assets/js/stubs/user.js b/resources/assets/js/stubs/user.js new file mode 100644 index 00000000..8b170022 --- /dev/null +++ b/resources/assets/js/stubs/user.js @@ -0,0 +1,7 @@ +export default { + id: 0, + name: '', + email: '', + avatar: '', + is_admin: false, +}; diff --git a/resources/assets/js/tests/blobs/interactions.js b/resources/assets/js/tests/blobs/interactions.js new file mode 100644 index 00000000..56a31ccd --- /dev/null +++ b/resources/assets/js/tests/blobs/interactions.js @@ -0,0 +1,32 @@ +export default [ + { + id: 1, + song_id: "7900ab518f51775fe6cf06092c074ee5", + liked: false, + play_count: 1 + }, + { + id: 2, + song_id: "95c0ffc33c08c8c14ea5de0a44d5df3c", + liked: false, + play_count: 2 + }, + { + id: 3, + song_id: "c83b201502eb36f1084f207761fa195c", + liked: false, + play_count: 1 + }, + { + id: 4, + song_id: "cb7edeac1f097143e65b1b2cde102482", + liked: true, + play_count: 3 + }, + { + id: 5, + song_id: "ccc38cc14bb95aefdf6da4b34adcf548", + liked: false, + play_count: 4 + } +]; diff --git a/resources/assets/js/tests/blobs/media.js b/resources/assets/js/tests/blobs/media.js new file mode 100644 index 00000000..09990102 --- /dev/null +++ b/resources/assets/js/tests/blobs/media.js @@ -0,0 +1,160 @@ +export default [ + { + id: 1, + name: "All-4-One", + albums: [ + { + id: 1193, + artist_id: 1, + name: "All-4-One", + cover: "/public/img/covers/565c0f7067425.jpeg", + songs: [ + { + id: "39189f4545f9d5671fb3dc964f0080a0", + album_id: 1193, + title: "I Swear", + length: 259.92 + } + ] + }, + { + id: 1194, + artist_id: 1, + name: "And The Music Speaks", + cover: "/public/img/covers/unknown-album.png", + songs: [ + { + id: "a6a550f7d950d2a2520f9bf1a60f025a", + album_id: 1194, + title: "I can love you like that", + length: 262.61 + } + ] + }, + { + id: 1195, + artist_id: 1, + name: "Space Jam", + cover: "/public/img/covers/565c0f7115e0f.png", + songs: [ + { + id: "d86c30fd34f13c1aff8db59b7fc9c610", + album_id: 1195, + title: "I turn to you", + length: 293.04 + } + ] + } + ] + }, + { + id: 2, + name: "Bob Dylan", + albums: [ + { + id: 1217, + artist_id: 2, + name: "Highway 61 Revisited", + cover: "/public/img/covers/565c0f76dc6e8.jpeg", + songs: [ + { + id: "e6d3977f3ffa147801ca5d1fdf6fa55e", + album_id: 1217, + title: "Like a rolling stone", + length: 373.63 + } + ] + }, + { + id: 1218, + artist_id: 2, + name: "Pat Garrett & Billy the Kid", + cover: "/public/img/covers/unknown-album.png", + songs: [ + { + id: "aa16bbef6a9710eb9a0f41ecc534fad5", + album_id: 1218, + title: "Knockin' on heaven's door", + length: 151.9 + } + ] + }, + { + id: 1219, + artist_id: 2, + name: "The Times They Are A-Changin'", + cover: "/public/img/covers/unknown-album.png", + songs: [ + { + id: "cb7edeac1f097143e65b1b2cde102482", + album_id: 1219, + title: "The times they are a-changin'", + length: 196 + } + ] + } + ] + }, + { + id: 3, + name: "James Blunt", + albums: [ + { + id: 1268, + artist_id: 3, + name: "Back To Bedlam", + cover: "/public/img/covers/unknown-album.png", + songs: [ + { + id: "0ba9fb128427b32683b9eb9140912a70", + album_id: 1268, + title: "No bravery", + length: 243.12 + }, + { + id: "123fd1ad32240ecab28a4e86ed5173", + album_id: 1268, + title: "So long, Jimmy", + length: 265.04 + }, + { + id: "6a54c674d8b16732f26df73f59c63e21", + album_id: 1268, + title: "Wisemen", + length: 223.14 + }, + { + id: "6df7d82a9a8701e40d1c291cf14a16bc", + album_id: 1268, + title: "Goodbye my lover", + length: 258.61 + }, + { + id: "74a2000d343e4587273d3ad14e2fd741", + album_id: 1268, + title: "High", + length: 245.86 + }, + { + id: "7900ab518f51775fe6cf06092c074ee5", + album_id: 1268, + title: "You're beautiful", + length: 213.29 + }, + { + id: "803910a51f9893347e087af851e38777", + album_id: 1268, + title: "Cry", + length: 246.91 + }, + { + id: "d82b0d4d4803ebbcb61000a5b6a868f5", + album_id: 1268, + title: "Tears and rain", + length: 244.45 + } + ] + } + ] + } +]; diff --git a/resources/assets/js/tests/blobs/users.js b/resources/assets/js/tests/blobs/users.js new file mode 100644 index 00000000..2fbc83bc --- /dev/null +++ b/resources/assets/js/tests/blobs/users.js @@ -0,0 +1,23 @@ +export default { + currentUser: { + id: 1, + name: 'Phan An', + email: 'me@phanan.net', + is_admin: true, + }, + + users: [ + { + id: 1, + name: 'Phan An', + email: 'me@phanan.net', + is_admin: true, + }, + { + id: 2, + name: 'John Doe', + email: 'john@doe.tld', + is_admin: false, + }, + ] +}; diff --git a/resources/assets/js/tests/services/lsTest.js b/resources/assets/js/tests/services/lsTest.js new file mode 100644 index 00000000..ea8ac26e --- /dev/null +++ b/resources/assets/js/tests/services/lsTest.js @@ -0,0 +1,36 @@ +require('chai').should(); + +import localStorage from 'local-storage'; +import ls from '../../services/ls'; + +describe('services/ls', () => { + beforeEach(() => { + localStorage.remove('foo'); + }); + + describe('#get', () => { + it('correctly gets an existing item from local storage', () => { + localStorage('foo', 'bar'); + ls.get('foo').should.equal('bar'); + }); + + it('correctly returns the default value for a non exising item', () => { + ls.get('baz', 'qux').should.equal('qux'); + }); + }); + + describe('#set', () => { + it('correctly sets an item into local storage', () => { + ls.set('foo', 'bar'); + localStorage('foo').should.equal('bar'); + }); + }); + + describe('#remove', () => { + it('correctly removes an item from local storage', () => { + localStorage('foo', 'bar'); + ls.remove('foo'); + (localStorage('foo') === null).should.be.true; + }); + }); +}); diff --git a/resources/assets/js/tests/services/utilsTest.js b/resources/assets/js/tests/services/utilsTest.js new file mode 100644 index 00000000..6842ac72 --- /dev/null +++ b/resources/assets/js/tests/services/utilsTest.js @@ -0,0 +1,15 @@ +require('chai').should(); + +import utils from '../../services/utils'; + +describe('services/utils', () => { + describe('#secondsToHis', () => { + it('correctly formats a duration to H:i:s', () => { + utils.secondsToHis(7547).should.equal('02:05:47'); + }); + + it('ommits hours from short duration when formats to H:i:s', () => { + utils.secondsToHis(314).should.equal('05:14'); + }); + }); +}); diff --git a/resources/assets/js/tests/stores/albumTest.js b/resources/assets/js/tests/stores/albumTest.js new file mode 100644 index 00000000..b104a398 --- /dev/null +++ b/resources/assets/js/tests/stores/albumTest.js @@ -0,0 +1,37 @@ +require('chai').should(); + +import albumStore from '../../stores/album'; +import artists from '../blobs/media'; + +describe('stores/album', () => { + beforeEach(() => { + albumStore.init(artists); + }); + + describe('#init', () => { + it('correctly gathers albums', () => { + albumStore.state.albums.length.should.equal(7); + }); + + it('correctly sets albums length', () => { + albumStore.state.albums[0].length.should.equal(259.92); + }); + + it('correctly sets album artists', () => { + albumStore.state.albums[0].artist.id.should.equal(1); + }); + }); + + describe('#all', () => { + it('correctly returns all songs', () => { + albumStore.all().length.should.equal(7); + }); + }); + + describe('#getLength', () => { + it('correctly calculates an album’s length', () => { + albumStore.getLength(albumStore.state.albums[6]); + albumStore.state.albums[6].length.should.equal(1940.42); // I'm sorry… + }); + }); +}); diff --git a/resources/assets/js/tests/stores/artistTest.js b/resources/assets/js/tests/stores/artistTest.js new file mode 100644 index 00000000..c5b64890 --- /dev/null +++ b/resources/assets/js/tests/stores/artistTest.js @@ -0,0 +1,36 @@ +require('chai').should(); + +import artistStore from '../../stores/artist'; +import artists from '../blobs/media'; + +describe('stores/artist', () => { + beforeEach(() => { + artistStore.init(artists); + }); + + describe('#init', () => { + it('correctly gathers artists', () => { + artistStore.state.artists.length.should.equal(3); + }); + + it('correctly gets artists’ covers', () => { + artistStore.state.artists[0].cover.should.equal('/public/img/covers/565c0f7067425.jpeg'); + }); + + it('correctly counts songs by artists', () => { + artistStore.state.artists[0].songCount = 3; + }); + }); + + describe('#getSongsByArtist', () => { + it('correctly gathers all songs by artist', () => { + artistStore.getSongsByArtist(artistStore.state.artists[0]).length.should.equal(3); + }); + }); + + describe('#getCover', () => { + it('correctly gets an artist’s cover', () => { + artistStore.getCover(artistStore.state.artists[0]).should.equal('/public/img/covers/565c0f7067425.jpeg'); + }); + }); +}); diff --git a/resources/assets/js/tests/stores/preferenceTest.js b/resources/assets/js/tests/stores/preferenceTest.js new file mode 100644 index 00000000..fd340837 --- /dev/null +++ b/resources/assets/js/tests/stores/preferenceTest.js @@ -0,0 +1,30 @@ +require('chai').should(); + +import localStorage from 'local-storage'; +import preferenceStore from '../../stores/preference'; + +let user = { id: 0 }; +let preferences = { + volume: 8, + notify: false, +}; + +describe('stores/preference', () => { + beforeEach(() => { + localStorage.set(`preferences_${user.id}`, preferences); + preferenceStore.init(user); + }); + + describe("#set", () => { + it('correctly sets preferences', () => { + preferenceStore.set('volume', 5); + localStorage.get(`preferences_${user.id}`).volume.should.equal(5); + }); + }); + + describe("#get", () => { + it('returns correct preference values', () => { + preferenceStore.get('volume').should.equal(8); + }); + }); +}); diff --git a/resources/assets/js/tests/stores/queueTest.js b/resources/assets/js/tests/stores/queueTest.js new file mode 100644 index 00000000..9d516847 --- /dev/null +++ b/resources/assets/js/tests/stores/queueTest.js @@ -0,0 +1,110 @@ +require('chai').should(); + +import queueStore from '../../stores/queue'; +import artists from '../blobs/media'; + +let songs = artists[2].albums[0].songs; + +describe('stores/queue', () => { + beforeEach(() => { + queueStore.state.songs = songs; + queueStore.state.current = songs[1]; + }); + + describe('#all', () => { + it('correctly returns all queued songs', () => { + queueStore.all().should.equal(songs); + }); + }); + + describe('#first', () => { + it('correctly returns the first queued song', () => { + queueStore.first().title.should.equal('No bravery'); + }); + }); + + describe('#last', () => { + it('correctly returns the last queued song', () => { + queueStore.last().title.should.equal('Tears and rain'); + }); + }); + + describe('#queue', () => { + beforeEach(() => { + queueStore.state.songs = songs; + }); + + let song = artists[0].albums[0].songs[0]; + + it('correctly appends a song to end of the queue', () => { + queueStore.queue(song); + queueStore.last().title.should.equal('I Swear'); + }); + + it('correctly prepends a song to top of the queue', () => { + queueStore.queue(song, false, true); + queueStore.first().title.should.equal('I Swear'); + }); + + it('correctly replaces the whole queue', () => { + queueStore.queue(song, true); + queueStore.all().length.should.equal(1); + queueStore.first().title.should.equal('I Swear'); + }); + }); + + describe('#unqueue', () => { + beforeEach(() => { + queueStore.state.songs = songs; + }); + + it('correctly removes a song from queue', () => { + queueStore.unqueue(queueStore.state.songs[0]); + queueStore.first().title.should.equal('So long, Jimmy'); // Oh the irony. + }); + + it('correctly removes mutiple songs from queue', () => { + queueStore.unqueue([queueStore.state.songs[0], queueStore.state.songs[1]]); + queueStore.first().title.should.equal('Wisemen'); + }); + }); + + describe('#clear', () => { + it('correctly clears all songs from queue', () => { + queueStore.clear(); + queueStore.state.songs.length.should.equal(0); + }); + }); + + describe('#current', () => { + it('returns the correct current song', () => { + queueStore.current().title.should.equal('So long, Jimmy'); + }); + + it('successfully sets the current song', () => { + queueStore.current(queueStore.state.songs[0]).title.should.equal('No bravery'); + }); + }); + + describe('#getNextSong', () => { + it('correctly gets the next song in queue', () => { + queueStore.getNextSong().title.should.equal('Wisemen'); + }); + + it('correctly returns null if at end of queue', () => { + queueStore.current(queueStore.state.songs[queueStore.state.songs.length - 1]); + (queueStore.getNextSong() === null).should.be.true; + }); + }); + + describe('#getPrevSong', () => { + it('correctly gets the previous song in queue', () => { + queueStore.getPrevSong().title.should.equal('No bravery'); + }); + + it('correctly returns null if at end of queue', () => { + queueStore.current(queueStore.state.songs[0]); + (queueStore.getPrevSong() === null).should.be.true; + }); + }); +}); diff --git a/resources/assets/js/tests/stores/songTest.js b/resources/assets/js/tests/stores/songTest.js new file mode 100644 index 00000000..1b243589 --- /dev/null +++ b/resources/assets/js/tests/stores/songTest.js @@ -0,0 +1,56 @@ +require('chai').should(); + +import songStore from '../../stores/song'; +import albumStore from '../../stores/album'; +import artists from '../blobs/media'; +import interactions from '../blobs/interactions'; + +describe('stores/song', () => { + beforeEach(() => { + // This is ugly and not very "unit," but anyway. + albumStore.init(artists); + songStore.init(albumStore.all(), interactions); + }); + + describe('#init', () => { + it('correctly gathers all songs', () => { + songStore.state.songs.length.should.equal(14); + }); + + it ('coverts lengths to formatted lengths', () => { + songStore.state.songs[0].fmtLength.should.be.a.string; + }); + + it('correctly sets albums', () => { + songStore.state.songs[0].album.id.should.equal(1193); + }); + }); + + describe('#all', () => { + it('correctly returns all songs', () => { + songStore.all().length.should.equal(14); + }); + }); + + describe('#byId', () => { + it('correctly gets a song by ID', () => { + songStore.byId('e6d3977f3ffa147801ca5d1fdf6fa55e').title.should.equal('Like a rolling stone'); + }); + }); + + describe('#byIds', () => { + it('correctly gets multiple songs by IDs', () => { + let songs = songStore.byIds(['e6d3977f3ffa147801ca5d1fdf6fa55e', 'aa16bbef6a9710eb9a0f41ecc534fad5']); + songs[0].title.should.equal('Like a rolling stone'); + songs[1].title.should.equal("Knockin' on heaven's door"); + }); + }); + + describe('#setInteractionStats', () => { + it('correctly sets interaction status', () => { + let song = songStore.byId('cb7edeac1f097143e65b1b2cde102482'); + song.liked.should.be.true; + song.playCount.should.equal(3); + }); + }); +}); diff --git a/resources/assets/js/tests/stores/userTest.js b/resources/assets/js/tests/stores/userTest.js new file mode 100644 index 00000000..0518c03f --- /dev/null +++ b/resources/assets/js/tests/stores/userTest.js @@ -0,0 +1,68 @@ +require('chai').should(); + +import userStore from '../../stores/user'; +import data from '../blobs/users'; + +describe('stores/user', () => { + beforeEach(() => { + userStore.init(data); + }); + + describe('#init', () => { + it('correctly sets data state', () => { + userStore.state.users.should.equal(data.users); + userStore.state.current.should.equal(data.currentUser); + }); + }); + + describe('#all', () => { + it('correctly returns all users', () => { + userStore.all().should.equal(data.users); + }); + }); + + describe('#byId', () => { + it('correctly gets a user by ID', () => { + userStore.byId(1).should.equal(data.users[0]); + }); + }); + + describe('#current', () => { + it('correctly gets the current user', () => { + userStore.current().id.should.equal(1); + }); + + it('correctly sets the current user', () => { + userStore.current(data.users[1]); + userStore.state.current.id.should.equal(2); + }); + }); + + describe('#setAvatar', () => { + it('correctly sets the current user’s avatar', () => { + userStore.setAvatar(); + userStore.current().avatar.should.equal('https://www.gravatar.com/avatar/b9611f1bba1aacbe6f5de5856695a202?s=256'); + }); + + it('correctly sets a user’s avatar', () => { + userStore.setAvatar(data.users[1]); + data.users[1].avatar.should.equal('https://www.gravatar.com/avatar/5024672cfe53f113b746e1923e373058?s=256'); + }); + }); + + describe('#updateProfile', () => { + + }); + + describe('#store', () => { + + }); + + describe('#update', () => { + + }); + + describe('#destroy', () => { + + }); +}); diff --git a/resources/assets/psd/logo.psd b/resources/assets/psd/logo.psd new file mode 100644 index 0000000000000000000000000000000000000000..906b1b553ce3c51a6a238c13e03397954b49d0c8 GIT binary patch literal 48218 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 65% { + $control-color: $gray-light; +} @else { + $control-color: $gray-lighter; +} +@if lightness($control-bg-hover) >= 65% { + $control-color-hover: $gray; +} @else { + $control-color-hover: #fff; +} + +// Tooltips +$tooltip-bg: $controls-bg !default; +$tooltip-color: $control-color !default; +$tooltip-padding: $control-spacing !default; +$tooltip-arrow-size: 5px !default; +$tooltip-radius: 3px !default; + +// Progress +$progress-bg: rgba(red($gray), green($gray), blue($gray), .2) !default; +$progress-playing-bg: $blue !default; +$progress-buffered-bg: rgba(red($gray), green($gray), blue($gray), .25) !default; +$progress-loading-size: 40px !default; +$progress-loading-bg: rgba(0,0,0, .15) !default; + +// Volume +$volume-track-height: 6px !default; +$volume-track-bg: darken($controls-bg, 10%) !default; +$volume-thumb-height: ($volume-track-height * 2) !default; +$volume-thumb-width: ($volume-track-height * 2) !default; +$volume-thumb-bg: $control-color !default; +$volume-thumb-bg-focus: $control-bg-hover !default; + +// Breakpoints +$bp-control-split: 560px !default; // When controls split into left/right +$bp-captions-large: 768px !default; // When captions jump to the larger font size + +// Animation +// --------------------------------------- + +@keyframes progress { + to { background-position: $progress-loading-size 0; } +} + +// Font smoothing +@mixin font-smoothing($mode: on) +{ + @if ($mode == 'on') { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } + @else if ($mode == 'off') { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: subpixel-antialiased; + } +} + +// Contain floats: nicolasgallagher.com/micro-clearfix-hack/ +@mixin clearfix() +{ + zoom: 1; + &:before, + &:after { content: ''; display: table; } + &:after { clear: both; } +} +// Tab focus styles +@mixin tab-focus() +{ + outline: thin dotted #000; + outline-offset: 0; +} + +// styling +@mixin volume-thumb() +{ + height: $volume-thumb-height; + width: $volume-thumb-width; + background: $volume-thumb-bg; + border: 0; + border-radius: ($volume-thumb-height / 2); + transition: background .3s ease; + cursor: ew-resize; +} +@mixin volume-track() +{ + height: $volume-track-height; + background: $volume-track-bg; + border: 0; + border-radius: ($volume-track-height / 2); +} +@mixin seek-thumb() +{ + background: transparent; + border: 0; + width: ($control-spacing * 2); + height: $control-spacing; +} +@mixin seek-track() +{ + background: none; + border: 0; +} + +// Screen reader only +// ------------------------------- +.sr-only { + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + padding: 0 !important; + border: 0 !important; + height: 1px !important; + width: 1px !important; + overflow: hidden; +} + +// Styles +// ------------------------------- +// Base +.player { + position: relative; + max-width: 100%; + min-width: 290px; + + // border-box everything + // http://paulirish.com/2012/box-sizing-border-box-ftw/ + &, + *, + *::after, + *::before { + box-sizing: border-box; + } + + // For video + &-video-wrapper { + position: relative; + } + video, + audio { + width: 100%; + height: auto; + vertical-align: middle; + } + + // For embeds + &-video-embed { + padding-bottom: 56.25%; /* 16:9 */ + height: 0; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; + } + } + + // Captions + &-captions { + display: none; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: ($control-spacing * 2) ($control-spacing * 2) ($control-spacing * 3); + color: #fff; + font-size: $font-size-captions-base; + text-align: center; + @include font-smoothing(); + + span { + border-radius: 2px; + padding: 3px 10px; + background: rgba(0,0,0, .9); + } + span:empty { + display: none; + } + + @media (min-width: $bp-captions-large) { + font-size: $font-size-captions-medium; + } + } + &.captions-active &-captions { + display: block; + } + &.fullscreen-active &-captions { + font-size: $font-size-captions-large; + } + + // Player controls + &-controls { + @include clearfix(); + @include font-smoothing(); + position: relative; + padding: $control-spacing; + background: $controls-bg; + line-height: 1; + text-align: center; + box-shadow: 0 1px 1px rgba(red($gray-dark), green($gray-dark), blue($gray-dark), .2); + + // Layout + &-right { + display: block; + margin: $control-spacing auto 0; + } + @media (min-width: $bp-control-split) { + &-left { + float: left; + } + &-right { + float: right; + margin-top: 0; + } + } + + // Buttons + button { + display: inline-block; + vertical-align: middle; + margin: 0 2px; + padding: ($control-spacing / 2) $control-spacing; + overflow: hidden; + border: 0; + background: transparent; + border-radius: 3px; + cursor: pointer; + color: $control-color; + transition: background .3s ease, color .3s ease, opacity .3s ease; + + svg { + width: 18px; + height: 18px; + display: block; + fill: currentColor; + transition: fill .3s ease; + } + + // Hover and tab focus + &.tab-focus, + &:hover { + background: $control-bg-hover; + color: $control-color-hover; + } + // Default focus + &:focus { + outline: 0; + } + } + + // Hide toggle icons by default + .icon-exit-fullscreen, + .icon-muted, + .icon-captions-on { + display: none; + } + + // Time display + .player-time { + display: inline-block; + vertical-align: middle; + margin-left: $control-spacing; + color: $control-color; + font-weight: 600; + font-size: $font-size-small; + @include font-smoothing(); + } + + // Media duration hidden on small screens + .player-time + .player-time { + display: none; + + @media (min-width: $bp-control-split) { + display: inline-block; + } + + // Add a slash in before + &::before { + content: '\2044'; + margin-right: $control-spacing; + } + } + } + + // Tooltips + &-tooltip { + position: absolute; + z-index: 2; + bottom: 100%; + margin-bottom: $tooltip-padding; + padding: $tooltip-padding ($tooltip-padding * 1.5); + + opacity: 0; + background: $tooltip-bg; + border-radius: $tooltip-radius; + color: $tooltip-color; + font-size: $font-size-small; + line-height: 1.5; + font-weight: 600; + + transform: translate(-50%, ($tooltip-padding * 3)) scale(0); + transform-origin: 50% 100%; + transition: transform .2s .1s ease, opacity .2s .1s ease; + + &::after { + content: ''; + display: block; + position: absolute; + left: 50%; + bottom: -$tooltip-arrow-size; + margin-left: -$tooltip-arrow-size; + width: 0; + height: 0; + transition: inherit; + border-style: solid; + border-width: $tooltip-arrow-size $tooltip-arrow-size 0 $tooltip-arrow-size; + border-color: $controls-bg transparent transparent; + } + } + button:hover .player-tooltip, + button:focus .player-tooltip { + opacity: 1; + transform: translate(-50%, 0) scale(1); + } + button:hover .player-tooltip { + z-index: 3; + } + + // Player progress + // element + &-progress { + position: absolute; + bottom: 100%; + left: 0; + right: 0; + width: 100%; + height: 5px; + background: $progress-bg; + + &-buffer[value], + &-played[value], + &-seek[type='range'] { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 5px; + margin: 0; + padding: 0; + vertical-align: top; + + -webkit-appearance: none; + -moz-appearance: none; + border: none; + background: transparent; + } + &-buffer[value], + &-played[value] { + &::-webkit-progress-bar { + background: transparent; + } + + // Inherit from currentColor; + &::-webkit-progress-value { + background: currentColor; + } + &::-moz-progress-bar { + background: currentColor; + } + } + &-played[value] { + z-index: 2; + color: $progress-playing-bg; + } + &-buffer[value] { + color: $progress-buffered-bg; + } + + // Seek control + // element + // Specificity is for bootstrap compatibility + &-seek[type='range'] { + z-index: 4; + cursor: pointer; + outline: 0; + + // Webkit + &::-webkit-slider-runnable-track { + @include seek-track(); + } + &::-webkit-slider-thumb { + -webkit-appearance: none; + @include seek-thumb(); + } + + // Mozilla + &::-moz-range-track { + @include seek-track(); + } + &::-moz-range-thumb { + -moz-appearance: none; + @include seek-thumb(); + } + + // Microsoft + &::-ms-track { + color: transparent; + @include seek-track(); + } + &::-ms-fill-lower, + &::-ms-fill-upper { + @include seek-track(); + } + &::-ms-thumb { + @include seek-thumb(); + } + + &:focus { + outline: 0; + } + &::-moz-focus-outer { + border: 0; + } + } + } + + // Loading state + &.loading .player-progress-buffer { + animation: progress 1s linear infinite; + background-size: $progress-loading-size $progress-loading-size; + background-repeat: repeat-x; + background-color: $progress-buffered-bg; + background-image: linear-gradient( + -45deg, + $progress-loading-bg 25%, + transparent 25%, + transparent 50%, + $progress-loading-bg 50%, + $progress-loading-bg 75%, + transparent 75%, + transparent); + color: transparent; + } + + // States + &-controls [data-player='pause'], + &.playing .player-controls [data-player='play'] { + display: none; + } + &.playing .player-controls [data-player='pause'] { + display: inline-block; + } + + // Volume control + // element + // Specificity is for bootstrap compatibility + &-volume[type='range'] { + display: inline-block; + vertical-align: middle; + -webkit-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + width: 100px; + padding: 0; + cursor: pointer; + background: transparent; + border: none; + outline: 0 !important; + + // Webkit + &::-webkit-slider-runnable-track { + @include volume-track(); + } + &::-webkit-slider-thumb { + -webkit-appearance: none; + margin-top: -(($volume-thumb-height - $volume-track-height) / 2); + @include volume-thumb(); + } + + // Mozilla + &::-moz-range-track { + @include volume-track(); + } + &::-moz-range-thumb { + @include volume-thumb(); + } + + // Microsoft + &::-ms-track { + height: $volume-track-height; + background: transparent; + border-color: transparent; + border-width: (($volume-thumb-height - $volume-track-height) / 2) 0; + color: transparent; + } + &::-ms-fill-lower, + &::-ms-fill-upper { + @include volume-track(); + } + &::-ms-thumb { + @include volume-thumb(); + } + + &:focus { + outline: 0; + + &::-webkit-slider-thumb { + background: $volume-thumb-bg-focus; + } + &::-moz-range-thumb { + background: $volume-thumb-bg-focus; + } + &::-ms-thumb { + background: $volume-thumb-bg-focus; + } + } + } + + // Hide sound controls on iOS + // It's not supported to change volume using JavaScript: + // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html + &.ios &-volume, + &.ios [data-player='mute'], + &-audio.ios &-controls-right { + display: none; + } + // Center buttons so it looks less odd + &-audio.ios &-controls-left { + float: none; + } + + // Audio specific styles + // Position the progress within the container + &-audio .player-controls { + padding-top: ($control-spacing * 2); + } + &-audio .player-progress { + bottom: auto; + top: 0; + background: $off-white; + } + + // Full screen mode + &-fullscreen, + &.fullscreen-active { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 100%; + width: 100%; + z-index: 10000000; + background: #000; + + video { + height: 100%; + } + .player-video-wrapper { + height: 100%; + width: 100%; + } + .player-controls { + position: absolute; + bottom: 0; + left: 0; + right: 0; + } + + // Hide controls when playing in full screen + &.fullscreen-hide-controls.playing { + .player-controls { + transform: translateY(100%) translateY($control-spacing / 2); + transition: transform .3s .2s ease; + } + &.player-hover .player-controls { + transform: translateY(0); + } + .player-captions { + bottom: ($control-spacing / 2); + transition: bottom .3s .2s ease; + } + } + + // Captions + .player-captions, + &.fullscreen-hide-controls.playing.player-hover .player-captions { + top: auto; + bottom: 90px; + + @media (min-width: $bp-control-split) { + bottom: 60px; + } + } + } + + // Change icons on state change + &.fullscreen-active .icon-exit-fullscreen, + &.muted .player-controls .icon-muted, + &.captions-active .player-controls .icon-captions-on { + display: block; + + & + svg { + display: none; + } + } + + // Some options are hidden by default + [data-player='captions'], + [data-player='fullscreen'] { + display: none; + } + &.captions-enabled [data-player='captions'], + &.fullscreen-enabled [data-player='fullscreen'] { + display: inline-block; + } +} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100644 index 00000000..e5506df2 --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,19 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100644 index 00000000..fcab34b2 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100644 index 00000000..e6f3a671 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Passwords must be at least six characters and match the confirmation.', + 'reset' => 'Your password has been reset!', + 'sent' => 'We have e-mailed your password reset link!', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that e-mail address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100644 index 00000000..b0a1f143 --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,110 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 00000000..4dc68b4b --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,97 @@ + + + + + + Koel + + + + + + + + + + + +

+ + + + {!! csrf_field() !!} + + + diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 00000000..4a415059 --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,47 @@ + + + + Be right back. + + + + + + +
+
+
Be right back.
+
+
+ + diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php new file mode 100644 index 00000000..4c50ef4d --- /dev/null +++ b/resources/views/index.blade.php @@ -0,0 +1,24 @@ + + + + Koel + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/vendor/.gitkeep b/resources/views/vendor/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/server.php b/server.php new file mode 100644 index 00000000..900d472e --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.$uri)) { + return false; +} + +require_once __DIR__.'/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 00000000..953edb7a --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,7 @@ +config.php +routes.php +compiled.php +services.json +events.scanned.php +routes.scanned.php +down diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/InteractionTest.php b/tests/InteractionTest.php new file mode 100644 index 00000000..e7cc2f26 --- /dev/null +++ b/tests/InteractionTest.php @@ -0,0 +1,99 @@ +createSampleMediaSet(); + } + + public function testPlayCountRegister() + { + $user = factory(User::class)->create(); + + $song = Song::orderBy('id')->first(); + $this->actingAs($user) + ->post('api/interaction/play', ['id' => $song->id]); + + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'play_count' => 1, + ]); + + // Try again + $this->actingAs($user) + ->post('api/interaction/play', ['id' => $song->id]); + + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'play_count' => 2, + ]); + } + + public function testLikeRegister() + { + $user = factory(User::class)->create(); + + $song = Song::orderBy('id')->first(); + $this->actingAs($user) + ->post('api/interaction/like', ['id' => $song->id]); + + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'liked' => 1, + ]); + + // Try again + $this->actingAs($user) + ->post('api/interaction/like', ['id' => $song->id]); + + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'liked' => 0, + ]); + } + + public function testBatchLikeAndUnlike() + { + $user = factory(User::class)->create(); + + $songs = Song::orderBy('id')->take(2)->get(); + $songIds = array_pluck($songs->toArray(), 'id'); + + $this->actingAs($user) + ->post('api/interaction/batch/like', ['ids' => $songIds]); + + foreach ($songs as $song) { + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'liked' => 1, + ]); + } + + $this->actingAs($user) + ->post('api/interaction/batch/unlike', ['ids' => $songIds]); + + foreach ($songs as $song) { + $this->seeInDatabase('interactions', [ + 'user_id' => $user->id, + 'song_id' => $song->id, + 'liked' => 0, + ]); + } + } +} diff --git a/tests/MediaTest.php b/tests/MediaTest.php new file mode 100644 index 00000000..bcc7d0b9 --- /dev/null +++ b/tests/MediaTest.php @@ -0,0 +1,54 @@ +sync($this->mediaPath); + + // Standard mp3 files under root path should be recognized + $this->seeInDatabase('songs', ['path' => $this->mediaPath.'/full.mp3']); + + // Ogg files and audio files in subdirectories should be recognized + $this->seeInDatabase('songs', ['path' => $this->mediaPath.'/subdir/back-in-black.ogg']); + + // Non-audio files shouldn't be recognized + $this->notSeeInDatabase('songs', ['path' => $this->mediaPath.'/rubbish.log']); + + // Broken/corrupted audio files shouldn't be recognized + $this->notSeeInDatabase('songs', ['path' => $this->mediaPath.'/fake.mp3']); + + // Artists should be created + $this->seeInDatabase('artists', ['name' => 'Cuckoo']); + $this->seeInDatabase('artists', ['name' => 'Koel']); + + // Albums should be created + $this->seeInDatabase('albums', ['name' => 'Koel Testing Vol. 1']); + + // Albums and artists should be correctly linked + $album = Album::whereName('Koel Testing Vol. 1')->first(); + $this->assertEquals('Koel', $album->artist->name); + + $currentCover = $album->cover; + + $song = Song::orderBy('id', 'desc')->first(); + + // Modified file should be recognized + touch($song->path, $time = time()); + $media->sync($this->mediaPath); + $song = Song::find($song->id); + $this->assertEquals($time, $song->mtime); + + // Albums with a non-default cover should have their covers overwritten + $this->assertEquals($currentCover, Album::find($album->id)->cover); + } +} diff --git a/tests/PlaylistTest.php b/tests/PlaylistTest.php new file mode 100644 index 00000000..7730d8af --- /dev/null +++ b/tests/PlaylistTest.php @@ -0,0 +1,117 @@ +createSampleMediaSet(); + } + + public function testCreatePlaylist() + { + $user = factory(User::class)->create(); + + // Let's create a playlist with 3 songs + $songs = Song::orderBy('id')->take(3)->get(); + $songIds = array_pluck($songs->toArray(), 'id'); + + $this->actingAs($user) + ->post('api/playlist', [ + 'name' => 'Foo Bar', + 'songs' => $songIds, + ]); + + $this->seeInDatabase('playlists', [ + 'user_id' => $user->id, + 'name' => 'Foo Bar', + ]); + + $playlist = Playlist::orderBy('id', 'desc')->first(); + + foreach ($songs as $song) { + $this->seeInDatabase('playlist_song', [ + 'playlist_id' => $playlist->id, + 'song_id' => $song->id, + ]); + } + } + + public function testUpdatePlaylistName() + { + $user = factory(User::class)->create(); + + $playlist = factory(Playlist::class)->create([ + 'user_id' => $user->id, + ]); + + $this->actingAs($user) + ->put("api/playlist/{$playlist->id}", ['name' => 'Foo Bar']); + + $this->seeInDatabase('playlists', [ + 'user_id' => $user->id, + 'name' => 'Foo Bar', + ]); + + // Other users can't modify it + $response = $this->actingAs(factory(User::class)->create()) + ->call('put', "api/playlist/{$playlist->id}", ['name' => 'Foo Bar']); + + $this->assertEquals(403, $response->status()); + } + + public function testSyncPlaylist() + { + $user = factory(User::class)->create(); + + $playlist = factory(Playlist::class)->create([ + 'user_id' => $user->id, + ]); + + $songs = Song::orderBy('id')->take(4)->get(); + $playlist->songs()->attach(array_pluck($songs->toArray(), 'id')); + + $removedSong = $songs->pop(); + + $this->actingAs($user) + ->put("api/playlist/{$playlist->id}/sync", [ + 'songs' => array_pluck($songs->toArray(), 'id'), + ]); + + // We should still see the first 3 songs, but not the removed one + foreach ($songs as $song) { + $this->seeInDatabase('playlist_song', [ + 'playlist_id' => $playlist->id, + 'song_id' => $song->id, + ]); + } + + $this->notSeeInDatabase('playlist_song', [ + 'playlist_id' => $playlist->id, + 'song_id' => $removedSong->id, + ]); + } + + public function testDeletePlaylist() + { + $user = factory(User::class)->create(); + + $playlist = factory(Playlist::class)->create([ + 'user_id' => $user->id, + ]); + + $this->actingAs($user) + ->delete("api/playlist/{$playlist->id}"); + + $this->notSeeInDatabase('playlists', ['id' => $playlist->id]); + } +} diff --git a/tests/SettingTest.php b/tests/SettingTest.php new file mode 100644 index 00000000..9ee4a438 --- /dev/null +++ b/tests/SettingTest.php @@ -0,0 +1,44 @@ +seeInDatabase('settings', ['key' => 'foo', 'value' => 's:3:"bar";']); + } + + public function testSetMultipleKeyValue() + { + Setting::set([ + 'foo' => 'bar', + 'baz' => 'qux', + ]); + + $this->seeInDatabase('settings', ['key' => 'foo', 'value' => 's:3:"bar";']); + $this->seeInDatabase('settings', ['key' => 'baz', 'value' => 's:3:"qux";']); + } + + public function testExistingShouldBeUpdated() + { + Setting::set('foo', 'bar'); + Setting::set('foo', 'baz'); + + $this->assertEquals('baz', Setting::get('foo')); + } + + public function testGet() + { + Setting::set('foo', 'bar'); + Setting::set('bar', ['baz' => 'qux']); + + $this->assertEquals('bar', Setting::get('foo')); + $this->assertEquals(['baz' => 'qux'], Setting::get('bar')); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 00000000..5add13ca --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,83 @@ +mediaPath = dirname(__FILE__).'/songs'; + } + + public function setUp() + { + parent::setUp(); + $this->prepareForTests(); + } + + /** + * The base URL to use while testing the application. + * + * @var string + */ + protected $baseUrl = 'http://localhost'; + + /** + * Creates the application. + * + * @return \Illuminate\Foundation\Application + */ + public function createApplication() + { + $app = require __DIR__.'/../bootstrap/app.php'; + + $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + + $this->coverPath = $app->publicPath().'/img/covers'; + + return $app; + } + + private function prepareForTests() + { + Artisan::call('migrate'); + + if (!User::all()->count()) { + Artisan::call('db:seed'); + } + + if (!file_exists($this->coverPath)) { + mkdir($this->coverPath, 0777, true); + } + } + + /** + * Create a sample media set, with a complete artist+album+song trio. + */ + protected function createSampleMediaSet() + { + $artist = factory(Artist::class)->create(); + + // Sample 3 albums + $albums = factory(Album::class, 3)->create([ + 'artist_id' => $artist->id, + ]); + + // 7-15 songs per albums + foreach ($albums as $album) { + factory(Song::class, rand(7, 15))->create([ + 'album_id' => $album->id, + ]); + }; + } +} diff --git a/tests/UserTest.php b/tests/UserTest.php new file mode 100644 index 00000000..1786a88b --- /dev/null +++ b/tests/UserTest.php @@ -0,0 +1,66 @@ +actingAs(factory(User::class)->create()) + ->call('post', 'api/user', [ + 'name' => 'Foo', + 'email' => 'bar@baz.com', + 'password' => 'qux', + ]); + + $this->assertEquals(403, $response->status()); + + // But admins can + $this->actingAs(factory(User::class, 'admin')->create()) + ->post('api/user', [ + 'name' => 'Foo', + 'email' => 'bar@baz.com', + 'password' => 'qux', + ]); + + $this->seeInDatabase('users', ['name' => 'Foo']); + } + + public function testUpdateProfile() + { + $user = factory(User::class)->create(); + + $this->actingAs($user) + ->put('api/me', ['name' => 'Foo', 'email' => 'bar@baz.com']); + + $this->seeInDatabase('users', ['name' => 'Foo', 'email' => 'bar@baz.com']); + } + + public function testUpdateUser() + { + $user = factory(User::class)->create(); + + $this->actingAs(factory(User::class, 'admin')->create()) + ->put("api/user/{$user->id}", [ + 'name' => 'Foo', + 'email' => 'bar@baz.com', + 'password' => 'qux', + ]); + + $this->seeInDatabase('users', ['name' => 'Foo', 'email' => 'bar@baz.com']); + } + + public function testDeleteUser() + { + $user = factory(User::class)->create(); + $this->actingAs(factory(User::class, 'admin')->create()) + ->delete("api/user/{$user->id}"); + + $this->notSeeInDatabase('users', ['id' => $user->id]); + } +} diff --git a/tests/songs/blank.mp3 b/tests/songs/blank.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7d455487ec24a331bb3bc617a5b3cc37dd615375 GIT binary patch literal 80942 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 aP+64!BS8O;{E4|j;2%Jc#ryvQp#KGaUl8s9 literal 0 HcmV?d00001 diff --git a/tests/songs/fake.mp3 b/tests/songs/fake.mp3 new file mode 100644 index 00000000..d089b6f3 --- /dev/null +++ b/tests/songs/fake.mp3 @@ -0,0 +1,2 @@ +This is not a mp3 file. +For testing purpose only. diff --git a/tests/songs/full.mp3 b/tests/songs/full.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..be83559bf50fe3a9f0c174dc67f8a297130a2de6 GIT binary patch literal 72081 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∾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%0D{25#r5|nrdyCg4anqo1GD$5`$^0wIE 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%0A4BPvhi%O-aAs`SWL@ZGl>jaxpZ%RJ>L+;ep54X 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

^nW!1J}c&=iJT9YIH-1Qd<`qqM4kr} zI5lxvxZ=9{kC;Z$@l8$<6BkxvO-@go_0x~;eldSyxPS1M7fTO6xMZg-hn0{JReHJW z7z0QcU6}+c`pLCSQsiZBEwN0IAsHz$3UGAgg`s=*;xD$@b{B;++DY z&hKSjz6?oS*Bz`lmQdF!i^XTYipYp__b%7&aupWm#l6J0)Y2Mhm-kfka)n(P`qb)XHd^__St7T##KKSl%=gjqPz2#o%d607? zM<>k!?`V=p0UD9%N}WwIv5MpzjZdVj_JHMN;)t%#jVwp27!66dR(T%#?ynk`R?D4z z_$%V{cpMR)wb0(HQ6Z++CC%=Er`ja;lLD`FRHLOZ4n1Lw5K}plpVx}J!Pwtn|C(E_}oVHgBXCu-?7WEG5|#3DOo?^omI}xk>xhvgQLw)cu!AV zod`O?Ln^gqM{ej0JlWMuI_TCyW9^R-`$`9Va^L+*z5Vt2e%5i|SJpf|e$6y`08HU= z;YHmM*_pESXZ8sE=`Yti(V=$_8eY}*2KDrqbts(+MBmiGHs7?jv+sX7+q4{B*IHD* zPG7k-#AUT?Dh;*&zD!C0WamC$m+-{mdSDuSd;yr}To!F1TCZSSh$`db->rx0`0zY0G$!>=X*nb)um2V>n>V6-%&+J;T?h1?bnqLp|4-xyZ-q5&*;Ny zE3O-FO^wuSDGyBJXG~p{&ufn2YbG|Pj~68*9X3sPe2=6~KGRgP&gU)S0!wi}0ORYM%@I{|#Xe8>+$PrzcIF}4VROTr$%aA&y3CgQdD6px)CWRM z$u66m&YGXl5Xutxnwp7w+m@m*&hEd+`Pc@zS}pc`{vRWug2S+pP0gqs{SOYtc@wXf zpSs`XZ~d*i^W$-`dcJ=qyTfzGp1Y&mRpb3pL<9oVAqa@?>2*`Lj^^|+#6pnBlpEn& zS*6y)&8a(U>o$oU&Z8c+Q~Wa4NUCr1Yg@UJ+_PoUVB0Wu_g`9JXvv2$b((xWzt67w z>`ev!+mO|0XtkK^t0e3$Ufc$CP3_5~w9bHrX@DY^(?7ghS7eG+s* zuvDT|r&YEY&kM~PAW3JE3Nh@d%Ns1fKRa`oOg#2|RKuwEtM+hKjO(Gpx ze3Fp*z#sY5?bb4@>pW7rxx3Nrt^DZ}&gTww=VsIKBPMovj>p+E{-m_0YBOtnRL1AT zr7~_zs-W^VM-5##nwL`2Uq&;T0Iw?no~uT>h3*^-z^xk57Sn=(vEqQsJAhqPB`^Oc zr`u;6wP%rT`-h!#1v1wW#_;gj3ynkCVeA#IX~V zKm@bx@3(e6chpVT`>?Mmf8+xgZLHzxkepwS?Ykx^Yhr%R->eg#uGCZsQmaIl6_<~0 zN%A3lXss=t7cw{}9|5uCNZv=f0A4#rq9nCuV6ISONG;o_gH8Y!z?2eaZ)4L%ntqvUfN3t`C544q=Qgkxt4x5apRz zx{;hjz^3z`k8T~~#cMnR71|>>??nTaKKe=pi;oVk^8y}=CQ*wvXJ7(e&k7pjGl8~3P0?i`+4K4T6oJF| zBCSQH#&S^_s>aU#=|?Zvl5=Rpyi1~t>wMOpjl!&nx50;8Eb=Cu!WSbDNo$g?x4c;M z&DnX~?cTWJ)Z+0BZ za}V?O-iT#hdG5XW&WMG7{@vN`&C`F|z1@vQ^eloI-%NerbdgE>(<10TlSRa6U?Me- z!!?{8>`X$23h~*jdrv!DHGH+Yt?!NGR(7Q&YsWwCe(5|N^iwuhuC*x7L2#9EX3E9^4r=uXWSf~E-Aqc^0hP?{hWues1YS!fV@>MK=%u`>Usyw(8D7a8F44KT z$gAqCp~~Qr5Ns>Ov)Ob?jmMQInSX(9ma0n5Ui;g`^DV-B{)YX_FD%^J);21{>@{X` zo!_n5?WCn4)hH!%J9QsMO?@K4lP-T~eed2Wf6z)C5Ft)h*JSqJwXt1vO(UGxoX5Kk zHeRt5XC)K~IuB&8BScEfyS(Z2%S|ahD_rdrDJv2ZE5a*YTDCziX1$jRO5o;Ox1#%TfhI0g-$uq_5A47@Ga?n6&()gzUHSK zH%=rcyuXHUS4KV4V!)A%U_?ynI!x;Dh-os*U)U0mdR{xoCRO_}ep^7jl+vyQ8TU4<8*WV=aP-jflPY zAZU`TA*s$lsNnF0DF7FR#h&NNdw zzK}kX&UqjAmRL&`J`EPs`}LkXU}d{FE^P&32O!oZhGqbsIu7s}BNn|msrA*>WL2!d zX_Io%X_K?uS63!3*RH|Fl@j(dI!)PS^go*^J+!jc6}8jYa@ct)PsSz5#(vSO@xBPd zU?Z}lNXvNh?10EUQYI_};kk)Thc6NpGm2~x^y?6Hf&=!B(z~mF{_2)bSMDDhzV4_+ zxD!IFwLvc2z@eDxCFziz%SY}!|CuTKa6bN4XY==5 zKIL>zY!$@QfXnlk{T9bjZRqBS+I5^|esi0oRp9mI67>vH;!+=IC`p3&=g*8qrfPFZLiC z+^Hk*YD9dL4KU%2Me|0^rqid8N#i{CzO6wDq--j`D~vCkE_OZL!PnKP{jOX)U#_YF z+Th{b?UMr>rV36t-?Zr+u~Y>6zbC{#qzR^GnQH10KrIjgfC80|{sOV(Dnq|N@V|SX zfvumBSDxsQO^uyckUhetG{4B5GWkk$%x6j zCBzif#^P=jV{3{og$*ipCR$zoBNH6)_i@o2KRO?oR%gyY4zXXw%?v}g6LI8<%cJQ4hAv*X#QAk|KP})aRq7+n6Ma>ccUg}Bj$ik?-ebcn zbnIjCLgB}}B50j^ zuTli(&oHO^$_NDSd)216@$m()Eik#N^Z$rQQCN-lEql?%oxYt#nVI+OC=FOPlgRx& z$2PZkT-KrfGdEgmMMRkZ*uc%lzU>A~r^^JU1|v1(eQspp8^#6_r>`4Z)dxjr2BJu18kohY4S zG^EiI46)+)sMb=UyUibOpMTTadt=GIPE8`_=p=$V&Y^zV<3NyN#)UN4O{Hf4PoiG#FIGX`#3P7P zn#a)((l1WO>D|sPbPr(`9pyy;99St=O-U*4A77(@G?{9mgQ$?$Vb;F8U%g>he-{06 z*Q|teg0vs)#QrBoK5P$@YLZLio`%K8k-^_`_TnHe(4QaUvjQoK1^#$X45$7&C$NeSz=lZS8}Fsc5zBDE4liAS}JF* z4w7$DCdaS`ByL@tPaAE{ucL~)bGp!>BZ=u+qVa`KXW$rVX2c#}w#{?!_Vqk`3-Q3O ze(XA(pMXdsIA&`an$^5S*}-TZOXH!G>==hL7Nh3z`}7wn#J-)**%hz2jj=GPq-6!h z=fY1?(8juu1wQHJq2ID9IaH--@>4FWr6ZI2Y{3THz(Rqg@ATv6XzsXv0}~6 zE{c11=O+9)6_9AJI3*`@?N;x0NMa(c$OuVk8kSWYgR^IBoLeT!sYv$Z{73zb+-)6d zpE#b_k_B1=z!XnsXHx(Gz_Jej00000XBz+jCjbBdp30b*BA=O?o}ZPOs30OEAtNIm zA|xlQnw*}TpqZefo0^=PoSc~+>E&Qtc`Kn+Ep%;nYC(;m(u=TrMzL}U=3d(D)rW)K z=u4cy0vnf=;{OkhlkKgRqu;$vNe(RSCp%R)4dypBp&c`dFy++U5bo}ipQt2?&BGwO z2*3QnJEkj?z1+DRi)%Jr1A|14H-}hYRtI8Ui`6UJhC@=AO}?)KH;lRMX{;D>7c

-6%O{ zQhr{HniBU30MU>c2uvY9U;c5>nk?mEJ6XpDVU>32!B{!6PesbKP&{(>2D&4@v{cVJ zz<}qM2c^IJT0f&*htx2+O_C(Q>H=f@bF}LT9ISw?wm`R* z2+w$tf+42l@}<7KDpVhoHfR7IDbDlLy{g6bo4chbnX{R(%dqzIik91V`UO{GGmw8R)})7S@qVWrXAc^HH-kL=ynw#O%rQ= z&oeL`xu|@=qKuqcFr#s<_r(hF@AUkxbL+UK-kRzp-EybHd=kBrgqo-jZOjaZ; zCG?u*{Z62OeoE@~6AEqm&;mX=4!E`(T|4~FT{8T#GrzOuc!l$CON@{9AC&PJSS)3{R)Rdg<)YORj z62Ju5gm|w0KOHM8^YT2)kvoT)j3w74wkp+0%3+9LVgyMRb4nK>EV+}s;9!vn32VHM z=SRxat-UEr6(Cizf}0d^Ip9-8=3|NBSOPoBGCLgglHlI#A7K~c;WRzL(`;lNHTf3eLg#7(|O-WXSzO5!WHAF#wbAiZvJ1K@I;{Uvsj%w-7p#p1H8845@rd zLAv^jY*|r^21T`QPPDkS$84K`&O3<&SuESslF!zN%#1}X2EYWi=W5@G#V5B@me=ua zOfNO89yHs@dZO>Z(W)-DY9J)Am7`-mU1vFMv41CYlBW9Q3dt56*RgR|;ccK+9qm{F z;a9Ca{A^e@cTTy8KZL>Dn)TytPyjUD9fcc(rwdzIeW`%o%k^&D4v6R!inbE#E%#-I zXl6l#dkdrmI)wT-nfdff2m(ywHKH4J`wupK*P`bN zOs}S~=hSgH(<(fAv6(EVfq<*QW;wEJv8#fKD_wq&EP4D{E zV}#qh8oNfO){#cCDrmKm*fu9?F~nk`DN!5oAHaM#)G%sY{6Ap?fHDa>`^HmtERRTIU_d33a$n)qAY*G%f4G=eL%BR^@4U#dT=7tq3( zP1LPx&131gHH3l`IsN{AU$n(3zMIA_X4J_nNJ`X{+^R`dlh>paO;Vwz#7i;2R#o|@ zpG?4qHe8EpRq05(#`ygzH!tI`-`V#%KfT?~SHtu^8X+SMwegz%&oLW}?t(3m<1=01 zW#*tC5rUJ}`jfbFtFGSk>kX-22S!rG%0F-{lh6;}?cS2sT{n&9%{Gvy{r=iUM*f=8 zv@Cv+b5u$sK$PVUL}=wLRv$jB7NsPQNm&q7sG0PxVX9?Tiv>Y7wGuD?fK5u3mrp+# zTd#$44OC$?f)!?-IVo9cMo;g&(~otpkP53bnWZs5?)Tvlfo|w{8=C08rQN1WiKzXc zdB3e!`5>%=X?y@_ven0;bJ8<<#B+Vt8}m|CcPGaz_EvBD#(V3`)a{FNE$GpW#sR^~ zts=aNU%6q(sReOSOQg6Ky#W4uroAQC<=J7Xre@NMhHD3eSi+&F@;H8 zmH&tdtj*5loP#j-$czH(Z+f$Ik3a>rOCPU)=<+0eWybhF`%H5aB9Y45Aat6oO5`cvJ!F#gnSLTb-Bj!g+S+EOs)FHabCK1+gjX^$x0nYeFR?+U&Tt} zY~6TL%gAPzQ5bThiN zH2Vi`l-mJm*w^6c%|Iytq(?*feEImiHUz!ckoJWTAD3n72n2ib8HAFQt|B;woJq0{ zCF6CSgq#EI`i6MhBoRV&gX+luetQ#qcTm;gD5eW1Fo_nULCyQoWI#VtqwPCB6fMb$27M-H1TvOs> z06&bWvj4M@OeTL~5{y=Cxkshq*O|%~Y~OqA-bZbEkGkq{fQU_pM-1QgjZNw1 zHt+CCXJf64DOX(<{)yp<^cmDL9jOEcde{x~mvmD#@OsgGV1W6qkC^-LL&tDxOmT-^6 z1AwanyAH?3eYeDIqYdWCZ5X#&F_t$se>U6gGd;@9U!~zNtN&G8VSc!CE9J~YcFC}k zICZ!t@6@mr+(-zOR~Bw^$zbVwwO2}w0A9R~V=Xo$B6_G9kJq}7HS39rRV_6lPInbR z@$=J?#xzxU+g)yh$F^mOjDbuTcv@sOj*>;YAc1Hw{ARYQR6|vQyDP5 z?tR@RI$co{=?dN7>uc`oYZ;l1^Tm6&?c;5O_L?7QY-f_{?cgJrY^*9ujq&^%?j)R2 zODukQ<6@_`xmQ1L=8a6K_Eorfb{o1=F+aC%T)_$ep3L@R88S-qVDtgX)D(l;I;NOP zTg%x~5_ z(6EY|WEWV=aTmR-$>oy@EIe1}WPMHaVN;>50-j68$rZBFhz|;7m@Q)?V=BonPzz2| zs_M_473^Sa`6u0RJadSR!G+F`{Y&?m&stq@@zF97V-Hxhms3yIel)itYH32)P$=s%6>?x@`f3AzS?kg*d$0FzRZUxC58Ouob_S>a>brY$_ zCr?sF(@LwMO`%5m2%jT<0aFe)W(weIj+Nk^03M5m-p5n`4bU3qgiGpz6_mkgSG>yq zAsAzV9q0ak(jBgULl;IPyC0m^-;?Qqjduk(SqneP#P}ekt1AKUf zV~0Nu0H0XOMByMb$D-X`658>I^=XNf}8^p_*w@ig1)ix`cQ%kk6us!K1;^YgtkBdjj?4QOr@uyr;!X!n^t`F ze?}ebz5n#j@B8!X)17zd(%t_U^}+j(g(J#+V|rJJ6nGcjc7Di94Y}P1nAgE z4xnT>Yz|6oj{`a%#CN+{FMoN>ouD=qn74L>^SmhL$4=5OblRRp%j%~T^%5bnOpQY& zP0zzf%#2M*OJ^%JkfY^_j)N2zv`?YN8Cx3)URy@4bg@EGK@!B0d0D~=R4tGiywm|U zrMUT@Et7+c{-c((d6%+TuHA1vGx&0#)3?W67!z;2{i@{8+Ri^Rn@;A{$4{sstu>6_ zR!c%Bi{e?+>+bu!X&rblNEBIKRkLv<7jAc_&po}&JTu(R)BV-X6ogw1#cQrvg`cgA z5~z`1-i7QfEh(VW%b+tYyOYQ;Y`6oCNZg1v{z~S2&(H%EB!XEor)$O@AR@IGr=7#q z|1a1ieRucv(vKh9499LaiFfnZob2{&E{#`bi|+YA*CJ-^^fA;VcA$H@gheC{k?ud-G<8hLF^oMK&Otvk7D8$z!T| zsgH&_(*~{fG15whEF(vsmNs(e_w6fy2Tx~bQvd)!AP@im0001I8vp<(0000@#lu-1 zm6MN+o2?}xCa;&8l$V{HoQ|QNn2nd1kd&UEl$TyRCR0n^okn2|Uc-E?*~~=7DjA%% zvikq2!}04syl;88ed_x9_D1vP#p=?Qk0f!)x5n!)=XW+&7xqzPrz~V9r9ta9G=9!V zT{!u_9a|ySIM!eSC5iW9e7hd!bO$%2h82c+d$zPuS0meq2^|;N4{n?)k2LyiZq_=} zP8j8_70_OT<7zgTD7vBfg3Ab?)kh!xDppd@Fp~{{)i57Z^6AVKX5h4NUaHgZv!F2+ z`L>QW|MR$%2n?(n=NER_KizsA{;C)zI>VO|V zqS`o^WL)&MMWCPeKm@)jMy4gNWPi#Q8#3q9GjGPE=G?!qSi$XLfL)lJolXxy4_hlO zX|L1{Bk<$7?H4~7JKX$IBr%e^4(}O?reh%}Fas#3gtp9;0c7_ZMDNO?oIZXwmcQBK z;dwl>#bAp#x!0EmMjgbeFC`xw9o>GgBytwAD@z3_v{yvC#t?*u6jEf7#RyuH#9r7J z0NyIbF(&WH_>i!J)-muYS$EnC0H>X)D*xrDd2^;0r31#`eibKTHcz7qlkc};>2wv* zcj0l+%8W+UfDlf(M7|O*D@sMBHjNa^>)%SQQGa&M$>pBSL~+^eeE^116r`+FQl9xx zNm%)jb%o+EqTGH7O`jaRVi~kS-w4(p$;RNlh|Yn;AQ4rR;2t2>vkKLGpXxX`fA zAV;*11En-{`OfDvf028gvWD4f>D91S6p*zj39hv}X&oWPQbT9%sj`2JRoeeJ@0749 zhKRt)f?o-@fbQJVwx-FY^*`8Yga0y#OuY2S@Cv{)NpylK0QMOsWIR&~APEJ8f>qou zvl!Vg25|0O8_jG|}9>HdN`e2R7 zJ^(yfS!Goh4X(H`VbklWR&%FyzS3zW?<95h{|m>){q&hW*H#{6UuEjEZwWv}EBM0J zm0hNx{%AF~>(pd^usf+8%L%uc2vp+|Qgg`RdcRY>n(a9m2)wvnfMVd*17e1Pur@45BshE^*GF2 z|9_;>V;R{AV`yhP)pz>yk$b;=_HVmgd%PNL|MGdZs2{n0FwRC|5nT$TsN*ILs%SOi z->;@OHr#$3-_~MB17S=U9k38nX9t&O2{1aCQI5rF=t%E1Rm8->B9Q+(ucHhY;b>g|DJW@;*+7oA#n)hA|i(ZHHJZiP_kBP zL#89;KX3mwdX?spV=9MeGExs$2}8NM>`2X^dy2oec2dK0B8<@cqZzyZTz0|=gMHC= z>9zy8Q?wi6O$gArq3{4k5b#O(0Nx5#bV}Bi383M1tg@b{gI-Z(yyZq84=B0`9HO%N ze@r3HwtfBMQmNde^85vx!QNDPpYet2>C*O7yXKo;JBSzsYn6SWy7Op|0aohN3{6b) z-Lo7Wda>`KB0j@DkoBf~&%T>oH(HmWy|f~9sHvSl*AdmL#>Z^xx>Z;gK0YC)t-4x_ zq;sWi=gy*mXzK%Tc%}9Tb2M`D~7QL7EqyPyd?`=1C0kN)Qmn1F8c;{WmI|mAIXmBzFX%=XGkQP|fHnIPLF=-or$h;Z;y9BM@XYz#(xA*U zYO_TRhJX}m`!=+z_!)(>hGY7gFNWs4#5fzV`#I-JtkG*K!WCB|!H7$#!eZxhDo=vo z^^&;!4+B0MCgYTRE&?q>4e%69f)tN~4`x(EqmR=-=?C_j*Z+^yBjn(F*FmSl)VI6o za=rOFP(O%Ous=RB?~+c{Ml_|18Z^*jS~uqE%IFBZFHV`|BpiD_JjK?EHZa?;AcSe_3Y=<9cV$C45YTgye>Vi>m&#IXlT?Fg5SENei07n!0loejQaohX{jr%%#Uj{^4<+9jkmD&(*xLT=LqsFvb z%{U>2-T5ZsaGU*-QdG*zRht14@Y8`~t`A-6(Z10{5Noh2Hjcznt)QqG(JGGw;V)i$ zMlR)|j7=E?LoS*LzXo@+RK^l0wh3H7#Y&~}{}1T+A;8o1tY=33*~L7Wcq{qf!s65S zJyo+EJ^jM=Jnusxl!+0c0hr9EH>+Y~%^rMz?f3Kzj3}{D>^{G+;>rf?-)pY?L?GH5 zn#FE9Q_U$;4o2e*pO-_W%8!^Su?8i?5w|$T@fr~<^h(97cGYF9=+iV7ZVJnYVVvhV z0RB4WSWW8AAh?k7s^(BC>~y7}C#dxYXE^xUf}8f5{lA7(`A>sq6NCQ826>_WgZKnx$uH`qd6J zJuMMj4BD<6O%ZB`*cVk#<;W{t1VTQkZAa?Vt)nNvOP=Q3J8kVHOW?JZ0Q5i$znsyx zG1^;*#_|LwKrYKK@az-lhXLIPQzo!kE60?Uv~d^x$M*etc0T}qDkgvq(}4guMO(0h zS)io_8r*Z*@x~oQkk1v2RaLP|hNqwr&ktw5c4MXq>i*4LP=>>1;DCvl4 z#P*MRKuFW^$(WW-$BqYUIi&Ml?}z`p^)Y^wpm_6(*AoeC0d}(#x;^ud(kuKjR=7su z$dz*)E`$pD@j=3oh{m=z10W6>mPBTjl3 zSOifc@KFwLUg%uXrdnSfKd7VSptz&K=;-RI)BiP(s|y%edbXrvm&JFak4e7TH$@^4 zt#TqT1@m^KeJnWgBdp%BYJb9gzGi(6&O)&ky2=5Y_VQGgJrMFZNF=&23pp{C$c z#JOeNtjhlntc#spg_$JQ)T@*H^LM>+_|)cX_>aSQ@V#?x&jEUm=?Da9wKZ%h=4(%k zh5i6JEr|W1^Y=S#?V(RewBm57u?YE)7Wb}jYI9_;+eo;k!>4^KH{|tTI83@=U~tFIe>H*9g8kCQyx5G8b(wVl(9C+A^cDYEL6oEaJN$H@iT)qUBuu ze?a+LVz)!dXP=H>K0S5(@;{7w{CLGT{e<3eqnJmLrwatNb8YF~@x1fARJwPZ6oqBg zXuq<~2tX%1>7BBMoK=5aEmoNKj`!*AXO$6IEmiw{8&_HRNQdlh_SODJog(3}6%X~;KXuLJ+n5xv$#$vVwYKl%nsWjJF_MhfE@5Xa~>-+&m z(X(4GB_F?VHr6j5cZvi4^!JDqN_F$7 zigqjl{M`E!7}Sn4xc7ZuZdahvg~_ z?I;BXY?I0=BzCTL1R4XLDrPZdTLB7Eg;}v{J{OTlnqI2pW*5F#j9333fol~G&h~EZ zAC3p!+hSqiSSMsI^nt2>?DF+S2KG<1>ZOIn{&RJ!zsG1?>#r zV0<+EvWE}#!x?LZ^?P>pQz`A-sjBwZQe|5StwIn`>e*~@qcmgWs}KsV#zSRNCA?gR z5Ip?1iuVBi`qk1es(`ja*1RefG=*|dEEc>j2f%)%|4&GDv}l;m9Ij4+dk)lnHM(-*?@>CXKke-BJQUW5*0Dz^>rePfr!(VF3O zQn(oO=lGmMIfp~JYz^^i;N4;fxe%o~1wq!tn*L#VT3g!PL2zL#%Sw-$k6hLDh2zT7 z7zIyfXHx(GK#33l00000XBz+jDF6Tf8g{f>Bc&f9A0#NGl7*0%lAw~9jh2;>kDZm3 zmynRHA|W3oC##m8c1i}Oc>$cF-{=Ahh??RlS*7#7c@kUE2RIvQ3O;AseR&nm=-Ys! zn*C3aYR&mylvLt<>-q1!ua@}FO+|mrvtkr$HyCx5ZpP`2f#y)7Q3Y*fTXGAS-sFa| zXVW4POUsf;E8Qr@@tfxMuEoaCg+4ZZ2x%8n6l1&FSCU^?*0^8Oa+P!iLAz^>S}yZ2=btFOaw-N9npwNn4$ghuHq4FY<9P<$>N(-C?tn7pY!1 zjxvtSP8^%1i6(AhIb{)bF-dmRlQ%mo6%k(k`FC6U9i|8XqSLTF>3MHoL~yDs*)VFb z4&Rq!xZiTpO04Wz;N#dIq^lvU{zhXC(8B3FNs%8BV>$W zq&{tOKmOcVj0rig&n5{yEn1gS+%=vG_N_oA5&gM%r1L$i=C0Jp#)kjMYm<>^Ho6E*#t(>5U*6 zq1-iUeTFPncGAB=ch@PGUB~Qn6#5@NyD?IzRa$Nugh6+AZo|SQ6^t8@McYbt;wS)~ zTZX1*%jA85TAKEnX=>&5It)lq1M0L1<0}4-Q&q;}qXDN)RA%294*u}@Qu24 z&8G7B>d>TD@Po(Gr%DYN4$V$+W?=SGyF%yJ-#{OD4>e ztrlf9M8}8SMrO-EP8n%jsLI%F=)E)+bxnQYAPcCC(P@e5U5Q2il)a>aVL`odMT))|M(Q_cf3;omL{| z)~&@e=gob_wr786ke)KJxN>gi^)AwiOHv6Uipqc*sni8L0Nz?AM9(Ig{eb|r$JQ}o zt=algUWjU`9s2lrczKeV^-3xAe@xCPUq0*f;N-YR6X;^It{(qB+`eck7K`l;XKfqR z8R8j2b81eF=c#bRe|7y^2M-Io0(|~7d$a@+B<~xN8xu)lZi?H7dsA{+#%)_>Yc7 zj@uj#CE9sA4l&Q?ktx7rDHA7y5IV(^d=kb3Uh}Wdd-MMvF!fZH+C33^Y&d@7snsgA)OW8RjYZG4+}G)kMtgLa>#T{;L{1Y3x@>>P z-Bl3}nzsF;bL@L&rx|0gFf{ld$LmnzIy_cN^PX&qtW0#MSewIluZD`z2#LYXy2;2O z7ytgovf+l9Zqy`i>IzG&@vcUBNTa)bHSrz3-0rg(xhcYL>?;6AHO1mK9!pX$yo_|o z!BDC(IPLZ7#}o;vCZBl7HLLD%`R<~99HzGM!@igH0sUbdRh$z|TajyG7CuR7RQwfq zyyi3Nb;llm3%7TTSQ&!*Hm4jN1u^u#TeP%^rZX8od?-V0 zc;g-F7^~=yktYBF{+niVTHB_?53GT*VqA;Uy1A82C;q}iRz9vy|6sn`>tBvKd;NK)hiAY28Lz*L&MWV$F1w;;AW*~zn}m^0J?p$BZD-@mDz*1E zE!$K5yZ?b;>Qrg=r%SQ@-5{KYh`)7^1)GnE8#au>|F%Q zF!Vvu_zYf42G!+a2H*k2j!A7YHV4`Za6xB3W3~F92!Ua+h_Tn7bE)4~)#mK~;J)n- z%kSRFM!ex$%K`mdk?abSG~udX<0n&&jpH7v6UiA#Dlbdw>ZTOiWzS^48#bF6{(M`0 z>6AZb$IYBz#9w%wM~1Umu=|d~qm0NyTWyFxtm4*b+OKg(%3Ju%QNNBD!H*?HR%Z#G zTZTR6q9;~7)Z+R|=5@;0gY>YyoF4EBi=y%QpNJ+h>*?+9Rl7debl|H#?YA!OF#hMG z?SsGdev>@eJ>DTA$4!U^oO(=K&n;h9nrB))>c|Gqh7HD>5WRi*wPm>q$Zl=uWgA868J9HB zN+y|3-U16QQ3Bk+Sn=7$8OC`{|7pN0^On!O@Wbub!QtqCK7P`vvR_6d{g(ylL&jXu z=xzaO&gjrMjyS&cQtsFIzrSC&qc5A-!_AV77t)%%4J)%ci^Kd z7$?v1VShe*8Ywv_re$VuX7jECDwuW3EbO+qLzC^4ZT|4|s~yE`G&HJ86Uk8!;D!!% z2R7!Kn~t^JXwu(38%i^~N^1XawCUged~f#fxCBW)zw*(@?nb=k*C;n|kART>#aG;h zO+)$aav7&CS6z`w8j)1;26wRT8h8C*1&yEpUOPs$WHXDlkY0*$x-E;Mi%l5e!YYb7 z;Bq4TVNq)R|0&Jd592Bb*M|@Gz(=oL6kji%FZ;4z#@gA>+soB5l9MJGE86e?06_y# zNFYIZro-V!L+lWWlkaMIJs>+3?Dvw+Ltve+5`k6l%FOjZc6BBk9cs`LwsLu7f1UKfIreqM?BZX)>%gu`m4A^f^E`wpgFo z@6;j9CrQpIn?5IIXB|soLXt?TR!$sGuJcAFtuW$ipvpN0DzQ!Vgh;otWG=+%qU9MgrbChAkR^mJC?I9Xl3_v;g8oyQFkEbl@Xp+#8PN)pArS{}Uw& z926X!OcjqG_t%H-@A!^-te1by-Q~r=(Z$FAt9jk9kBCOKm0=hU)k1QcFCTS;j>(aP z`Wj>xvLlqUJvQ{xp~!x?cWN_u8PY*CO0^2Ceuranhd||Qc@f}B`-Zg|7Q5*3cjkj@ zT^)I5#aIZSUcMR@)!6|kzzb*v(=Ph;ND$(~6ol{+0d}q{^*=?bBQD(C6?3&3$WtTo zM|kb#`t64yVxp;;+Zq*3(jZDfqnNV@%2Qp8Of+u6FJi&Qt^f!nw%c zGLh+bFe1cZ7D<_z__gc0WGPvKa->Wf+ZT+s$ed_9+Bd#3vH@e1ARz}VME3?|0DcN~ zRrG5Z;0gf0Q?RVGU#c-_u7DPNPDgX~@hJccgG=eA@$b#|W9t)Vv6NBF=J8^GeD=}V z`%_QbriN`$(a7?sQkG~N%kHy%JrMCsNx>SO?w<0+n0;68{+#FOl1Wq%_P2J7=k-VK zcDjUx(F-HXQyd-L%XMr}o0?imjP%t=jB1cRs6oXKh^;B)sWuuGi+sii6XFHFPOy&f z8ms|f4G4Zd*}XmO*4gvUYYG&3lmNBT%l|4?)&y5 zRnvNV{xD0N<(8yTC0V=Oyrd>dFM|YhmL;_WqZeU@Xbkedc>434HDG@*6O7t z@M#GbasXVTDfVZt-2vL7eJOA5K5pUS)`-}-7-COJ(UxOm)24l`XbdWNK#1T<(ZI@| zF%}F{tZJJoJiLd06u@EU&iJEoE$7=U)$Q#XC#k%xr?t%h6jQZ?o~y{MebGLQRswzr zX+GY53^~8oc=fGb8@RWG5BySf4y?99Q1kyk&yni_)3Z2x*_&PG18oa2Npgk&G}#%0 zoW2taHqTt{Nbv8xeUs%SWs-m^nK${bX?u8sPVc9409@xz#AfRlb}odt5=f}^<)*QU zq>r1*3B5iy&b!Bxubk)lU8nAi+REl-58fcPfS^_q+eWe$Xag-lt;7#vot||v9E{v| z%Z43?uGE+Rz!WFb&$D*u)HK_FljeCgHjoeAc9GFj=bKM&Nv==FX~}FR*$qjL?5uR% z-GRH|0)Zz)>-c24jojJhpU7!|aroppY|X?U$HN;3pVu(HhP2GYdh3P_dh56M);THH z5YI5HdJ-0iiutrRtXl4&mCB0(xn4$OEk-pEaQReh(gtmwtA?eum);nZglnz1yQZ;~ zTT1EOcCi7J*!@u{bGc42OwijdTanOoW+ zLB_IEW^>XOi#u|+aS$Bp=Y1=-Gvoes8{I$yzyQE#;yPz7*fgZ^=Rot^h4l+s#U6&3 z#J=Hr4ofo^taRf->RZ=(d9}fy1mdya;zK(U0p6PfD++f9Gm!0s&OXJ6Cb^vx@EIh8s{*hmJ8Q zv3>Y49egEF`4(bzz7;bgVw(2_$l>M_SNl9+6n#ifXJ=CY06^;y000000B0Kj04e|g z04#3Qi6f?wqMW3fm!zVZwjm%OBO)UrC?zMdrJ|mprL`v`w4$M_syxwJ(KT+F=^UNJAHN5JHV0Yeb**Nt+X&n0^+Xt^NjpE$t zE}6Q%nazPq5O}(I3)}_}PrzysvTk(_$uNiugJYd-8x9}8W`qGk`7GMNF-d8A%!-$@ zy8k&k5VLXKT_rs>@VK3Q4qeBl)%n)NO;^aP^P>^g>l*5s)%lCQ?@<}Rid4?2$wen# zD~53lG$2FGcsqurmYX)w5TVBCLeaSFTvuxLG$x8}DSUbL{&Zl?^3eXg60vjgQ?==P zqZ;;h^x~%^EF6#C60tUa0w)&lWc7R`aRgSwA9V&2;gxwrVk2!Nq5=S<7@w~m$qi!# zBMjOcSMsnr+;HhHeWAhjww)Oy?J*WB?P{TTlGPqi*yW+$`2$t~z6!SV65AJr(Wy`~ zu6_wwLoASbs44mw{)TzIak(o2tLh)0LdC=QdX*7gbeGgyX=)Tsr|k0F2D-+~ zrA0)w)Qq!W9ZfNcMWAG5*P6lUt^%kzpZ!y6ozzQ7r<;NbLq&#P-FMYt#OT&55!0h( z9V!}K_i#x6tCBFbk3U%|d zVRL9r?MB1iQ>_z+aQ-Us}Y=Z&$r8(TL%y^?w8ojbiS zi#t1~>}k=epC(R%uTL>=ps)9K|kKaV#=v3 z{%dBXE3Ht+<*K5k*E#t;A_cm8<_FQd`qYcZZ8RpGA!JKR@e>D_(8B z8uwdwj$CYx%hf8eyCZYFJOSDL7_*=uT6IuN6=M5$#oB%iS64Vx4k4V66cSdLo*v-_ zcf7Q|J|36)Rp`&>S*y32P}axcm8!8~t{+BrWU;b=1jdExa{jKV}=v=s<>m+7YKk>FWO{9XCAnxGA^XN_Mvyd3Q0m_{QhSh}ibv zW$`ZgZ&mAQj|$DY6ewh9N3nXCP@7o=P3w+Cd9f4hQtdr%E3C?hy*wHwkN3MY?>Dyc zD~eZ5sjNqB9yL^p8rGV%9IaJDNSjiB%#8>AV&)^Pb(_!CZ=gL$swJo<84N=!t~%(0 zRS*E)n>KAMu6yu|C<@YW3VluZ?1j0CkuFAI-DYLoq+k{}S4&K9evEMW_e2YVqqn`Q!7>~EnU$J8=ZBVQPwlcAxW||f zWD^kq zA7u2%?G#r$|Butv+$ZfJCsDn;Udw#;-*?b%+I>oU#oKvr?>32c6+}o@qwPkjiaS`4 z$r=F2p3&&dSmkJ6cbPeMjPo9aJas?@zZ5qo zmi5RoJ<@#bQIY>1#z*macq%E0Xc7WdpJma`u?qA6RN>U3n{L6!Xg_&(jY#}UY4J(< zLbu9b*=~pS&DXHK07T=II!`!l8tvbFWc1`;)flgb#?P>VSnTKDOqrrp06gbE9`b}I zysZQNQ3Is%XXy4S0lLp0BaF3@>C#RgTQuE?PhEXS)Oh%Z-GB?h|8!EZtCUOYlwGT# zc1#WSWm8Q69ARG*IvN)!+6C~R-oWK#$G%W9Bi5;E(7G|d*XI5)n*c1`8Lx@D6Q}X; zFN6kuKicoP5LVQQ*8XUPkq!0TP~)5W0X*di?{5ju@^&76x`7EF$^-S9TGbkOVI-M` zk(=*k^GpFO-^7bZHBF%%&6W2Xvmggt;{DfKd(0*w>woTM07M! z7@}Hs6UMwUG&M)r(`C)4Z+pZQr%QB?{j~EHP@c2Y&b4tyfPII=_RUqf_q%-PaVjOX zV)~dbRa&1vTIb0Z#@DEX(F{ttC`NOp;5PH43L*v4!RW{h+BmW_Kc0)mzQxuuv!pszeaS>EYtziH=-t`3UmkWw?z8{tdfv>> z-8^!=YNKja)09nx8ic1-9UK6}gUd*jIKcx*Gr>AG93u0TzuT~T#7Fpi`uk_X0#Kfw z?G&-BoZsy5bHBwX$WCfpsdZNo^Gl5XkfO1Wabro=t?SI-VTqcAUn!TG7$CGID=J=l z#=gf^BTI^U*iD>0V_9NbGpeA-A=DmyNJ3c@G8m6#B%yYh$1`L%b3{~V|~J+#;`I{%UuC0 z-pnQzadvmp@Q-~t zd-d$z{rZRZefejT&b~PDMVq8U1O&`OqXa4du|G6<0B1XquXB(?IWG0Hym}Bj$0d*n zTO1=VRcH+#yqlL74WY)Zb&e?wq4TR!iwXWmsmy&n$LrW*MNMIi$%@5v+>mQoS z`a0XMKiri(@J+htmJQooxP9W6dy|&sFw;taWoM*W=i~?fX(;u!#v)P@#>HKKW6CC~ z!Q=!UYo1;5O9Ln{=zQEeX~#^N9*r6q^~SVP$6WDgEZycW`o;7?VckL%weo3{Ynj?F zh1EwTXAwhiNyq^{3l^zmsHRl`3$^0wSLm8Sn-)b;tcqMSdf8|c)@>gHl*;-4BRO?n zI#bAdCweri>Tq_QK*}jY2VLc5=liJm$kE(}=aqe85E(;Nhsh1|2vRY&&+*CW zW@MwWaX)exx}CXk%z*{B!Y5p}H4bM_rcU=z>^`@nJ6;c0wfoBMroOL~yYbb4MRYmG z7RD0J>aoPKgyG_sUZo0kEoUS<=$Dg zr>ZY54u4*49_^+n=5^&ckxJ$NA3>QDLP>h&-%M#z3ivO*($tTha!)h5y0K|GxvyAI zb}Nb+h?5XuW-jwYNXmcqa4^wMAZGpjK2auPH#>?>OAtb4w}npmRDyJlWgG9`(kchX zIFH??4acZ5naOQN>m1M1DR+;OFdT8sq_`a;G^4opUdcOoh9N1Hwa6uH3?$uI9xvI> zGCKz#1AYgvVgHE(GC8?=xYgYt@>fr1Hr%lGC#JpuT;mDqRpE)V)hbbDNc>@KW%m$o z=6c@_c0PWY>u?Xp@wo{)yk?hU*;Y1+fVc*9cx$`W)uU0;(Pn?dyGc%@7p4#sB z#_2zJ`^bc{pGgSGHAXCdlzI(!9~Ny=T~t%n z@R+?Usb7dd&?^CQ*^sc?&?{TOwCF1Tj7|`Ob~QEF;;2O@lUiccoeTYN`_mJ~#8NS_ zxk{UH=-3QN=HTelX0#7=|s{=9l!lBr$l7s9VFejiBsKq0) z4y)cI-3SWO4-~Cx0A3r$voEgi$82;xm;EaVxMortrjxS+#Nm$8Qs&%55pEqZIt?9S zCLreJ@rkIzJQJrJ9LpaZJCR{Cc6A=lGj>H>{84OtBcegq8pBlYE|d<3+rb97LL|^8 zIEb!vVh1ykwoXI+$r_D99ss7jVS0s53xL9vN`Bqn5vf|zB&}A0`5Fh%_5e7p){^Y! z1b*lv*4oe)$E1OI459A^h@z{1#DE3LMdAogXJ=CY06h!JhfKSq#{FeB>`2w&Ig;z=gCe#h;Bu;xUX$|-FRS;|jP6E0>@hE_A z7ez7z{%~S2RKIIVRn<@Al#mXBi}=b?1BHs{9sxcJ7OS%WkcSktrCVCF61-Zm7A!|o zFZ(1_`L{YHl`O7~O`LX9sMee@p~sYn%uXGk%k#`FOvi8@o8{vdr+9ws0juSW)hLP} zPn#wsLSVEZj%iADOkwZSBQKG1%WGb4YSn-4y3i_dB!IzHsSVoTKS8AKCIAVVGvH){ z9B}RtfbRi(fK?E=@ff-R1t-KmlL%hZmak7C)&K(%V<7=P3&v9%S8}qWotJfM`qx3>IdD**^^$i?Yi!W3m$!!&Fl3sso-&7Gk@7Smk3V+tQ5D zC_io_Rl*vYZk%7S~1OWc}g>%eknsC|r zbqmOwom;`+aP5UIE=?zaWX<4Z2CQ>lb1^*lG%!UtIhx9;?7Yg$M^6pMFSYz^+bGui z!Px;UOia>@G#ichpr(%YtrUw^tb)1LKb{;RN#p2FXQeuMKhQn?{V1&hh0 z9|k2EoKr$>hy~--<*Fv7Nhy!&g$#{OyA0=CNKiQbAay324%BpJw2^c+i=lj*tJCkr z?ah90*yw&Xw=-C>C=f-MWYni5++S>P90%t2)H-La_{9N4C5=lI+uL8-{3)vAY9!2M z+TH#|0165Kp7$jH1r6X(f|fV>Pzg)c3e ziP*fXCkSP%X#%9sL=W`v*U6p}M%l?Z#E_+Yftvq53DX-JJ2?{hj;vU}r(}00e*cPsxqg=ZiQYS$ zqO3XA%bg|H&ZHa4vUmrX2B$;M#g9)oHInS$6h~v33-g#YGN;#>ubq#H3qKrpq4TF& zG0%&MEh3ak4gwgwS`#oi_%h;iTibDi?z>$!Y5(5Y90DN9=+Op%L_q^yoY8Qn#CziB>gA_WT+WH9 z)7uwU0anARsUz!+YUo_a2d7=@T>U>%Dc3DT6>I>8@*tQH0|r_*ugE(|9g zuC#}+*?y0yG{Re|?sTZcl=H5nE#Z%HZ(OkqFjy=ZTi9^0!EUHyIua}a2B;#4z8dCB zN*)Q!1-z|c%ai1qenZBz1+x5(~bDX`tdfe zUF_rhKXLoN)8yaPQ++{^XBlybBB1y=MMwS2it!>Ry8yn6cQpNW8o0eYhUlMP3 zI-+)Jy&BSjC-`;?%zAPT;@}_Wt4<#~uD06^YJYu2D1#9=;%s#n1*EhVB^r6Z9Tq6I zKz|q{6JAS3ttE>Fo;|0UVl5fen$aED$dqt8lv1@Ar;nK0@x!Z6N;fl)f~#B{Ue?`= zPVLv-xcl;o-g@Ato|<0C8yq%PqULtbq)DU-r=1_4bol=IKI?qq`S;uS?>lnxb@Enr z>)pxHyPY|b14cw~lLdY&2BlS7t*MkwS*|J8j)~Z+skL>aDu>-QB~H6|t@ZzyG$YyJ zmN;dyFz%)~gU#H%xL{#FTt)KqKu)Ztf8vVu@?O4gtFxrd`Kg$lAl97~Ey+d6sp(0) zCl7{JYCPN6kU7{vSAd*A5>qIk74N)|4bT!)BVdu-4q~d10{aKImd-(_QO-LWz&&S7 z#aW59WVx-tAjI&*4YHCzfG6UZQ%Nid9t-AO8?H~Q-W9(OPy|dPYxLQ(IV{n0~ z*|n+^&+zeS?4zv;G?X;hzgj9ua?0g*d%^Cy!%4}N7j8wwHqqfRMc(Kfl21-_NfIE2 zUBa?9#_3Ya+IIWvfP({tC@qzOWFWc9mDatl&d9A{*5wnb7a|2H6^%127%?8`U#R!W zBVSqOHB4}Cf(wHfN&z>faHS{${^})4D#u#z#7?>4^-IQ7^I8D%_3Q#FcFm1kXa6a6 zx#u9Bx8=vB15x=`4^BCJ)53iIXkxOz^pW1`@ZNPsL#QAx?UZ{?lsO!6lF!v=`Q{&; zqseukw`=m>IVgoXNlwVy`*R~0oOZw!fOL1#9=L~`dvf!L+qyfP9dL`qsuq?9c|+G( zqs_+N!mF!n-LP~iRvH6h2qToWIbJv}qfiBig$N$|n(li>*2WJ_(gZ-cVFA# zdd<#y(;(NYlWQz-Tt87+tv$028y?@r_J${HcI``8#GI~mj@?do0VIj$;rb|@J4cb2Kqd}JBo{p+XDT8h{`yto6w@XMsUzIR z*f8h%F#EKT`>vWpjnD-oce{YzsQLetR+nd1i`fLL_pGwuyX5j?xobz6bObh=kli|| zhn!(p=MK|QC6Xj@k_IhVBYP4bp-R20ok^2PNZF2^*LX>)cu!yvLMm>dUD##-)+;s8 z)wiaV90c}z^{n-8bd8jnsqqHuUyVa}a_V2NjqE!2$Ewrs3xQAj@QdK)LU~oq^U3T$ z-9`N*#_2~=dTXEqC3_bh>*Y(2?2AP!y}rJ_T5w2WqXv>F&$`c*P<8 zG@w+v=cz1^G&;8ojfvenA3o67h=`{)FOP4`lh^yA;#;jov9HM^@9)LF9_;{Pt8=sc z$KhHwnEGX@&-01Yi7Ym|p^+jvj- z%-3?0m5*%9-4rdRW0Es~XIm19*9D&HfqADUj*tD z(bFiojOMZ&&Qzk-tLL~%Gu@I95r%>xgksV z&|0}RnQBF+yE6k+{xFh6q8R`MiM=9*sk6nUC0k7Ba7X)ZVbAHA7)8dyM}BMl;BeUg zex-YhEE+CQLt6p+C5F?jU)VSc9ebVS{;%b`APKJ>8o#DEzPCOb|Jgm}_iBfuquXA! zm4@A%qL=|7mkc(V>!;#&V#S=u8mN%CP$>Z33MNtv{Qx22t`%#=qSb2KYS*HQm1FK& zGjYk`jk|6D#Z~@gLLy3DY3BMjLz^nR_gJ$S{w5UGc_l5HeyEF#AF}28=t3J|2nIGIPos;w{N9%kP4n@855O3EHyR7 z)-U1P$lEkD64lg{xES8JD*;@q{IegB=uN-PR%4s^tlMeH#l*`E+Y2ztG+$gCyt#i^ z@i=qK+SkDW`M=lWPnL9H5W=T4D4$=#k@d1^eL{ZaN<%J~?`orOAW54LV#e-i)p2KO z_#NtCx%E!J=4)F2Xf!{n`A$a4^f!9ggOu~kxbx2AljvoYI;?RjwmRsAfpRb19TMmR z{`!R`c8??ERV=YODA+Y)>=(J-O`C=!QdACVZRlfx!6~_`0EJZkrwNH1&=?J!tw1N! z^`fq`gV!g^*3k{4PJ6CDk?v*qytZXf6NQscr#qj;?7`aPxeD1zQlv@bMDUy9{^s@% zX=S_*TP6s!Jp$>FX73ZfbY7niH~sAmxwN9GVO<8e9ah7q5bW~kK$37Dr=l=GNLXY= z06zNVK?*(r8BvWf6^ukl#-u=n8l%&$^ql`E5X|LG*w}e}PcxF?)a2G?&JIU8`{&1~ zTl)U1TYKT|uQtV~?WK9!#`fR9CvkOAJQDW(eWf~{q-xRr=8L9G;{3(0|E@;s^qVn% zxi@V7_f46d|DT*B$_>B&yEozHA4%?{Y|iWpuiFg`e|zh!(VEn((p|85!`39b!T+iE z&2B>@!}?3K67`%X?ooC@_)Xm~^RNGVGX{Q(X08Tp5G0e>Zj#tE)UBYE3b9nUs6Fuv zxLzP(tIhoXApjIv&NEAQfzkLYM;k9)IuYsmo1>?9@V_>bHll+yk8b$rJkO-^<@f20 zmrmE_r=qB;oSmMTqnewOlzw}b&V|-M z=x|vp%$|iX2`^$#=$+48gcoAu97M8uLaxVCR0m{+O3) zmWDWMBkc9s}zG_7Y4)l3Z`x*DRweR7=n)qbp}b5^kqkB|z(ntN$Y<;_Yu)~3$NwPBwqjdCD8n1rgi>)_x19;%&knXl)O0Z-d<&rGZ+ZgIEbCPJFJmNHe z*7CWTP$db7z>*HUL#+&~UpA~uyv6IaoVB7}r^2g#l^Z}TVTo%Q?O}*k(NHrmP%lSE zjw33HZ6N}lDrQ>5crr*4E_fXq%>o4gxYT&#?j8W6R{H<6U|IcZph+#S?`!iU|H{bf zg7TGx^my{&QMzRJ3riMa!kuZ76zd~DZM;VsZMW4T490eiM{?3)=kqy(YINwwRw6u> zM@|(?l98zz--eCvlyY_;q^a7Y!$(`_lnaksW*%kbK0**)jA}a0LG8VY6lOW?)Mo4y z)?xKhYXo%|6bmQ;K0B6Crd4xDNKe4**hCQ`fe3JE@WS1B0L8`s@f1K}TJmi@^nf1z z8?E2C$>wDnFi=^<*y&Ram)%1QI$J)=iebJM$AedYv9P(b!-dD=_9)_Bq;vM|_ft(dKhbqd zKIWr+f>tgL-@+Y`v6rrm?=#aUzH+!1Ck>~@o2N`$lq*x#h{{*t^^$kX4PSaF z^n{d-qL1kYVOV*USS{s@=updD0g z@X*#w?s6#g3o#g_r4<6bYz=6LXHwi#y}hp;PvyT@)?Js0hpCRI^D-Hl?YOC*mCJwP z_|4{)8?%cLqjXpSr{eTh{ zBj?7|FEu_y16G`Bj4sCug>hE`8qfccD4pK^uQ^P8ARWvuf}>Wy7KjdV>b5j&WQMZ|ltt6tzssKSa>=BQb-3;gxTt~FQx6Hc4y%e%d$a`QNAx%zx_@3E0* z?CQ}sO~*$Mz0l{Z*b(z>ZJ3BBv_|)mINXGUs7ES!k`5q{L+1n9?)&mYH85{ z#jbAG2=nRi&+~cezBr{h-#r{5gl?SQ*GCO=t=@V>lgVVW@&4FQBxUf3$>rD!my{Uk zmc*w+ViZ{1pAX7T#x9ZoUg{-dOY#L;hr3ox^%AirZ;OUb0kxuwuA{yz`syQ|5CYWk zl!Iop7-@R>g`=Ij=k}EkKcDhvPkz|*>F4^dZ>e#mN%s5LAG%DmrRhPgg1hUAw#Xpq z+v#||r`MrB-|bol_kNXm#HMyg{+{TQ<@-w8kosk$bQ?Xij?tqp8XIzR4)m_j zH*#)v1aeims-kG9xW5~3kXUL$30~?|;u6^wJ*iXcRAZ9r1-dP2;*#}FI5j3dh5~Eh zWv|ZvkAxD->AH)inUTK^7hivy2RdojMc#!kBfk96@Ip8d8{uJSh^z@F%=-C8^C@qh z6+SrQR7rBXv>UB2gtBYMzi*KC$aV0=+^}ohb*{7?IgcW#**$KD_Simh;vct`sH~U- zx#pEyX``z<>eW0Se&+hJZ`ZkM&r8Rss@jFZQs+q;qKGO0e(FVWPDT-+6HM)})C=S| zOf~JH)2UDG(CN+z&|1y^|2^di;R`SHpLOuw6q$LnN;$(T<4Sd!jr4JA>w$41@J9;G>^Y~*r5`MD_) z1qn}n>P5Z>Z=gj()E-B@yk2Umre!H*l~A>t=*6gTsQUkDVCVZ>xO(KORGPYYe>6Bg za!w46I`rxTt)hR@3sako5Fr{3x-C#NkyMGmHfT8TTk-YXXEl#VQrqL4<|GI4`eRRg z(P(~p=gSfPSzEnFM#>$@#M(c&4sbD;jn|x9RgQ`2d#4|fTO!Zbat;ci!-|$FN*Ioe zh(uy76+a&8CFK%mU_x3eDfI#~CDo!*I9(iSCawW7MqT}%PSs$*<6@KsmtOhYtn)xI zd+x!Q4=n7@9{F4W*ZkvAZbKTg_I!9*&i7ARZGKV*Ijd1NmJLQP2$uM3Yvd^^PT3GoE@;oLB0B4p)E*bvF1w!Mz!-`m(6? z{~!|8RebR4FiE0WDt*6HC*p<v}}YFFV%ZkXPs9n~rZmJ+%{{!1{o!)Bna}SNc=q zy1(6i(%8-S9%Yu(eM89qt>yH2gLj=@OmDJbrZoxUk>1tmm2oNxPr|vRHBCo;k3w1L z>%h+c`0u|Zy$UH=naPb<8Tda{1`Yn_fdPK%g}x+<1lkH&^Jy5EI!q5Nv{e~g{BYS7 zU;j^oi&fhEOEa@4`RfM4ET0oG#a)@p2 z{q}x3p5Pf#iyV{8emgaO-@*6kKew}uo!{?v#2?XUlastSUj5Y12|Lw7(1{e3a*mqu z=rS9DV#v!_#LiN%OUvTRWYmjww;23Ze9f*8q8fkze(EJ}i!dw+HbI#TK&5Mp~2$C0&SL&HVAwU*SRpo?laZm+vT0iNo` zu_kZL#9VMxJ6!crQwkYrSoEW>96*NUW!K4~dOXSkpfxwu{}ckWAM0-Z5GV)3KN`mu zZvLnf7$lIXoW!X%mRW7u=)?2}yJK0=HmQO%Oyoo&BI%3ICll2I&NUP3MdRVJLan&!g}z7j()3d6RfKCsABY#AdhF`|PfXARRXiz6 zN-1V(&0AAh<&?l&EEb$b;Zt`JRuB)eBaCejgfh5bitoW4!=ypPRr>g~(% zt#jRdI>xbjQ@f8ePOx`<1Zw*BE#Jmd)#|TR3YM9>RJ1#O6~dF%&r@dvsg3KdMWLbr zDY5E`k>0Q>;86me>cwR$@+#0;54GZ{7x+2!1kDAtqL)~HcBOds|AEsqOnRYlC`BoP zelcAC)K3uuzu%vaAAIej!>v^JvuWjDJ99Eto%frI@k;qS&6gpS;>c>aq7z29ju};zz2nFwy73BWtQG>} z2i*@a*z&+WxcVOeUh0KiK&W=;1^KfWYo-4m0$6cH6Yd|R z*>%A-TzzW%>CM`s4VV5e+4vS8?rcjwXj+I(YKexXR6W~rYmh(j<$wP0F}rtVm*jk9 z!QzZ`zQejc0D61xegYXmZ%{b`&h)-u41QT`V5&Yh5*wgL4yk0d#K7pukDvy&bG@6X zS1^pBu7n7TAe+h{5(<9mrD;lPg+}XSk72iAsu#OC%mTs!b_;zheiW3NF;?fZKM4X` zK^BW0MMHJdfo*ix-D;M$?o|1GeAo0h=H^%;EDLI4lSn%5+nZbQ1g|0-qQ-P@!?!P5 zUniMa<86Ky0>2kuJi*leYYLvJVQAUJx=lBPT*3_^iKSnX!?6-50@aeb&(LsFtR&(p z?JRnrA~6PK?BD}F>ZN{3ssO2EgldnYUZ$srmPD#vLqzS+$KXN(>{@UBCmL9>POK%W zc$z4zX8#=jPL)_>eFuwLYi@c!#W2nXB?%f8-Eb#WBA>+_ot#-lLQXoTO4@?-lJG08 zG9qgp({={4eKKL`3IYHE7laMMw6bzXO7UoztLAtXg*=Cr&t zH}7%}4=EZa6FFRQbVRYRSOH$@m2M6#01;}3rCy_Zhytl)8)_vkDiv#2_5Yu;Svx23 zCtsz#-d|%;^I|&_lli=V@O;}T9UW_LhXze^B`b*oLBDpG~&)%SMm^n-w@mTNT79}rtn`8YAF_p%zlxdE&gHTF`M@>Z} zbro%HikAeAYgszNkYER1>J@Pb6<`!d+KsW)OXZn5j)LeY*p1OO3XC;!tsZ|uBEaY7 z=!JDAJ&mmwH8q?n*_zIUjh~)f=?`+dUdyKGA=5YSGUw&b5^XXKlmC9OD&;F{N7*gJpacj3;uCmQHAYg5}ktU0Z5u`eZ zmhh^kVgWwtHEszwAVKXh)Qja2oepR+e`<$LyH@}I)EL`5HgHd3@tLQe?{IUEKm7eV zX6NxOG<=L6wF?(JRD{O!5yT?-oGye(WI8#SVKpWr*IZ@F4RzOk#~QV5~Ov@GQGMZ?c90ZQ}%FX-qOlKCxJ`l)w-`8>x!)CBcf=LWL*|A76eac zXHx(Gz$6j?00000XBz+jEdT%jzl%2b9gedlB_^++qnwqRrInnUn30;2jgOX^mzR{A zo16aWHDU_xK-o|`%=7}fMth(rwq$BU*SgSLcBRznA3-EFm${rB=^FQ){rh1w%I@Z~ zx@kP} z?8bc%of9znTrQ^3pqevOBdM;6(%P@UkfVnngFCxlW+qBj7S zt}R<~LdWMiFtmASy`LbetrBKUom|SYr@6WG+9ag7B0lx-AW&Dgv zS^_~+f(yxtD4_`~-G?QUe9yb8c0<{E8{inPvCo(7`S|E8O8R%Lx7bwfmm5DvMBnp( zZMNs7STQZwuf+R3kVS2kO>>=xGS#PB?Z27zXPn$S04(392J(#0jl`VHL<&ND%*pW? z_%i zDE_!B0i5gqr^!~bt;OHo4*RZK+wwntV?6GBU-!Rvhl_(B)HFj#Tce zv~oVJ*q{Wg4I#CI{kyM2LKhmjlM^mC3^5H@UK4Hi^%z-dp$H``<>EeiD^50tI2Tt4 zv>HXbb-pp+#ZTKJY%R|6EyBlFD|9|mD*abctmit^co`%X?0#tRX zDaMB7((1OQsi&-g%G4OWW(n+>I{T*yyCgjp>~;0wrF@}Q$7T_uu{WJUdz3To$A9jg zbUF?VE2Bn)M4dVKa^twUbq+Ba9cOZZSx+!)kK(}IRopSwbc!t#<2bKtEIG}wy+xkX zYH5b^rydGKtPIChM9?}-IFgq>f43WO;Ok4+MgEVtViN*n*{*mG!-_uYMXe`q0kmE= zcFxYHVHRUel|t>+rc?_~cLAtWp8e0jTqB80%668FI$vnF9T{N$vuo*acGKyM{YT>F zx6f|vU(d)!oW3)Qj)Pk__pSt&+Ch7t_mBVINn&@;<7obM_vw%mZr0b_X&1N-a7OCK zoRj}oiMUHr4TQ5CcaD!nlO4O!$nP|+d67|{xl1>Wg} zrX?dN&_RtMHOzcj!d-|jVUt@ziVLuIF6LZxVzczLQ)JS=8gRftd*U8Fwj>GJ%_*#R zAJXHO(N!E~Mnq$t=}-WCIa`1U>WRcH?ZAUwB>+yhdpKIh2=UY!Fz65_g4RYU*tB5h z0NNX+-#l8FX24O(s+dlKV{fJCnS!4>e)-S((02pt(DQL;)AJ&sFj%t}R#V3<6~5^u zO^fxW;4IL1>Sd-3)snmzODSWOMi=0*XudB0iBiG%#EE${u{O0WZ)iR}%eMKiCLULe zzS_Q*w5xQ0YS1H)+!X`_h_RMAw4ySwPjr61+s=IoF9kx0j(2o}V;;WgMX4o=0%nI( z%^2z>OpjQFmC~!Frs(1Wgu4o$6jzGme@cghYz_(sn|A$iJ2xHI!X^MDvt&MXeQdy~ zaa8)m1=6h>=(tAEb_6S$>Jj=0Y(CYAcV9T5g(H*B0|HJ{NZC2D4Wt3RFBQpZyY6qsR*j}AOF;Yd=5y+9JyLTbT#{*Q772*$2=ojwW~$0v3Ne=tL7bx=)Upl2lnnU zZy2=%b-fA*Ai4qfxf+PDigp+X&`lUwG4=C;*3QS&Ane*qY~4U<@hsmk%TZ0oTjNLn zbN7mPZVZl}P0D?X^5L2Nl(FOjJ|j`<`a&)4IHaA4Bvu;;s32ZTCIY_cMP?74!0w@@ z7dM#O2+b^U)zjYZA=craZm+V10Vn-hQb+hX6E4cqsx(e2H5yGL>F za_tMM5lePU1a#~Pr_t@rK56^maa<$8CeqRtE-RT4UmLD7BvbPi=R5W%SMZI-i|h9b)#uw`|#s^}5fqZ^S)G4C)P3 z#nt{UM4YJ25o{Z}I}CVbmcsVjUSY9HwsTsk9DI$D79~g!kJP64H`ir@Oi&U%*8vB7 z&IubP5@}pHEEy{A;3LjqSCG^rmwUSORFlSN)@XSyvaq$g| zh39XZ`Eq(vPVDE=KJ|T4>(jnoLC|#?g6?OJ5)lRzw!emz zy&>QKXNm90PTGLu&i2ie^d{KH5wN{^`YWyRtA6b`eZ%xakGvj4j8)pyI8Kxab69 z&fcRP#Y=-KMZ#Rg76TXsgXn~HYF|KBjK;m42 zxDx;{Oy6{^P^kG`xRHgb8kyhP@Ve2&`2Fx>ZCKox{>>w~v87_F^ozFcPNgXWR`3I! z=>>jCR*A%{QXFbTHoZVj!=9obbb_b>aaHQUI#i`*r$7B+l4f>CGQt-{LUwe2>`0R^ zANEHP2HR9a01i6^Drg9R8g|9@g(;gGCPeCUi--AkBBXavaIe=X43}CKA>iqj>jv$2 z)V6d}Tq}*Jw`P`eI_z}Y)%1E`NJa@p2x5Y~Ie|pgLZ#Ba$p^marD;rFLBptmsSP*1 zNKes~q$teJk)3Ns7Y$sNimO@q@zleV7NVj5G~AU>Dko;MdA?zU82a%lylj5z{iYOg z%qt-N_Nv=WJw8gIJSe&MFB?{)SxNx`kPF#Gt?SV&-~WKO#P@L$`%1-LP=jlloPwC# z!+&?ig%RkdYW+W}QM;Tb88yOJ%7{c4|KP}x9!Jmw{^=EUS;m9AXI5ouOg6pP%-znQ zWpqJhYJ@&!a8W}ij}nltvwxcKK#(1&B{mFgu@lgEt&c!3J{(Ni^hj+g5P+)tdDj~t z-gZ>mY2yeRd8INs$bM`YL>E9I+eQ)5$huZ?^B^rO%s0(;udPy6&pg0H!D) zVjBzreZUND>Ao)Y6xEP=pXH2*$UQrgA%^wKmB?Mdjlqatc1 zuF?cR*L>FELe(9y@*ith_&kicohL>LG_92!7O+cZkmAE*)aoPDi zm5-mkJLY7z>E&2eho!^hb!xJnGL|nLqmdXFOSK)VeFL?Jrl2eUYF>hFn}9?a_P;0G zJw@*~NF!S|Pih?iIPW+0ZtLmtvx80P6*1$uC(`Fs?ck2KtZ=0pgRDjjZs4$kbjBy5 zVHOqeWZ_7TPg-dJoekYCnP@;bXMn^j?o-v>9FeiswaGbXCac*dVL;{Uergs z;crC$bvym@n@z76@6e7-)}hkLJjYm3va4ojOhG0sTN0OCbxA4&m{3T;&!m18pE$k*bJ<1}Wl>UE8H2rja znpJcpu%YtD)cxqy<#)!#IwO9dvo!mEm#zQs^wC+I{pJhOBY@PnwSf`r9V7K*Msolm zKONIT7fy7$(=D&nl{v;>NXOw5rsv0GZIj!K3V!YiWVeYFDIH|D3XTCcKoDP}Y6AV| zr=hx|KM)Fqn*)C7h2=g7(qIp;n|SFJ?$U9x;iU2oyNNC!*_BrE@{(dATGr{_l=kLr z`-U`qp^1|x9VP44c_QC^89SI}IQy_sYSku@KRV#Ld$e4GLWt0I|mZfgV&O^Yl z4hS>06v4{->b9wt%c#>3mw zN60RW-NmX5_K;^n;)BE5cb^WorrusEEAcsKPetJe45?-5Q2-08X{$%K#;=mY>M+08>wFWWD5 za}4Fi4uzBo;U-D2gU@;7Z{Q!?Xhca!TKL4P3o4ffhy|YLCCx{qLQ==LRlK#wMK9^z zp+lf;s6D!ZrNCDGek@%CWuJP1DH6ePiRtKHBK3F(zKLcs}CW zec>rJ{m%rtId{C57jmgzpLjIaIe$!({`a?O6^pe3jbco(H4Fcq2_Iy;R*-YEN>ZfS z=522NlQqWIZMOs6ViEA@`ov>dDE)#tM_%aV%p(Xyq&$_en^@>o^dkg;;5K15(dq62 zXvHOe`Y{NOry5PCZ3BRswu7^DeAM_}ec;B?*~0W{<6Gu69el`@-6`nAI7x+N0qkLD z%>jKU9H})n-o~zA;TCQ{Z1H@9z!y;IyE~46mbQ1VXNtO zzQ`Y2#*fcG=NSMw=en3n*RgF2Q20odF?p{_tBtcSK+= zv~xpoAX~?oui0+)8DvjQXX?EUx9=*AwyPaV>NuUTO%hj)9xP#?U6#(Ky&a`C2-ZQa z6>q@3l1NgG6}d0~Ug+iY5t;yQu$$QEm1a7nR8*@QxpwHv0c^$9<1`_q_O|G9JW6^@ zWTEavn?z2xWXC3U-1OD66MyuqjOo?+QIlb4jeNQ1`|fm}8FNfh+uE|(MRm`8(Yo)$ znhJ}L4hy-ByxU zRilX&+<)N2Ge#QRi zo+Kwu)aY3QH)Ec(A`TiuJ9BYz-HZ=oe`Axsld2$u5Ic01Y7`vEe(yq>gK>v4xS#J? zJb&6@#p?F*l7g5H_7cmUI$ujx9JSm?0>XOoKNgC(x<&?A@)7qj@qIzyD2KoO*jiddf#G{pVrB zOi1?gMik6NK+Eq6YR&*+M^j=9O)%NeTRiJX!fS&dpq9b#f5mNg?{I8rKU$^E<|Wr* z91h{tpd;do2GqE+w6D}|J4TQcWFgWkGK_c0JKz;2-zBbIeF z=l_@p0l=_9a*d|h{@lKn2Os?V4`a3P)zR35WB~Xej4<7iq~EfqJrD z|2+K1Ip#D+z3)P3e`Y6Rp9TPQD)*CiI5?BoS-ryR?6CJYnI8B3^$8xDRf=o7Qdiv6 z8DAY=d?Tm<W05&N=$+lbty}aHpxyIrxN896srscI!C9 z@@>}F>zs22`iJA!Z{LFcXBJodtn4xSjlCwp$G^l)rv~! zNKp_(Y0?!z1r${3dBS!5?)8-We%E@>TI7#}?6W`nJA2N|?1_bmIvng?nodq?0I&g* zvjJyA{(0yB&kM9^*ZSZ7&mze8Eb~on=3g@acU1tKl?~0w%_|@zA}%2%vsXb;g{ZEj zt#^=QY-(<0W9R66)Ybi@hqtePK+w6c3zx25r$)xaC8pfSxOpo#|88M%X?exN>bl2I z8(uM5+B&;?`v%^B7#^FLn*IFs+mDsi-|JgD%zNou8`_wvtLW^j3Db#iC&*U1=U8EJE zR4e1_yPcEz9x1lwFiflY_})o=I<6K<2{rNKVT`%_%n79f&e6aNH2`z#A}4&u<|eCg zJe&e;I<%?-w9;A8mn#%`bVkXecPR%0m5wzG3zeb>N3tp&{K}EgRPlM-w{mxogR|<= zJ_L4u8@W@;o7Q~z<>xGgr3KXkR!H^Rb8v&GV=HPJjFy9SN};Z|gnFRhw1T#U-d+ z8=F6Pei!HvqQglP!~F|xC>rHqxZ_752dZN`5yVKtW}P#?MBU+;aXfLjICjOM=fB76 zHqSO5-}y4PRPiXH7V>?5>8GXTwnoFuZ`-c`K98`er@+{XCUJV|wH6xQG(1}?#W!-a zbxQm_qb|ZDR3eB6HPv<^!0X1#lpc1lZ)`v%_Cs(wH{YSf%p0 zYKe#EO@Znw53-g!dI~s(wF~|EFj+gG zZ$0W_2|p*%B~!qb*rcK7uju9v7l8hp%i=k)`ttrEF_F1&WFe4h7rfublT z3~@c1i&Df7X>)6LQ9*SPKc1NX9A~Ev@SSoFy*v~ssg)D{obMhUaKlUs2dN*9rRizF z*hP+h-F_`#${p?0Ip=xVEwlOtuXReqP0bzc3!67FNP;Y{6&r~q@D8{Xxq<4B{buP} zqdK7TELbZ&t&%mE6x`v0MwW0n?@^FLS^ho>oISF~HU=ppxe2QZ(^yqx(W#!hG#&qU zt1nX>xg}3|OZ2qqC7|zJ;~yFLam%z6X+|KyHXn|dfcCoP<}x?9V{$^fmeMXz9raNC zC7lP$ro^t~z4ATr6JJ70_x91ymm~E;q6f&F0q<_IY473YfBW;%-A`URf1M?r8P(`a zEBTBt^&@vpww0oOT(7Ge&sf^Je|LNF3~2hSxbfaR3h09YK!-=clvwKE040s6Cr5VG>635@Q*->WLqfuxlsR0CurwDcxo#|gT*rs8bOs7Zr=Sbg%W)$}v z{RDsW;cKD%Titv$1BD1j{qD`P>sQx3vK{w7a@I7MyXG%*qy7G~mN)DCUAsWTz*74Z z-{I>f^oOjcG+(?#O6*+^*?IEy)Eiy#(v0c@dAOwb;DLH9fRQo`*IT&UYq{0r^g|*J zS6U~Sy-hsMrJB}cEx4!dJ=NN`!Div*`x8f~#bZ+fmMPV(2pWn7ry@kt-!H;O5uHs5frej}w(k2TSrB00;8qGLr)vPNB%b@Uw7Ar8saBZfazU3P)~0*tpJ zk`wZ#lC$U5#)bF91H?pNF^Rnli8dS5B-{8HTJ!R&dIfyYBs&(<4nElvUZ}68J@-Ma zmqkplC<^H+eqGX9=ylpE;fI;G(fHy1qu-9tZElqFV!@TbNAWP|rn3VaHnRB03R7{8 z67Ngj$QLGRv!8N$o`3yrjyBJ&`Go0}Q& zqWQaDI)w!Ln9LdlP;7Nz3poRS!Dh_zmo*gajh4n!k)f%XANj6)d-LmGAp4hB;N0^8 z=IyNa9^LthT=AX>ivP8*Ig{0FfWyp-mqlHq^?ias+Khho4tPss&jDA>?fPYa1?Otmz4Z!huWEbc+;0jY_;ez}O_oS87 zb72mWz*e@rFD+4SD85P(wDuhxC?dcNkCgI-C8g(f1$&g!vqChA#1Ez!Jh94lK5f)- zvJk~LIQB>reheVK*E1!7Rte#{s2B#FcnyF4J;j_))%>O=-wjRc8yK-BMLDbtma})! zgRBUT(SK>9Q-#p^Fp#2Vsb9EBzL}pOnwRSD_f6>KmBo<9$8+=77T0Y#!{*Ob!^l8m zq@E-JLFZ~qmx+QN3>~are7s$v2G)Cat%aSE^GnkHUm$jtyP6OAgF}>R$c8&9>Gn}F zF3K%Ppy6Jo1-2Tp4j=lk8Wo^c@Mw@%D zB-kAjD(xIpE)6k$T$t+wt!qlB1M;jN z@5vtNC^LGIDbQXx{n_&qMz|+3d0KKh)$`fW+7rrE?`V;^iN5Y3LFLQ~?nZ(iuaBof z(1Szcs7*h&UkHljC9mIY2)MMm$gjaBKK7`7Np?B6ub8#DeZiAmjY?G~&>`1jKfYrz z>G4hzu;NMSHDwo@yLgCT+4R@2s?P67oQ8kM$*pC_{O3z2?=vQ#?at9>9H*$k>MZ=K zApc)K!C*RaO$4;%i&7mFj&_f8|WJB3z zS&RBOG4BY$7(E0EpPtj9HE4twIsf3au^cNp5#C(kiA=fksI@)U?wZS=>Zm)eoOSwT z0{*<3Q=2!e-rRbB#^=Q0^a7Z*zKh3m;6?#~k0`Lwp+d_N0({(jq5 zW-X-fu$@GiezkNF&Mrhf=l~8xKG1?7?UxtNz`--diaoHzL>DZEmyrFdVH;jw_N!Ym<#4)bp8lpoHI*4D~DMz~(FLd-SJ%4ujd%|Inw_p7l zdd|{Ud{N0<#_$3>ti-`Jga1wG@5_yAOFQLo_(C6uXi5>+6STy}0bjBt0OZ3IK>mV! z=Y>&3d(|RQ9`MNLL20pBVL|?TmFvkA^w7G+7xg!1I7X`OMC|*tXg~bsrSgqWjswnW zb+5L+D7O^875sWhX99w@BQ~N_q)1T3o-mgXMZtO&gc&P|*MkdfW|C}l%>wKDk3vys znK)_ErM)%OjG2^uvO^t(86JbYNOlI@gG;(ZV)8H!U9R@q{EPfApNz(rL9QWtZ?|S_ zU%ne%KL63l88_Cq^zqu2t$}aTmuMNG*ED|pQB-;1z+n~-hahE+;6OSaB_P9h1W|zl z_~SG-ssJvb*jA)sRwI{~ZV?-vO*4iW#-ssQWVklFUBdO3{g#=UPu?yWh#Vfg?>m<< zq;ULm^SIr_her_~8lKm`{4*L0A{OytjRNg+7;H}~Ni}LJr_%1(g8Zcv*zmtV9Jnb( z(s_lI3LcLh?m(9~Lmi^XDEqNgNF0JbovUXX_hp4$xEs5U_2%NBn@zurllk?=@(evCgw5#7#`WLUUs;O3eA+xDa{SgB*2NEm zLVs>S20xdAUL|vGxrD+fQEZ04xDZ9S_E3c+X?y3omd7)=M-*ub;ZM6jn^71-9M@#T z>83=Slr=Z!AUw5JY20z8SCQE}04$_1|_l){|>U-=>AVj2HW20;vxkXa6X5S($#gdiv}CP%9s&9GLYD&@c#K} zyV?ArV89s=lubN{zMiYiKJz6SqKZ~uOoQ5)F~|CqoCCwO*(+JQKz|}R0?uGhNA$7V z(qsu-_i|6!q`H&_D||dQcYF2Tlitt#Lo(ip`EYZeNY!4K@R z8zi?3psgeEggu6o?&b)9pKvQn-0O8xM&gSE5gLoK*o{t5^< z)aWCA8W^(Dc_N0WTMerbim}4S&5}DmMk~{Rp*lasQSee7;dQ2*VI2yP>;$8ds*glQ zKucd@q4R7RlwaQYu{8N;f`tr)7$0pX@00>BKYm8YDN3Xj?KZm;nh-Fg7xD9x@WPvo zo3`|QV>^&a-!)~{tMX$;)hunh3a!A|w9{4T!8SZPq9qz!IYlg2r;ycMloi=esGt)l zeaAnGgQyl4qOQW8r{@K_jr4S-&f0&`I>(|uShRW8RRr-mUcT%RFry%JbMRTQFU)Ig z-jQH&fDcf_$h;Ih8lJ^y0Q${ptYMueEz-t3_uyL}vWGJ?;j;`Bm=}Xh26KOgliAp} ztihJ}*_=-izm~q5he`4WQQn!7QDvAlpYv;?Pa*5 z^Brx5`n>kKKX|WYiA9_t|Kk)WoWXZ_Na4MPS7<&OD)&Ytpfmc%BxtNs6gn305&1QU z<~JpYsp7V&1hqKW`}*JI(lAQA$savtj5al|R82SZd&6kcR_*`vw2-If498>d_B;NO zaZf~Yd0IMN9UO56Ch>?(`kD8PaS6aeo-akT?KVhN6t>zlSxC8vsFGecK%o58Dj zf#-(#o~r=K4cNomu|LVLe4`-Upt+8N8OlVBGNgYZ^P%yRn|cO2KlIy-9 zH{K^PogXVe8hnI7+kB8CaH-|qW@7S602QwW~@KVNR^_T}4$Ee}& zLfsyGU-^z$=Hej*axn^tI}*&Xr(YMNUVgJL6Xalki#e)jM^uGI_niEB{^FkpVOS$dABagBfsZMQ25B@BePcpwJopv3(t07^Ik8 zs#s}@zQLM$CHtV5-`8t7iejqTM{A4@#NJ-}wB8?5czO>74iYHvKw*iye|loY)MNL& zJejSxNPqen&TzWx%iGlKq0QzCo8j^ourFP3m^?Koi4-7Dlf98vF3?Xn zs;5A`Xu010f~fcEiIPO~$Lxqt%q3i!2(ekZSCZ>?K&B7bJHajX#n`=jFJVeESuC7Z zYXvhKS>xip$JqbKMtmcuai^TA&_}?w34=Da-_jd@0J5DpKN1b6`S=D){S-UtpO<$5 zf>yj>x>?hi=-&w1)Q#)fvxiNYOA&hY z?xe-jLT*~TX&$Reu9jTkuPB9fK?vH3fLh>wg6Fb5run#e-XL#Vl(LoX0`0)r87<26 z)pzNS@})HPiMS+~#Ab2xsmO?4zPQ55DO%!Tig7e+ajD1&iFtV1^|W7j%>NK~gJW7- zfNi6HJ6$d9x1eK6uwj%b^vbGe-!Cp>EWr*ZfJ|&>i=G=f7s#)#06~Axo0`SlJ}fd5 z!-ASlRc*7DlM{@5(<349Aw2JCANy}j)FTmUk^zy@8OlZ~~;?fc5nC2S0WMtg8YKd0yjbUW7 z_tj_hScm#Qx-|)vXA?~P`km7*8Yu<viN||hEMa=P}Xcg1_l?6SG#IUT5O6&;3yw4Y!thHfGFtV2IcbEr#zlQ_f}O3 zyE>y(jM?j02F~uN)x3+;YzWXR4h#=?MVJ`8W&7UKWy|WN0p{|FJF(>{+Fu`=VqjS% z+Ki|y&w6EGhaBC7S{L0~BHo@a=7I0~dn!inZ}n&3#JTT)m}4404Dpg@xZ?Q)v=Ir{ zW=JQ9x9x9j4k-4IO(9)UQP$VL;Wz<7Rgc$#J_4~i0cl~91`UOg<9Mn3s5gQ+jcxj6RW4$D){27>JO|TR;L!g% z_KLtl$#&R_gDsz}x3>d7<)3g;8PmHDs|LvwjZ$c6>8RSx^gjYbR-S7)sAP->c%A++ zj@?Z}RfK#F{vU;u9w`@u{dRqpKdW&@F83h$Ptvk)L%E4>2ZqH10UIIvP;QfnK#L0& zZVof?wmtI5s*yRFt#cpF9vT1S_Q~zb&)+^2ADYfXL#3~*WzhG~jJr083y*GmnEkTG z%pC#{lLkB6vze4P?vY}Z-M12A+__BxICFlPA;~oI3t3C z84qLbK6v7S-%|HMRwA66Xh*`t4jc@=+-=cd;q*^!F@zurkVBNlZMzV)WT*lbMdz!3 zwhOc!$?kqvwIJY#s{?K>OeMFARES`^apTQB)p_v{ldno{u=S8LEG-=D52oAL577_w zdv0icw*UBl*07jz0VEQ6AsIkq14W-r`kMGLGisO8o>AMUQ~r+cGATTD*(L|GYA9?a z_GH}z=4z~cO`S9kn@jwZx%USl@z=ilX{_)E1Ra@?`jL$LF&7UdQs8y!dhIZ1S>o}% zI$eD;L#;D=wDF=g(B?A<7X)WUs?-}n7kTZFw3k!l0vDrC63jvCLjO@H5<~c|Sh%L; z`u3)W--+uC`><;N^$*=2348sFIoVm32@Cvb2W8T{L@Lv70hi+c*>?jwtqBT#gSve% zTJcp+Bpiiz6oYo=Dl}FrRLPb;rSfYcW|nZNJUz8$Tu%%s@^aesxvbwr<}6z8bc#u$ zF$^O(h{75bo5mtM*PcHq`U)^wqm%ee*v{1<-%Gx7($Z2B8{@B^!kk;Fv9|VkjN2zJ zULALwVM~vXdkr5Y)eUJjGDq8u6e2kY=ehBVL*R3&oCbU)q(`UIKC0ow@?nh;4(=oN z$SN#x@m=2olE(jx^6zc}u%IVou@M;a!10Jc`9-&SmW2mMZfJc<@dC#M?--rUSD)7f zX(p#Hrc)!M1LR-F-Fy6uX*meo4mmZ?;~O z$r}%8eqe+!T|eq^K{tb1UPwk8bCj}d0=Nr?Fax!-_H0qaA6AR*>!6<>VtKB^`;%>GA=lQ-ZD-W!+z z0w)WRd=~ctrbDy)n-gQ|`bz(bFcr<7fZBu81NW&PVMy3(EW1pUd8B{dco~tnEOVf` z$VH*w;cT*T1O$!mEUi(1;S*^P@qP93;{`gNOEUhS$|*!aJ1r>|1V6RU%`bWs#9=f^ z<%5)h>|P5EQz#lZ5ilH?CQMUe&$*ddORGg1Mwh8jfvUnt%M)Djlef?|Ys^yznq;if zGw)xTjWsopB>*T(JHRY+FMPUiKmT|Fygc5N?YHXbUPI-C{nmgX)}*g)tsi;2DL@FL zWQ^*x$g(Y0Y@Pg8*n^L9VW0#^cylT6DD9KR-p4ze5uRyn(na)m)5BsOQ`TWFavwqp z2A4vM4o8ebGYx)4Wbha~Jp9Pk-p9C-9&qwsh1lmum6-}1gWd7eIJ+0kd`Pw2DBL+N zJ14+_aaG}J6t>pkvQldCD1TWCO;Cd)uN8 z52-U6{XR~YWInSD-^WOG7;K7CWHAK12OynOf}NwfoXx4x%_%8+PK$|rMyW>P#V_dH z7<0G_E&q@_Ojmc})oDV!q*r-rdite8`cp<(nWgx0I%{D{Bj7BPc+jvv_Zrth6PL=k zgt$Y<@(IY(*q$Jy#)HG*B6fk+D9JK0oFt)cs;Q7y*gg&pUAoxNG!e^luZ8#ZCjS!j z%io7X_96Dz<5^;d>9RTQkY+c%g*+zf^M}hUtxTl z2YycIc*86P!yHpS)VIyDW_|q-rYRXmp~#5=GdP1w3GGFa%#e?POb+7}*%8AmZgsYe-{@ znvaL>2|qH&CUX+BEI{}+>E$Uz`yEA^_J^)KFZQH!o&3(4Nr}fuUWcnUFwCkb;fWu3 z2ZQ=!`5rsX*mt%$6a1?FY@_#pf?MpCh6M=JKHL6G{ai6Jb~sr7YjPOk zoN(FSW5SBL_g1fS81dSv#&sO>a$yrQ1d)=3+qd{9pc9pSZ?LBe*znU;)UYodOB!G#D&{qS4nK8K>2Da(r~RP3~m6{KouxJ%;m5Yv}@ zSK`duQSiq%TLcWC->&pi<}g{{f0b2Pg5+t-70e1?aa=K0(pW zvER?0J)g_Leon#3&8aDLc&>HSjBeA>yKwAPH?vy*JzqHDC&hl|d5+#Owy=$=f!mVOj|%vS(* zRgT@%0!H_NYzFfpMRc#Qup*D4<<6R&%8n~hO4tQjp|FRw$QLd@=fT~Q(@^0s!ly~@ zJ2t3pbK}wk^PbSEGwqxs%}5eqKkjs_#OYkh{X$D;tDAn*X<0dZNny?{vAp-r&M=mY zAa|e)`*z~t!i&~Fydm11b^9Jqe5IkOcT~*W2Zz7Z>|+krp>WzY^mzk?!b`ru;>!WM z>_O)#;c0z%=INi$Grm$D?OdeLG-^Hu)?zHoIc=A-Z~vd|lcU7r?i-)#e9gQs4<0Lg z9;!!y<0H1#9uO|;9WH0(A%=HJNYNvy%@O5rnn3lFvr!&RgSs0GWHjC}J+5)Z;!nizxp^D<-`^a%{U1I0S0Ywx?dT{xnt)y{%=m|3x zbYXoG4CsiBom;mTDwFrZSra)8m@CFq2%@m7N+=gHf$rqbhCNKO9Qe-G=JDByh~SqL z{bU_p+=ue4wC!C{o!Ds~Tob^}mHbDS|1*PNPx@g8{J84h9UmC_7F-jKP`8+fr86f{p5_Po|9)t3HYfd8Ea8aQ~}P0$=pR3WTDI6BL*Aq5!Dh! zpfG$lOc0>CkHP-^hC!8v)E{V;VdbK2$d7K1xPAfvMvyy-69zql?v#(z=&Bl{V{~H} z?x~!Na_M*v{mbGK%xSJ0E8QnqS$Y@?OMmVtpyDfX#t+CB6P9RH%4;fx4F?0kGN{)S z3w60Bt%#P+T$wgo%y7}c=ZrLtpov6Q%C!%Rhu$`%I(7cM<2RY5rY;&C+2j|m!EC`| z_A_q6ImL3gNu`5n?|EhG5i1L-OZfPdYp7QpZUFEd-obIgK0Hpm5|nxNS&Ktl*}Oh{dTPq$wuvaa zXU(Mk9%cCuqLijr9pE03bHbH7vFE_QqiEp9$hW8id^A=e&;B1_j5N>sR zA)9Bc06)&`>6P<-_m6{WnZ({AgH5x_Le^XXtGoh++R>5T)$zck`?s(4^SD1TeHl2h zbNY^|bU3yLcm-L*@tnyl)uKHd4ERBzOxvXNrE*zjSmAOvG;&r z78n4f8fKRj&!A2nKeu^D^zz38=6$!=k37l#7^~>@gEVSK^%>oNhDXaOZ5L=0aCGJg z-#atHb0Sk#BRCW;dbR}tuobTTb&gzO?q;!ix)Ah}je%J(8y^rv9$c4}Vl^v0a@<=7 za(X{KH!ZsByPcN-`b}HD#tWOS`cL%%VkfL#evmOyxOB>K`}CKyU8(DZCi0wsznusN z97F+R(pBpu3BX5b>dmWZ6bz|%=}y(O~Gpe^vAI2pB!8C57nnDR5xoz ze^ja3Od0?K=#cf}qg5}^OACu9A7sgpv$~nF93}6e2KIRv;)VQeB~(md(3c8 z=DjfZ%7P#jN{{fS^Vna*NyAYE9-iMMxRa8g6zIL+?D>n?$;}LPe(A&a>$K(FMZoc@ z)yD(*JGa7OKTJ8YIlyK2h#dp)jMKUl6l|wREb*d=bnUOsyV{oqf2&Zux$NZNf={K+ zU)@#qoC-uKgeFaj|YXdZAmW08- z|7=fWRaYl8LO1U-cQ5oO1^ZMU-koMbP|Srn~oa+p}e?f{0{r?x>G~FXCa7o#5_k1PSF*D zMKN1+iBd3iBvwJyQmO7_#gt};ygE10jOYY-DMlC&LvVaDa_c?xYH^u+b^O}W5?z5$b&L`fxCM3YSXzk3LauYeowU41Q*C0j4`^WBTE&qNy2 zq1V~Sr|5Op!_fd8%0(_xr;;dvk$RK3;DeG(P$;de+s0EkxjQgUSd~=^t+;axpqLrz z;^xn)>wC7(u1h`H;Lm>l0S-t?W(@$mqddJYBUPy3;+B4Ey|U7C3IHXB69$808EnIT zK75@A*Y3iN!7{uVL|Br!8?l-NMv*!Z3T>BN&Xn4w1C~Ooi(5ci0@?{bxpa4Br)nWj zKe3Gc#fa`f;WV-GW};erv_|kQ(0U{WU%^MOdYgWbUuKnm?Pv9}ij`kH4tmp8_UocK z!(72*lHi*ncZy{0F|P&(ypn9q6dBdP3Fu3#ab-Y}GS7x1Ghs!_Jcbx>7zDjt@;O#z zVJ4m{yLia6$YVAP?wWQEZ+y8E&dW&kWS7YVe2AaylT_&8&u=Y1N{|SO?;-WlRVgz` zj>sm3PF8>?-$2_{L2KE^0@;#ZOt<|0-pE|P9li-pwU!4LK3XUrFEWvWNk+4HDagsW zi*V+coJxpgZ*rVYhPM7u2w-mi3uIL+t8x8SAHoN}69hj{@*?}jA?oY~27p#SPsSpniXW5eZSy_n{hd@bh- z<;EqaPxyt$@8|SpeMtYlS3(6ET05O+_ESX_uhCK){^3sN`>Dw`;(1{!jrp$fm znWyVS$3~Mt#RUM9?w$2=rS%v}^WZ$2DDTTOGM}HjTq5wnSHxroS2~*4IgqdLDCpQO zH&Y>IXAJg%fJxK{kC#AkecDAM=^J6Y-U;7(Cw)C)az3 zE~8DROR<4O#Le!*i4%f)q1$`XiV~&j{0NUK*9`Zovg;0A8@-+@0Fa2(<0Ke$XQKSg z#MRJ{ADa9rEYl1b0&jF$xV;ZH;gMlAGuwJzMY!-0E=&P4?4$vrVjTnL$YNH6r1JI> z6i-C>r{+UjZHiT6qiNcZ-r}LhU-bEt(~rKA*6ui*Vd`DvYRwxCYHuDEktV4kG%BI)E8pQv?^2J&kPofrnEmhmGbnVIUS z6q3!Exg_O}o}bnUjn`J=av9-;CH!M}s^4dlZTw@B47^9zL-p<~#N8;KIv;7-8@=U} zK6s-=WAFW&jzwdyL>IzNK~MwFR2l`Cz~ZpMNY0*MQP=ZiZy9R}-4oNV7;I6uXr_>p1%gi#m~{%XPcnKj;`%Dv3JY3*!V?Ye9??p@lHT07S0a4 zQ+QY*=s6*W|4`peNM$^KG!xFvNFsNsU?=2a@Yhj0pub-gNSM^j{Y|5^mf_3 ziOduFDx={7Vgee}9(wxd5%WAkG@^CaPe3~#p!Nu;n@-BU?<~-_$4@y`Kg_{d(KsQ` z1po9AH?-~2PB~4m#Ifs{!i`1kjBoX+iyDQIf`VIXum6sKY!@*omh7cAxN76X zM&JcPycO+;fziwti6l?gX{;~HH1HHKtlkCMinOudlPEa&*4|afJM7qn5xc$k7j7)x z22k&pKMi+hkaUVzjv1RUk6afK;1tlgpd|lJYBYZv;CRcIVW~3nz2zv78_7s7KAc;i?pzPfoTL zOH3S8swm2+;XlpIGT|5N!7Tjyvh4zG01SVFP=Vu6f0B?)J>#O0E!WB()*F;QLj-?m z8K%3;P7TgH5yLXigi!z=CdS>?bJEZNg60RSj(mG?Ea%Prqu1xWFX?k`3BW*Jh#Lh~ z@aMNQ410Jye`8DSdHbPLb4OhxS;Z@-wry{gDaGAyCesLcWluq1n z9K&;N3O1#A1S!Sn!?Cf@J-*pcf=%VjYr8UxRDXXzS$Jev?m~FaZ7%p z{enA!qeWU`E=o0Oni9{TI44`2@p`~qk`o#CGJ5h#di-SJ3OgeJb>sWp>mBTbJX&Q< zhtW!Ws=-IPe%kAfvZOC0|DVUui;+bn1?FMSMrsyXCcY-l96`dc!T=}hGV!kvqf1{O zap=Wu&SzM%+64i?NaMx?s22CfJAK%C)|V4f!sigLn*4X-1#vbr5CW)<4QR{JCGX_c zntDfeh{M6q#MUqWL<(CJ_NOnE>AAK2wbHX;a>v~KG!exf-)Zsw=MKvYIdZql`C4RG z+Qu#9CyCWO626c$LVh~yVI6;YdeX#&6Z|MX(N=8>`L7Yi7%QLK^SA5)yV8>g22f@0 zogXi9&K&sC`?ay?i9#ZbuB4Hyf}K`n)UB)fLJw}f(`~=CwXiwZE z`LM26*+UtfV#Hhg6EagA=uk0HG{bFs1%fUOE#0Rtx+L6}dpl;1%PKjZnz11x9o8#r zZ5;k>U-I4-;a!Ec0cLAcm|ok@qgyN+b|R@cy1Fw%J7EFqX1niAhSsc7D4_GRL_LcR z7NmLbUn(kC!o6l$L19WmJ)-0mkjI%thuZMb+sb9N0MDCYMFNtW+_Q=C+ov@vUu4TX zI~W$-ULE6@{!NW{Zl<{7u$=pJ4T}gfq}v`0qZ_x;%}LcrgqV~Ih69#H+!7=8U9Co} z$CEI5>|`O9$!G){ud>OdXMUTF(6+zUgCJcoe@Y+LLU|NAwAC@_zV)0oIwVU7?i;Cn zz871OxeEkQI9*!!4AlnHgK^$r%NH#ZQ?bVNO{pY5k@ml;{;ug_;7+J>`lzBqDfFU# z7G>0Igb!u`q5=*Qn#k`?EkFNmp+3clBrZU^sw&RuUw!B}8Uy7ZOW1nSj ziN;FoP3|--v&YI5v$>LFktQL8y)>l3)?*a=zD3T?kZv7%)@2%JnS8Rs2J~cGk1Sq+Wh5(>c}ozDaXU zg@2twmv)*>0p=OT58?DTP*=2>3S2Awc1d?9k zw8aiT4&E{Qx}WJ9D%N&OKjjz;nI{qRKvn&Kx&idd;&$&C_4azFP-XDg#qhL9-`JDx zX{%}I8?%YE@wkkZ&fBsAlb3zpd&vzqLQu$2+!L`QzX0&!X>Nhlv>a&RiM(!=b63N{xF^=%Ut(hoy7k<$lCy)d zku16i@{7e(Z+?LmC!w8_G5WP8PJCr~^{Ns2HU@28X&iq5%w=w!{R?0l7e8PA;#sjY@!mdOHq+}*+bN4f zQ{TgX(rx!u;2sXf$^L>F3>)+wYre~LGQI3SQG0{W0$i~eGPWDGmPsKq2yT7%%+qxP z$^eRK+>wBL`$k4Xu-TtOVwUN&X18lIGKGZ8eE$GNzF`?=H`=@d^A?q)pA2Q7Su!Vs ztaNk&FxvCE3KfwB`_i?#+R5U{ghG0(s?_oteR8BPOaIxBrY{s6=%N(H%Ae z>w{rHE8G1dm)M0X*F^c&{#?7Vd3xi4KVZ8T5->6BHq`aa*?pLc{=>xJQren#zn2fLI(@&`0rZD)s)dJXr-)8)OmRtD~!a#LZYzT zNZg)%;#PzsL_fHw>=bx^{KWV!&@T#F6XjJ=Pp;C zgNYpaBsY_jOm7tD0$|O5kriHrX)wCBh~!VU7F(*cOA0C{m@5rL?Nq1hr|zHjn=aS8 zCQ~kEmKL7xS$?)HhKsrj^qXRRbwa@8!-c;G?&G=!0nlW$k?c5AIy9{II@LR3E zEVuV(gr8^k(_n)|S&`3G1|#-RaKWPCwJ1p;xxKrM&oKVHpyPf32CaWOpcybdSoPwq z>e~Lm?Ea6-SM$&EsoKx#N3#>2%l6T{R=%BAyX14wf1kYgeV44wbJuC^MY+F&BADG$ zf0e+KM*%Su0z)6&BM75)vYK)EeRS{YIo!jPg&~79B<;~)K_c){caBz-dwXPVL^K9v zztk;+(HrsBIf3qiy(^0{85||oEk%jrr{&M5{dUReWSi8$23AeHXDcF_Ty|2)VYM! zRaG0rtKIv@H;{2Gq{^On-|QrojeWaGV%E2CfxX*E^zG2h<_vth0$4rSl|*A4H?Ufs8jL2o z4Dth(-kol=9*lt(tp`Xzzs5`>zMtMU9s2e2^jeCO3w?}w4(p&SV-&XE>rs;VF3>96 zYHN|(sA9~}NL)&TcOy9Rms$UJO&gs5y7L2d-ZOYI8<7R($ctYiUghMwl5s{=8C6Z^ z!vIS+b(})b_>bN4&wGHp-@WUkIKXUuJ-aumA zc~=&HI#aog?DQJHOi}o0R*E^!f(!5Aa+aDf*~N-67c118yfk;18dW2PL{YzVin^l5AG=J5|yluQ>IGduLx`8Q|B7hMLpP8;&uoZ}lCuu;LNe8o?Y$=B^icr@V;PX(8R+GgmV|r0uSId$TLjvP zg;)ha&vNqbl=iIo`kwbbH~00We^i|WrAzipG*vrRn>TT>q&i2}J+3Zt1mHO?L>s{u`LOX>&&;0N@Y$JtrZzla6ta-5* zZO$Oyeqtl1V|w7!BLD)&0pJ>s7}~~08y(WMJf$tw%r3Tqw>!d*N{DuLvOjD_C@_S<`(U95o&zp$D~+E#>HpYNKcBCnIrriFgrPvl}=B4+MEvNezLR@^Now^gKzzK zD{vREmxWs8ok{$&A@lk4YfarK0hY=sGo5&&ER~H3B3w}3JMykprAAh zHbM~rL9rkpAP6c&q=_IPgY2`oIUzVCGwa>=;xI$*Su^=#fk-kan?!w;86!$0V6 z^Pdfj4&T$bZ#TvIlVp*zC{qr5?3{AVTZ6Wq4whs!x@b5XrcOTN5t3C9y9?=PJ3f|` zZuF}XMt~wAB#buygl_;dB#(?mQYOGcJt76@t_9Wzh!@Z zL>j+DSbe)+iuWhpAp(_Yl;bM^JrF5yf`3eL{0kesJtXq2`GvT3mj3&`$N}v4%MA|Z zxqSFf+!+iB{f1hTezF+|47D1FRcPeIq<^&e)dGrxzCE5$;;W*c1l!cE-QVi_dIf!ot%l<24H6 zmhZkPmC|xxy*E25gcQPr*6w#U6~8feA&M>UZO5$Vv2*oz7q_i&^0^5P`zMG?29Wa< zB}9+@kdOs1;bpB!CIMJsopPig@7}AoG`l_M&n||&+`77JDg37N0_&jrP~^;ft%3j_ zcqHtfR{!GWRkee7M;;|{jt&XJB&kE{fj6(C01sL%ynC*ada`yq7(D&sT}(~h_=g)K z5CbqoNhE4-R*ss89KK6E7`FXhgQK#TfYXr#XarS&3k!}^h&0*=%2iYVAi?+JcR-vu z6~#p|ci)|#QS*OO*tz)NnBA$2H#M?vIq-#V=Jvw3OfvoQ?>^CLyb=$-!Fe0RFM0e3 zDOCq$cMLX|N(S7Nb=;(vZ;@p#eQVhPO9|h_&~r5JsAQ(dc3lAv&gIglKsYmqh= z0kbq+{nE~G7sitMF~m>htWL^xh*ugPwsDz}I5%ED`yo4U$Zz^elw;() z9gY&cvy=6if^V`Ads}Xv29-_th1aqDYSdbfjhjVCy2Pd&HT>zG!B7iAiQ!kHH=K#W zi70+<7^f8e+t`wBb1#Ym;B*KRqu?x5cC!yZDb~N~d^aeg&NWz1IndfZPM>OUEZLF0)R3s@6gQ|g7TzzKyb zd3kIyClXW91p>fp5&>*}GbS>l7!sNTEIw~5Q!5+M<>KCvn=yGTfT8zMo5Dc1>E69o z!tUuG%f}Z1tEcVY`EK*X8L2wfbHfv-(V=(DM)(Qj2K^_GH*g&bA<@7T3G& z*d`av?LU}e5IcA?{tW&1;<|IlMl^6TjMUsVN=8>iRibYsMvwU=jd^0bPN;%}_RDj(DwFNuw9 zC#r6_GnL`05E?Icw20j}K-TmJry&m;Z93V}l1C7{_)vj;vyydX=+Jor4`OLj~Wrl4bBgji)Zz#}r*xCAqy z0E;z1fU;345B2U&!C9mn_F!f+emhFWl}N5)UDFC9?oUOk-)y+tGW&K?13=K1ygYWGmOTX~)Nn23Y4AFIh?wyDLUgiUU4{)** z51bpP)8pu8&h`C1@_T4YdhEMJ%3<>>@{y*StLKb!FFTL$T)yvc#6FO|^R1$VZf7_J zTx#Yz1P8o;IzgNqOo|0Jq#ER^z5&%$1;k-2KnczWo&cGU!m$C9U6mT@D(NpWYv?BR z=Uwx1mTPyn?O77ihe@+EArhT74E$n9zl-x2z0DX&wXO;jA)hAns9;AWx4*m<(HxhQl3tLX{d^w3+<&ftS3GH~>pvb4cGww=X3r|fl2wI8+ zEPw~Cp+GMI7T3zlm#N;4?fEorW9OLKsiW7cg3oEi0>)${l?mNPZq3`18?xQKx@iga z3jna-wOt?SUFO?}k4<)5WQVYJz3gsz)&<4pZnEi&*Wt?QG= zi3f^m>a=s$TpF(h#LB8?Qn<$WUbhT|yA9|To=$nVKDwpN7Ez17$b|R8iIB8$jBjWS z%4xudoKhSmLrQ!#xL3Zh;N@^EfE11kIE<6RFX6(NZ8QuiG*v;++j1bK;<)h#a7-j2 z9E8TE{7?uN+e&`-qT*(Z{moa^x3Q0G52>ntGO>9A0$>f^1`%v4E}kBpqrAfQh}_i8 zaU$p_$Rq%q<+dxNevAGfsZdK$><`#TDFk8g^!dl_C9@DF8)i7 z;2E%%$D2kK%+#knpgr|Oy-Wsp_f#?wS($)0Rjg1F6%I7PNdb%Cp~+Y~XD(bj6M-Ii zcwCv~6v0*`a6sr0V2E?LW3~?twXI&3GkIBd^BK{{IW`j=t048ti3EW3`%Ng z3Uy}nF)D%d9K}JGJg_&K_U8H+x@_bram+Yami(=!72XAb@+8=*?vm`-MMPW(|Fd&Kx!4sIc z;J7x+CC9^EWYRLb6SMg~_0%A>Ci&TeoeTwc_t z-}zSdv!K1`R4T_LWR=%H*Vv1BHzi4@Sg{E57$$tQcpxpYnscTr8CMVc%w|Bz)R;Ca z7SpUr1S47X6&Ho8&?LNIfqeRMMqrw7k!V;ljy(_Bj0fb`d%zhf4d97+@nl7VEKbE-Qc;r5!+o&%=LB{Q!}OWvgtoyAJNfPd)~uLt?4i* zO>H~bd7Rn`fDfW!c{9a~fp&v^y+@2t{;FvtAD3&x`@cNg1T822#Wg_Ump*-FTz~(4 z&u7A?RNJcZMN-p%@+~DXM*ZI=)U;MdZVEb3xxXVqKUhi65 zpX{&iAFMP^vB`DSV?P8oAyYo4&UHwu$T_vaWs=yZPG7J3HFY^qpTWZQJr14R%F0S4 zRiA%nwq}7@;-XFEYpX|n?AB|DtSDrQ9%1}v^qsdY7iD~c$E{of%%2|HmX#QkP5hO) zQQnJlG}&Ni9GC=0OCa$nZ(9lFl97Zn-GXiVL*oLEN_)qB-ctVXZ7p4!?fNb$Jro#y zvztXjQgeY*(=!E9On$FFuznj0eKL4|D^dY~Up+bEvn!o*Pe!5?9(<3llRzYTkl;cH zBupaThZT8&t$R1T3@K01$H^Zq~>k8LPFXJs`aS9q){i`9|iTk*8mOhaoOqUOtb&lQ}2>_r^c28M4 z{r%MK$&{eV8n<3CO*5S@R-EuM|5M3mf-L4E&hfc!X)Du3A9REnn~>k}-PgFp)A>f? z-UA{lSffMI@i-@(EEQsoz)qni>~M;ZMu5huED5}}t?2s2G_o73r&FwL_sEwgT(dn{ zArqMs(o+XP-D!C5>}B^Mqt;YbMpic3<{2WrH%-;h+%7}Tw>hqB{;j2*&9=gF_4nty zJn7Xj`;T(@V~X9F8}&&!T{>_*Cah@xGlMt$fY7D|5ddpG3Jb5#9bNG$JQvlYzFvvT z{vxd*E2U=L)a_9n^vO|I(f zRS57jUt5y-$1bomF|ljs>{gij9WG4;V`hWP0Sv+Ln(J-td@p3Tz zU?uNSlaA*i7vV+_jWB{0?jVa1IM~x+q5SEydOiTIyep-_)#{(aHbNVoTvQL~^ZQrd zsbW9e_qMt!u|zdGKWn$QSEU5ZF72*uUz0ZqCduArw4of_Atb5u%{FYZ9gE7R&~Pi# zw2rE?Fa#dHL78Q$&7yDT&HOorP-m6-j6s#dgA#%dY&{8XFKw$+WlBQM<0o3Z?Th>_ z7F3FE*2q{GmH3Yw18x3uPfq;dck`5Y+T7t#Dii}DRg-cAF@gz&i8}f=z zA?+i)+}Gs}J^l|DaGyC@IaB2w1{1=Um{M z5gjqSP~9ik>%~##MW>H;9EXre9zg~YNTKkTh+zp*|8FPOuW2~|YfG>{!zS8_>)a^x zv-~A)nS#OK@g$Q+1oKj)JXd(~r`KGG4}&p=2`1p0J?iw!0DGr<7QOq3B=ybz8A zT8FY>%o(Gcxd(|H2{g|-X$Uz-3m{>Xe#Jq%M8B8;2=0KzdvqfPplOO#pC+dP^Jp4O zrXrGX^u_5DXHNy#W_ipRs8W2mjv}p}*&Z=4SkHJSD(#;ZI#kLu( z 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 P#{r*n`KQ4D7dZb1pF8a| literal 0 HcmV?d00001 diff --git a/tests/songs/subdir/sic.mp3 b/tests/songs/subdir/sic.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..790b2be172509448119206b11aa719a71e4ebe1c GIT binary patch literal 80937 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
1di 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%0ABA2m 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

yv`9GN37 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 literal 0 HcmV?d00001 diff --git a/tile-wide.png b/tile-wide.png new file mode 100755 index 0000000000000000000000000000000000000000..533d38b31ee50b27d1f0f6e4039ddc869724ca59 GIT binary patch literal 4005 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 CNRfL0 literal 0 HcmV?d00001 diff --git a/tile.png b/tile.png new file mode 100755 index 0000000000000000000000000000000000000000..dbcbb6af22421590f2e72f7aba5e374bdc392b79 GIT binary patch literal 8106 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 literal 0 HcmV?d00001